diff --git a/addons/mail/static/src/models/messaging/messaging.js b/addons/mail/static/src/models/messaging/messaging.js index 3c6da9d22c6..7cda5063bee 100644 --- a/addons/mail/static/src/models/messaging/messaging.js +++ b/addons/mail/static/src/models/messaging/messaging.js @@ -356,10 +356,11 @@ registerModel({ */ publicPartners: many2many('mail.partner'), /** - * Threads for which the current partner has a pending invitation + * Threads for which the current partner has a pending invitation. + * It is computed from the inverse relation for performance reasons. */ - ringingThreads: many2many('mail.thread', { - compute: '_computeRingingThreads', + ringingThreads: one2many('mail.thread', { + inverse: 'messagingAsRingingThread', }), rtc: one2one('mail.rtc', { default: insertAndReplace(), diff --git a/addons/mail/static/src/models/thread/thread.js b/addons/mail/static/src/models/thread/thread.js index eb24b0d6496..055ee2fe569 100644 --- a/addons/mail/static/src/models/thread/thread.js +++ b/addons/mail/static/src/models/thread/thread.js @@ -1536,6 +1536,16 @@ registerModel({ return total + 1; }, baseCounter); }, + /** + * @private + * @returns {FieldCommand} + */ + _computeMessagingAsRingingThread() { + if (this.rtcInvitingSession) { + return replace(this.messaging); + } + return clear(); + }, /** * @private * @returns {mail.message[]} @@ -2162,6 +2172,11 @@ registerModel({ inverse: 'thread', isCausal: true, }), + messagingAsRingingThread: many2one('mail.messaging', { + compute: '_computeMessagingAsRingingThread', + inverse: 'ringingThreads', + readonly: true, + }), model: attr({ readonly: true, required: true,