From 6fb5c3d82dd0e752cb448dd1bed040616a211854 Mon Sep 17 00:00:00 2001 From: Priyanka Kakadiya Date: Fri, 24 Dec 2021 13:32:09 +0000 Subject: [PATCH] [FIX] mail: fix back button issue to close channel MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Before this commit: When switching to mobile view and refreshing the channel in discuss than back arrow button is not working After this commit: Back arrow button will close the channel Task-2685187 closes odoo/odoo#85034 X-original-commit: ebe56aac6d11e967d3b2fc8b57031e1b0e8ea726 Signed-off-by: Sébastien Theys (seb) Signed-off-by: Alexandre Kühn (aku) --- .../mail/static/src/components/discuss/discuss.js | 3 --- addons/mail/static/src/models/discuss/discuss.js | 12 +++++++++--- addons/mail/static/src/widgets/discuss/discuss.js | 14 ++++++++++++-- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/addons/mail/static/src/components/discuss/discuss.js b/addons/mail/static/src/components/discuss/discuss.js index 3003ce45edc..732d0f311d3 100644 --- a/addons/mail/static/src/components/discuss/discuss.js +++ b/addons/mail/static/src/components/discuss/discuss.js @@ -25,8 +25,6 @@ export class Discuss extends Component { } if (this.discussView.discuss.thread) { this.trigger('o-push-state-action-manager'); - } else if (!this._activeThreadCache) { - this.discussView.discuss.openInitThread(); } if ( this.discussView.discuss.thread && @@ -37,7 +35,6 @@ export class Discuss extends Component { ) { this.trigger('o-show-rainbow-man'); } - this._activeThreadCache = this.discussView.discuss.threadView && this.discussView.discuss.threadView.threadCache; this._updateLocalStoreProps(); } diff --git a/addons/mail/static/src/models/discuss/discuss.js b/addons/mail/static/src/models/discuss/discuss.js index 3fc90ca5592..5944f1ca642 100644 --- a/addons/mail/static/src/models/discuss/discuss.js +++ b/addons/mail/static/src/models/discuss/discuss.js @@ -161,9 +161,7 @@ registerModel({ this.update({ discussView: insertAndReplace() }); }, /** - * Open thread from init active id. `initActiveId` is used to refer to - * a thread that we may not have full data yet, such as when messaging - * is not yet initialized. + * Opens thread from init active id if the thread exists. */ openInitThread() { const [model, id] = typeof this.initActiveId === 'number' @@ -396,6 +394,14 @@ registerModel({ compute: '_computeIsAddingChat', default: false, }), + /** + * Determines if the logic for opening a thread via the `initActiveId` + * has been processed. This is necessary to ensure that this only + * happens once. + */ + isInitThreadHandled: attr({ + default: false, + }), /** * The menu_id of discuss app, received on mail/init_messaging and * used to open discuss from elsewhere. diff --git a/addons/mail/static/src/widgets/discuss/discuss.js b/addons/mail/static/src/widgets/discuss/discuss.js index 09d87808544..7a272f67258 100644 --- a/addons/mail/static/src/widgets/discuss/discuss.js +++ b/addons/mail/static/src/widgets/discuss/discuss.js @@ -1,6 +1,7 @@ /** @odoo-module **/ import { DiscussContainer } from "@mail/components/discuss_container/discuss_container"; +import { insertAndReplace } from '@mail/model/model_field_command'; import AbstractAction from 'web.AbstractAction'; @@ -31,14 +32,23 @@ export const DiscussWidget = AbstractAction.extend({ this._lastPushStateActiveThread = null; this.env = Component.env; - Component.env.services.messaging.modelManager.messagingCreatedPromise.then(() => { + Component.env.services.messaging.modelManager.messagingCreatedPromise.then(async () => { const messaging = Component.env.services.messaging.modelManager.messaging; const initActiveId = this.options.active_id || (this.action.context && this.action.context.active_id) || (this.action.params && this.action.params.default_active_id) || 'mail.box_inbox'; this.discuss = messaging.discuss; - this.discuss.update({ initActiveId }); + this.discuss.update({ discussView: insertAndReplace(), initActiveId }); + // Wait for messaging to be initialized to make sure the system + // knows of the "init thread" if it exists. + await messaging.initializedPromise; + if (!this.discuss.isInitThreadHandled) { + this.discuss.update({ isInitThreadHandled: true }); + if (!this.discuss.thread) { + this.discuss.openInitThread(); + } + } }); }, /**