diff options
Diffstat (limited to 'addons/mail/static/src/components/message')
| -rw-r--r-- | addons/mail/static/src/components/message/message.js | 25 | ||||
| -rw-r--r-- | addons/mail/static/src/components/message/message_tests.js | 46 |
2 files changed, 55 insertions, 16 deletions
diff --git a/addons/mail/static/src/components/message/message.js b/addons/mail/static/src/components/message/message.js index 7d314647bb2..499c462efe9 100644 --- a/addons/mail/static/src/components/message/message.js +++ b/addons/mail/static/src/components/message/message.js @@ -435,22 +435,15 @@ class Message extends Component { ev.preventDefault(); return; } - if (ev.target.closest('.o_mention')) { - this.env.messaging.openProfile({ - id: Number(ev.target.dataset.oeId), - model: ev.target.dataset.oeModel, - }); - // avoid following dummy href - ev.preventDefault(); - return; - } - if (ev.target.closest('.o_mail_redirect')) { - this.env.messaging.openProfile({ - id: Number(ev.target.dataset.oeId), - model: ev.target.dataset.oeModel, - }); - // avoid following dummy href - ev.preventDefault(); + if (ev.target.tagName === 'A') { + if (ev.target.dataset.oeId && ev.target.dataset.oeModel) { + this.env.messaging.openProfile({ + id: Number(ev.target.dataset.oeId), + model: ev.target.dataset.oeModel, + }); + // avoid following dummy href + ev.preventDefault(); + } return; } this.state.isClicked = !this.state.isClicked; diff --git a/addons/mail/static/src/components/message/message_tests.js b/addons/mail/static/src/components/message/message_tests.js index cc2764389f0..3d7bf1da396 100644 --- a/addons/mail/static/src/components/message/message_tests.js +++ b/addons/mail/static/src/components/message/message_tests.js @@ -783,6 +783,52 @@ QUnit.test('subtype description should not be displayed if it is similar to body ); }); +QUnit.test('data-oe-id & data-oe-model link redirection on click', async function (assert) { + assert.expect(7); + + const bus = new Bus(); + bus.on('do-action', null, payload => { + assert.strictEqual( + payload.action.type, + 'ir.actions.act_window', + "action should open view" + ); + assert.strictEqual( + payload.action.res_model, + 'some.model', + "action should open view on 'some.model' model" + ); + assert.strictEqual( + payload.action.res_id, + 250, + "action should open view on 250" + ); + assert.step('do-action:openFormView_some.model_250'); + }); + await this.start({ env: { bus } }); + const message = this.env.models['mail.message'].create({ + body: `<p><a href="#" data-oe-id="250" data-oe-model="some.model">some.model_250</a></p>`, + id: 100, + }); + await this.createMessageComponent(message); + assert.containsOnce( + document.body, + '.o_Message_content', + "message should have content" + ); + assert.containsOnce( + document.querySelector('.o_Message_content'), + 'a', + "message content should have a link" + ); + + document.querySelector(`.o_Message_content a`).click(); + assert.verifySteps( + ['do-action:openFormView_some.model_250'], + "should have open form view on related record after click on link" + ); +}); + }); }); }); |
