diff --git a/addons/hr/static/src/js/chat.js b/addons/hr/static/src/js/chat.js index 233b9898e08..86e7d33ffc3 100644 --- a/addons/hr/static/src/js/chat.js +++ b/addons/hr/static/src/js/chat.js @@ -44,18 +44,8 @@ odoo.define('hr.employee_chat', function (require) { open_chat: '_onOpenChat' }), - _onOpenChat: function(ev) { - var self = this; - var dmChat = this.call('mail_service', 'getDMChatFromPartnerID', ev.data.partner_id); - if (dmChat) { - dmChat.detach(); - } else { - var def = this.call('mail_service', 'createChannel', ev.data.partner_id, 'dm_chat').then(function (dmChatId) { - dmChat = self.call('mail_service', 'getChannel', dmChatId); - dmChat.detach(); - }); - Promise.resolve(def); - } + _onOpenChat: function (ev) { + this.call('mail_service', 'openDMChatWindow', ev.data.partner_id); }, }); diff --git a/addons/mail/static/src/js/services/mail_window_manager.js b/addons/mail/static/src/js/services/mail_window_manager.js index c0e8a1e77d3..cb0eb0b7dca 100644 --- a/addons/mail/static/src/js/services/mail_window_manager.js +++ b/addons/mail/static/src/js/services/mail_window_manager.js @@ -52,6 +52,20 @@ MailManager.include({ } } }, + /** + * Open a DM chat in a thread window. + * + * @param {integer} partnerID + * @returns {Promise} + */ + openDMChatWindow: async function (partnerID) { + let dmChat = this.call('mail_service', 'getDMChatFromPartnerID', partnerID); + if (!dmChat) { + const dmChatId = await this.call('mail_service', 'createChannel', partnerID, 'dm_chat'); + dmChat = this.call('mail_service', 'getChannel', dmChatId); + } + dmChat.detach(); + }, /** * Open a DM chat in a thread window. This is useful when selecting a DM * chatin the blank thread window, so that it replaces it with the DM chat