diff --git a/addons/mail/static/src/core/common/composer.xml b/addons/mail/static/src/core/common/composer.xml index 2b91c40510d..42004a46fa1 100644 --- a/addons/mail/static/src/core/common/composer.xml +++ b/addons/mail/static/src/core/common/composer.xml @@ -18,7 +18,7 @@ Avatar of user
- + Replying to diff --git a/addons/mail/static/src/core/common/thread.js b/addons/mail/static/src/core/common/thread.js index 73cbca28bbc..032aa8dd57a 100644 --- a/addons/mail/static/src/core/common/thread.js +++ b/addons/mail/static/src/core/common/thread.js @@ -202,7 +202,10 @@ export class Thread extends Component { async onClickNotification(ev) { const { oeType, oeId } = ev.target.dataset; if (oeType === "highlight") { - await this.env.messageHighlight?.highlightMessage(Number(oeId), this.props.thread); + await this.env.messageHighlight?.highlightMessage( + this.store.messages[Number(oeId)], + this.props.thread + ); } } diff --git a/addons/mail/static/src/core/common/thread.xml b/addons/mail/static/src/core/common/thread.xml index 7456a911989..95beb8e49a4 100644 --- a/addons/mail/static/src/core/common/thread.xml +++ b/addons/mail/static/src/core/common/thread.xml @@ -40,7 +40,7 @@ messageToReplyTo="props.messageToReplyTo" squashed="isSquashed(msg, prevMsg)" highlighted="messageHighlight?.highlightedMessageId === msg.id" - onParentMessageClick="() => msg.parentMessage and env.messageHighlight?.highlightMessage(msg.parentMessage.id, props.thread)" + onParentMessageClick="() => msg.parentMessage and env.messageHighlight?.highlightMessage(msg.parentMessage, props.thread)" thread="props.thread" messageEdition="props.messageEdition" /> diff --git a/addons/mail/static/src/discuss/message_pin/common/pinned_messages_panel.js b/addons/mail/static/src/discuss/message_pin/common/pinned_messages_panel.js index 8de45751c4c..fcd2f7418b0 100644 --- a/addons/mail/static/src/discuss/message_pin/common/pinned_messages_panel.js +++ b/addons/mail/static/src/discuss/message_pin/common/pinned_messages_panel.js @@ -50,7 +50,7 @@ export class PinnedMessagesPanel extends Component { // to the message. await new Promise((resolve) => setTimeout(() => requestAnimationFrame(resolve))); } - await this.env.messageHighlight?.highlightMessage(message.id, this.props.thread); + await this.env.messageHighlight?.highlightMessage(message, this.props.thread); } /** diff --git a/addons/mail/static/src/utils/common/hooks.js b/addons/mail/static/src/utils/common/hooks.js index e4293515fba..b74f4894262 100644 --- a/addons/mail/static/src/utils/common/hooks.js +++ b/addons/mail/static/src/utils/common/hooks.js @@ -240,15 +240,22 @@ export function useMessageHighlight(duration = 2000) { let timeout; const threadService = useService("mail.thread"); const state = useState({ - async highlightMessage(msgId, thread) { - await threadService.loadAround(thread, msgId); + /** + * @param {import("@mail/core/message_model").Message} message + * @param {import("@mail/core/thread_model").Thread} thread + */ + async highlightMessage(message, thread) { + if (message.originThread.localId !== thread.localId) { + return; + } + await threadService.loadAround(thread, message.id); const lastHighlightedMessageId = state.highlightedMessageId; clearHighlight(); - if (lastHighlightedMessageId === msgId) { + if (lastHighlightedMessageId === message.id) { // Give some time for the state to update. await new Promise(setTimeout); } - state.highlightedMessageId = msgId; + state.highlightedMessageId = message.id; timeout = setTimeout(clearHighlight, duration); }, highlightedMessageId: null,