diff --git a/addons/mail/static/src/models/messaging_menu/messaging_menu.js b/addons/mail/static/src/models/messaging_menu/messaging_menu.js index 3af0d49fbbe..ebd9f7ac6e1 100644 --- a/addons/mail/static/src/models/messaging_menu/messaging_menu.js +++ b/addons/mail/static/src/models/messaging_menu/messaging_menu.js @@ -1,7 +1,7 @@ /** @odoo-module **/ import { registerModel } from '@mail/model/model_core'; -import { attr } from '@mail/model/model_field'; +import { attr, one2many } from '@mail/model/model_field'; registerModel({ name: 'mail.messaging_menu', @@ -40,11 +40,7 @@ registerModel({ return 0; } const inboxCounter = this.messaging.inbox ? this.messaging.inbox.counter : 0; - const unreadChannelsCounter = this.messaging.models['mail.thread'].all(channel => ( - channel.model === 'mail.channel' && - channel.isPinned && - channel.localMessageUnreadCounter > 0 - )).length; + const unreadChannelsCounter = this.pinnedAndUnreadChannels.length; const notificationGroupsCounter = this.messaging.models['mail.notification_group'].all().reduce( (total, group) => total + group.notifications.length, 0 @@ -81,5 +77,12 @@ registerModel({ isOpen: attr({ default: false, }), + /** + * States all the pinned channels that have unread messages. + */ + pinnedAndUnreadChannels: one2many('mail.thread', { + inverse: 'messagingMenuAsPinnedAndUnreadChannel', + readonly: true, + }), }, }); diff --git a/addons/mail/static/src/models/thread/thread.js b/addons/mail/static/src/models/thread/thread.js index 055ee2fe569..71a0cbef636 100644 --- a/addons/mail/static/src/models/thread/thread.js +++ b/addons/mail/static/src/models/thread/thread.js @@ -1546,6 +1546,18 @@ registerModel({ } return clear(); }, + /** + * @private + * @returns {FieldCommand} + */ + _computeMessagingMenuAsPinnedAndUnreadChannel() { + if (!this.messaging.messagingMenu) { + return clear(); + } + return (this.model === 'mail.channel' && this.isPinned && this.localMessageUnreadCounter > 0) + ? replace(this.messaging.messagingMenu) + : clear(); + }, /** * @private * @returns {mail.message[]} @@ -2177,6 +2189,11 @@ registerModel({ inverse: 'ringingThreads', readonly: true, }), + messagingMenuAsPinnedAndUnreadChannel: many2one('mail.messaging_menu', { + compute: '_computeMessagingMenuAsPinnedAndUnreadChannel', + inverse: 'pinnedAndUnreadChannels', + readonly: true, + }), model: attr({ readonly: true, required: true,