diff --git a/addons/mail/static/src/components/chat_window/chat_window.scss b/addons/mail/static/src/components/chat_window/chat_window.scss index 8f0479147cc..ef1e9b42d09 100644 --- a/addons/mail/static/src/components/chat_window/chat_window.scss +++ b/addons/mail/static/src/components/chat_window/chat_window.scss @@ -4,6 +4,7 @@ .o_ChatWindow { overflow: auto; + z-index: $zindex-dropdown; &:not(.o-isDeviceSmall) { width: 325px; diff --git a/addons/mail/static/src/components/chat_window_manager/chat_window_manager.js b/addons/mail/static/src/components/chat_window_manager/chat_window_manager.js index 57794aa1b41..a0694ebd91f 100644 --- a/addons/mail/static/src/components/chat_window_manager/chat_window_manager.js +++ b/addons/mail/static/src/components/chat_window_manager/chat_window_manager.js @@ -7,7 +7,7 @@ const { Component } = owl; export class ChatWindowManager extends Component {} Object.assign(ChatWindowManager, { - props: {}, + props: { record: Object }, template: 'mail.ChatWindowManager', }); diff --git a/addons/mail/static/src/components/chat_window_manager/chat_window_manager.scss b/addons/mail/static/src/components/chat_window_manager/chat_window_manager.scss deleted file mode 100644 index 4bf512a6603..00000000000 --- a/addons/mail/static/src/components/chat_window_manager/chat_window_manager.scss +++ /dev/null @@ -1,7 +0,0 @@ -// ------------------------------------------------------------------ -// Layout -// ------------------------------------------------------------------ - -.o_ChatWindowManager { - z-index: $zindex-dropdown; -} diff --git a/addons/mail/static/src/components/chat_window_manager/chat_window_manager.xml b/addons/mail/static/src/components/chat_window_manager/chat_window_manager.xml index 23a53d895a6..e733d7b8897 100644 --- a/addons/mail/static/src/components/chat_window_manager/chat_window_manager.xml +++ b/addons/mail/static/src/components/chat_window_manager/chat_window_manager.xml @@ -3,14 +3,12 @@
- - - - - - - - + + + + + +
diff --git a/addons/mail/static/src/components/chat_window_manager_container/chat_window_manager_container.js b/addons/mail/static/src/components/chat_window_manager_container/chat_window_manager_container.js new file mode 100644 index 00000000000..5eae2bd09ca --- /dev/null +++ b/addons/mail/static/src/components/chat_window_manager_container/chat_window_manager_container.js @@ -0,0 +1,27 @@ +/** @odoo-module **/ + +import { useModels } from '@mail/component_hooks/use_models'; +// ensure components are registered beforehand. +import '@mail/components/chat_window_manager/chat_window_manager'; +import { getMessagingComponent } from "@mail/utils/messaging_component"; + +const { Component, useSubEnv } = owl; + +export class ChatWindowManagerContainer extends Component { + + /** + * @override + */ + setup() { + // for now, the legacy env is needed for internal functions such as + // `useModels` to work + useSubEnv(Component.env); + useModels(); + super.setup(); + } +} + +Object.assign(ChatWindowManagerContainer, { + components: { ChatWindowManager: getMessagingComponent('ChatWindowManager') }, + template: 'mail.ChatWindowManagerContainer', +}); diff --git a/addons/mail/static/src/components/chat_window_manager_container/chat_window_manager_container.xml b/addons/mail/static/src/components/chat_window_manager_container/chat_window_manager_container.xml new file mode 100644 index 00000000000..a7ddd7d94d1 --- /dev/null +++ b/addons/mail/static/src/components/chat_window_manager_container/chat_window_manager_container.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/addons/mail/static/src/components/dialog_manager/dialog_manager.js b/addons/mail/static/src/components/dialog_manager/dialog_manager.js index f0e0d635cf5..f821053eae6 100644 --- a/addons/mail/static/src/components/dialog_manager/dialog_manager.js +++ b/addons/mail/static/src/components/dialog_manager/dialog_manager.js @@ -23,6 +23,14 @@ export class DialogManager extends Component { this._checkDialogOpen(); } + //-------------------------------------------------------------------------- + // Public + //-------------------------------------------------------------------------- + + get dialogManager() { + return this.props.record; + } + //-------------------------------------------------------------------------- // Private //-------------------------------------------------------------------------- @@ -44,7 +52,7 @@ export class DialogManager extends Component { } Object.assign(DialogManager, { - props: {}, + props: { record: Object }, template: 'mail.DialogManager', }); diff --git a/addons/mail/static/src/components/dialog_manager/dialog_manager.xml b/addons/mail/static/src/components/dialog_manager/dialog_manager.xml index 85fc6bf8c7c..94542c93adc 100644 --- a/addons/mail/static/src/components/dialog_manager/dialog_manager.xml +++ b/addons/mail/static/src/components/dialog_manager/dialog_manager.xml @@ -3,13 +3,11 @@
- - - - + +
diff --git a/addons/mail/static/src/components/dialog_manager_container/dialog_manager_container.js b/addons/mail/static/src/components/dialog_manager_container/dialog_manager_container.js new file mode 100644 index 00000000000..64f1a40bafa --- /dev/null +++ b/addons/mail/static/src/components/dialog_manager_container/dialog_manager_container.js @@ -0,0 +1,27 @@ +/** @odoo-module **/ + +import { useModels } from '@mail/component_hooks/use_models'; +// ensure components are registered beforehand. +import '@mail/components/dialog_manager/dialog_manager'; +import { getMessagingComponent } from "@mail/utils/messaging_component"; + +const { Component, useSubEnv } = owl; + +export class DialogManagerContainer extends Component { + + /** + * @override + */ + setup() { + // for now, the legacy env is needed for internal functions such as + // `useModels` to work + useSubEnv(Component.env); + useModels(); + super.setup(); + } +} + +Object.assign(DialogManagerContainer, { + components: { DialogManager: getMessagingComponent('DialogManager') }, + template: 'mail.DialogManagerContainer', +}); diff --git a/addons/mail/static/src/components/dialog_manager_container/dialog_manager_container.xml b/addons/mail/static/src/components/dialog_manager_container/dialog_manager_container.xml new file mode 100644 index 00000000000..1f730a30ae0 --- /dev/null +++ b/addons/mail/static/src/components/dialog_manager_container/dialog_manager_container.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/addons/mail/static/src/components/discuss_public_view_container/discuss_public_view_container.js b/addons/mail/static/src/components/discuss_public_view_container/discuss_public_view_container.js new file mode 100644 index 00000000000..9373574c03f --- /dev/null +++ b/addons/mail/static/src/components/discuss_public_view_container/discuss_public_view_container.js @@ -0,0 +1,32 @@ +/** @odoo-module **/ + +import { useModels } from '@mail/component_hooks/use_models'; +// ensure components are registered beforehand. +import '@mail/components/discuss_public_view/discuss_public_view'; +import { getMessagingComponent } from "@mail/utils/messaging_component"; + +const { Component, useSubEnv } = owl; + +export class DiscussPublicViewContainer extends Component { + + /** + * @override + */ + setup() { + // for now, the legacy env is needed for internal functions such as + // `useModels` to work + useSubEnv(Component.env); + useModels(); + super.setup(); + } + + get discussPublicView() { + return this.messaging.models['DiscussPublicView'].findFromIdentifyingData(this.messaging); + } + +} + +Object.assign(DiscussPublicViewContainer, { + components: { DiscussPublicView: getMessagingComponent('DiscussPublicView') }, + template: 'mail.DiscussPublicViewContainer', +}); diff --git a/addons/mail/static/src/components/discuss_public_view_container/discuss_public_view_container.xml b/addons/mail/static/src/components/discuss_public_view_container/discuss_public_view_container.xml new file mode 100644 index 00000000000..690bb3bc247 --- /dev/null +++ b/addons/mail/static/src/components/discuss_public_view_container/discuss_public_view_container.xml @@ -0,0 +1,11 @@ + + + +
+ +
+ +
+
+
+
diff --git a/addons/mail/static/src/main.js b/addons/mail/static/src/main.js index a40e45549c3..04e5c66b4a2 100644 --- a/addons/mail/static/src/main.js +++ b/addons/mail/static/src/main.js @@ -1,16 +1,18 @@ /** @odoo-module **/ -import { ChatWindowService } from '@mail/services/chat_window_service/chat_window_service'; -import { DialogService } from '@mail/services/dialog_service/dialog_service'; +import { ChatWindowManagerContainer } from '@mail/components/chat_window_manager_container/chat_window_manager_container'; +import { DialogManagerContainer } from '@mail/components/dialog_manager_container/dialog_manager_container'; import { MessagingService } from '@mail/services/messaging/messaging'; import { SystrayService } from '@mail/services/systray_service/systray_service'; import { DiscussWidget } from '@mail/widgets/discuss/discuss'; import { serviceRegistry, action_registry } from 'web.core'; +import { registry } from '@web/core/registry'; -serviceRegistry.add('chat_window', ChatWindowService); -serviceRegistry.add('dialog', DialogService); serviceRegistry.add('messaging', MessagingService); serviceRegistry.add('systray_service', SystrayService); action_registry.add('mail.widgets.discuss', DiscussWidget); + +registry.category('main_components').add('DialogManagerContainer', { Component: DialogManagerContainer }); +registry.category('main_components').add('ChatWindowManagerContainer', { Component: ChatWindowManagerContainer }); diff --git a/addons/mail/static/src/public/discuss_public_boot.js b/addons/mail/static/src/public/discuss_public_boot.js index 453c1d19ae1..88c3fa69614 100644 --- a/addons/mail/static/src/public/discuss_public_boot.js +++ b/addons/mail/static/src/public/discuss_public_boot.js @@ -2,11 +2,9 @@ import { data } from 'mail.discuss_public_channel_template'; -// ensure components are registered beforehand. -import '@mail/components/dialog_manager/dialog_manager'; -import '@mail/components/discuss_public_view/discuss_public_view'; +import { DialogManagerContainer } from '@mail/components/dialog_manager_container/dialog_manager_container'; +import { DiscussPublicViewContainer } from '@mail/components/discuss_public_view_container/discuss_public_view_container'; import { MessagingService } from '@mail/services/messaging/messaging'; -import { getMessagingComponent } from '@mail/utils/messaging_component'; import { processTemplates } from '@web/core/assets'; import { MainComponentsContainer } from '@web/core/main_components_container'; @@ -40,6 +38,12 @@ Component.env = legacyEnv; serviceRegistry.add('legacy_notification', makeLegacyNotificationService(Component.env)); serviceRegistry.add('legacy_crash_manager', makeLegacyCrashManagerService(Component.env)); serviceRegistry.add('legacy_dialog_mapping', makeLegacyDialogMappingService(Component.env)); + + const mainComponentsRegistry = registry.category('main_components'); + mainComponentsRegistry.add('DiscussPublicViewContainer', { Component: DiscussPublicViewContainer }); + // needed by the attachment viewer + mainComponentsRegistry.add('DialogManagerContainer', { Component: DialogManagerContainer }); + await legacySession.is_bound; Object.assign(odoo, { info: { @@ -63,18 +67,11 @@ Component.env = legacyEnv; }, })); await mount(MainComponentsContainer, document.body, { env, templates, dev: env.debug }); - createAndMountDiscussPublicView(templates); + createDiscussPublicView(); })(); -async function createAndMountDiscussPublicView(templates) { +async function createDiscussPublicView() { const messaging = await Component.env.services.messaging.get(); - // needed by the attachment viewer - const DialogManager = getMessagingComponent('DialogManager'); - await mount(DialogManager, document.body, { - templates, - env: Component.env, - dev: Component.env.isDebug(), - }); messaging.models['Thread'].insert(messaging.models['Thread'].convertData(data.channelData)); const discussPublicView = messaging.models['DiscussPublicView'].create(data.discussPublicViewData); if (discussPublicView.shouldDisplayWelcomeViewInitially) { @@ -82,13 +79,4 @@ async function createAndMountDiscussPublicView(templates) { } else { discussPublicView.switchToThreadView(); } - const DiscussPublicView = getMessagingComponent('DiscussPublicView'); - await mount(DiscussPublicView, document.body, { - templates, - env: Component.env, - dev: Component.env.isDebug(), - props: { - record: discussPublicView, - }, - }); } diff --git a/addons/mail/static/src/services/chat_window_service/chat_window_service.js b/addons/mail/static/src/services/chat_window_service/chat_window_service.js deleted file mode 100644 index 5017674a52f..00000000000 --- a/addons/mail/static/src/services/chat_window_service/chat_window_service.js +++ /dev/null @@ -1,78 +0,0 @@ -/** @odoo-module **/ - -// ensure component is registered beforehand. -import '@mail/components/chat_window_manager/chat_window_manager'; -import { getMessagingComponent } from "@mail/utils/messaging_component"; - -import AbstractService from 'web.AbstractService'; -import { bus } from 'web.core'; - -const { App } = owl; - -export const ChatWindowService = AbstractService.extend({ - dependencies: ['messaging'], - /** - * @override {web.AbstractService} - */ - start() { - this._super(...arguments); - this._listenHomeMenu(); - }, - /** - * @private - */ - destroy() { - if (this.app) { - this.app.destroy(); - this.app = undefined; - } - }, - - //-------------------------------------------------------------------------- - // Private - //-------------------------------------------------------------------------- - - /** - * @private - * @returns {Node} - */ - _getParentNode() { - return document.querySelector('body'); - }, - /** - * @private - */ - _listenHomeMenu() { - bus.on('web_client_ready', this, this._onWebClientReady.bind(this)); - }, - /** - * @private - */ - async _mount() { - if (this.app) { - this.app.destroy(); - this.app = undefined; - } - const ChatWindowManagerComponent = getMessagingComponent("ChatWindowManager"); - this.app = new App(ChatWindowManagerComponent, { - templates: window.__OWL_TEMPLATES__, - env: owl.Component.env, - dev: owl.Component.env.isDebug(), - translateFn: owl.Component.env._t, - translatableAttributes: ["data-tooltip"], - }); - const parentNode = this._getParentNode(); - await this.app.mount(parentNode); - }, - - //-------------------------------------------------------------------------- - // Handlers - //-------------------------------------------------------------------------- - - /** - * @private - */ - async _onWebClientReady() { - await this._mount(); - }, -}); diff --git a/addons/mail/static/src/services/dialog_service/dialog_service.js b/addons/mail/static/src/services/dialog_service/dialog_service.js deleted file mode 100644 index bba424f3778..00000000000 --- a/addons/mail/static/src/services/dialog_service/dialog_service.js +++ /dev/null @@ -1,78 +0,0 @@ -/** @odoo-module **/ - -// ensure component is registered beforehand. -import '@mail/components/dialog_manager/dialog_manager'; -import { getMessagingComponent } from "@mail/utils/messaging_component"; - -import AbstractService from 'web.AbstractService'; -import { bus } from 'web.core'; - -const { App } = owl; - -export const DialogService = AbstractService.extend({ - dependencies: ['messaging'], - /** - * @override {web.AbstractService} - */ - start() { - this._super(...arguments); - this._listenHomeMenu(); - }, - /** - * @private - */ - destroy() { - if (this.app) { - this.app.destroy(); - this.app = undefined; - } - }, - - //-------------------------------------------------------------------------- - // Private - //-------------------------------------------------------------------------- - - /** - * @private - * @returns {Node} - */ - _getParentNode() { - return document.querySelector('body'); - }, - /** - * @private - */ - _listenHomeMenu() { - bus.on('web_client_ready', this, this._onWebClientReady.bind(this)); - }, - /** - * @private - */ - async _mount() { - if (this.app) { - this.app.destroy(); - this.app = undefined; - } - const DialogManagerComponent = getMessagingComponent("DialogManager"); - this.app = new App(DialogManagerComponent, { - templates: window.__OWL_TEMPLATES__, - env: owl.Component.env, - dev: owl.Component.env.isDebug(), - translateFn: owl.Component.env._t, - translatableAttributes: ["data-tooltip"], - }); - const parentNode = this._getParentNode(); - await this.app.mount(parentNode); - }, - - //-------------------------------------------------------------------------- - // Handlers - //-------------------------------------------------------------------------- - - /** - * @private - */ - async _onWebClientReady() { - await this._mount(); - } -}); diff --git a/addons/mail/static/tests/helpers/test_utils.js b/addons/mail/static/tests/helpers/test_utils.js index f196f8ace8c..c354fcf3647 100644 --- a/addons/mail/static/tests/helpers/test_utils.js +++ b/addons/mail/static/tests/helpers/test_utils.js @@ -2,12 +2,12 @@ import BusService from 'bus.BusService'; +import { DialogManagerContainer } from '@mail/components/dialog_manager_container/dialog_manager_container'; +import { ChatWindowManagerContainer } from '@mail/components/chat_window_manager_container/chat_window_manager_container'; import { MessagingMenuContainer } from '@mail/components/messaging_menu_container/messaging_menu_container'; import { insertAndReplace, replace } from '@mail/model/model_field_command'; -import { ChatWindowService } from '@mail/services/chat_window_service/chat_window_service'; import { MessagingService } from '@mail/services/messaging/messaging'; import { makeDeferred } from '@mail/utils/deferred'; -import { DialogService } from '@mail/services/dialog_service/dialog_service'; import { getMessagingComponent } from '@mail/utils/messaging_component'; import { nextTick } from '@mail/utils/utils'; import { DiscussWidget } from '@mail/widgets/discuss/discuss'; @@ -32,11 +32,7 @@ import MockServer from 'web.MockServer'; const { App, Component, EventBus } = owl; const { afterNextRender } = App; -const { - addMockEnvironment, - patch: legacyPatch, - unpatch: legacyUnpatch, -} = mock; +const { addMockEnvironment } = mock; const modelDefinitionsPromise = new Promise(resolve => { QUnit.begin(() => resolve(getModelDefinitions())); @@ -65,42 +61,40 @@ function _createFakeDataTransfer(files) { /** * @private - * @param {Object} callbacks - * @param {function[]} callbacks.init - * @param {function[]} callbacks.mount - * @param {function[]} callbacks.destroy - * @param {function[]} callbacks.return - * @param {Object) params - * @param {function) params.afterNextRender + * @param {HTMLElement} target */ -function _useChatWindow(callbacks, { afterNextRender }) { - callbacks.mount.push(async () => { - // trigger mounting of chat window manager - await afterNextRender(() => Component.env.services['chat_window']._onWebClientReady()); +async function mountChatWindowManagerContainer(target) { + const app = new App(ChatWindowManagerContainer, { + templates: window.__OWL_TEMPLATES__, + env: owl.Component.env, + dev: owl.Component.env.isDebug(), + translateFn: owl.Component.env._t, + translatableAttributes: ["data-tooltip"], }); - callbacks.destroy.push(() => { - Component.env.services['chat_window'].destroy(); + await app.mount(target); + + registerCleanup(() => { + app.destroy(); }); } /** * @private - * @param {Object} callbacks - * @param {function[]} callbacks.init - * @param {function[]} callbacks.mount - * @param {function[]} callbacks.destroy - * @param {function[]} callbacks.return - * @param {Object) params - * @param {function) params.afterNextRender + * @param {HTMLElement} target */ -function _useDialog(callbacks, { afterNextRender }) { - callbacks.mount.push(async () => { - // trigger mounting of dialog manager - await afterNextRender(() => Component.env.services['dialog']._onWebClientReady()); +async function mountDialogManagerContainer(target) { + const app = new App(DialogManagerContainer, { + templates: window.__OWL_TEMPLATES__, + env: owl.Component.env, + dev: owl.Component.env.isDebug(), + translateFn: owl.Component.env._t, + translatableAttributes: ["data-tooltip"], + }); + await app.mount(target); + + registerCleanup(() => { + app.destroy(); }); - callbacks.destroy.push(() => { - Component.env.services['dialog'].destroy(); - }) } //------------------------------------------------------------------------------ @@ -648,12 +642,6 @@ async function start(param0 = {}) { debounce: func => func, throttle: func => func, }); - let callbacks = { - init: [], - mount: [], - destroy: [], - return: [], - }; const { autoOpenDiscuss = false, discuss = {}, @@ -676,17 +664,8 @@ async function start(param0 = {}) { delete param0.hasTimeControl; delete param0.hasView; delete param0.target; - _useChatWindow(callbacks, { afterNextRender }); - _useDialog(callbacks, { afterNextRender }); const messagingBus = new EventBus(); - const { - init: initCallbacks, - mount: mountCallbacks, - destroy: destroyCallbacks, - return: returnCallbacks, - } = callbacks; const { debug = false } = param0; - initCallbacks.forEach(callback => callback(param0)); const testSetupDoneDeferred = makeDeferred(); let env = { ...providedEnv, @@ -722,18 +701,6 @@ async function start(param0 = {}) { }, updateOption() {}, }), - chat_window: ChatWindowService.extend({ - _getParentNode() { - return document.querySelector(debug ? 'body' : '#qunit-fixture'); - }, - _listenHomeMenu: () => {}, - }), - dialog: DialogService.extend({ - _getParentNode() { - return document.querySelector(debug ? 'body' : '#qunit-fixture'); - }, - _listenHomeMenu: () => {}, - }), local_storage: AbstractStorageService.extend({ storage: new RamStorage() }), messaging: MessagingService.extend({ // test specific values @@ -796,13 +763,6 @@ async function start(param0 = {}) { const selector = debug ? 'body' : '#qunit-fixture'; if (hasView) { widget = await createView(kwargs); - legacyPatch(widget, { - destroy() { - destroyCallbacks.forEach(callback => callback({ widget })); - this._super(...arguments); - legacyUnpatch(widget); - } - }); } else if (hasWebClient) { let serverData; if (!kwargs.serverData) { @@ -843,13 +803,6 @@ async function start(param0 = {}) { legacyParams.env = env; widget = await createWebClient({ target: webclientTarget, serverData, mockRPC, legacyParams }); - - legacyPatch(widget, { - destroy() { - destroyCallbacks.forEach(callback => callback({ widget })); - legacyUnpatch(widget); - } - }); } else { const Parent = Widget.extend({ do_push_state() {} }); const parent = new Parent(); @@ -859,7 +812,6 @@ async function start(param0 = {}) { Object.assign(widget, { destroy() { delete widget.destroy; - destroyCallbacks.forEach(callback => callback({ widget })); parent.destroy(); }, }); @@ -895,7 +847,9 @@ async function start(param0 = {}) { } const { modelManager } = testEnv.services.messaging; registerCleanup(async() => { - widget.destroy(); + if (!hasWebClient) { + widget.destroy(); + } await modelManager.messagingInitializedPromise; modelManager.messaging.delete(); }); @@ -906,17 +860,15 @@ async function start(param0 = {}) { await modelManager.messagingCreatedPromise; await modelManager.messagingInitializedPromise; } - if (mountCallbacks.length > 0) { - await Promise.all(mountCallbacks.map(callback => callback({ selector, widget }))); - } - returnCallbacks.forEach(callback => callback(result)); const openDiscuss = getOpenDiscuss({ afterNextRender, discuss, selector, widget }); if (autoOpenDiscuss) { const discussWidget = await openDiscuss(); result['discussWidget'] = discussWidget; } - await waitUntilEventPromise; const target = hasWebClient ? webclientTarget : widget.el; + await mountChatWindowManagerContainer(target); + await mountDialogManagerContainer(target); + await waitUntilEventPromise; return { ...result, afterNextRender, diff --git a/addons/mail/static/tests/qunit_suite_tests/components/chat_window_manager_tests.js b/addons/mail/static/tests/qunit_suite_tests/components/chat_window_manager_tests.js index 6ec1ec82996..fc249484b7b 100644 --- a/addons/mail/static/tests/qunit_suite_tests/components/chat_window_manager_tests.js +++ b/addons/mail/static/tests/qunit_suite_tests/components/chat_window_manager_tests.js @@ -27,27 +27,21 @@ QUnit.test('[technical] messaging not created', async function (assert) { * Time of having no messaging is very short, almost imperceptible by user * on UI, but the display should not crash during this critical time period. */ - assert.expect(2); + assert.expect(1); const messagingBeforeCreationDeferred = makeDeferred(); - await start({ + const { afterNextRender } = await start({ messagingBeforeCreationDeferred, waitUntilMessagingCondition: 'none', }); - assert.containsOnce( - document.body, - '.o_ChatWindowManager', - "should have chat window manager even when messaging is not yet created" - ); // simulate messaging being created - messagingBeforeCreationDeferred.resolve(); - await nextAnimationFrame(); + await afterNextRender(() => messagingBeforeCreationDeferred.resolve()); assert.containsOnce( document.body, '.o_ChatWindowManager', - "should still contain chat window manager after messaging has been created" + "should contain chat window manager after messaging has been created" ); }); diff --git a/addons/mail/static/tests/qunit_suite_tests/components/dialog_manager_tests.js b/addons/mail/static/tests/qunit_suite_tests/components/dialog_manager_tests.js index af9340cb3e0..945ebc35024 100644 --- a/addons/mail/static/tests/qunit_suite_tests/components/dialog_manager_tests.js +++ b/addons/mail/static/tests/qunit_suite_tests/components/dialog_manager_tests.js @@ -1,10 +1,7 @@ /** @odoo-module **/ import { makeDeferred } from '@mail/utils/deferred'; -import { - nextAnimationFrame, - start, -} from '@mail/../tests/helpers/test_utils'; +import { start } from '@mail/../tests/helpers/test_utils'; QUnit.module('mail', {}, function () { QUnit.module('components', {}, function () { @@ -19,27 +16,21 @@ QUnit.test('[technical] messaging not created', async function (assert) { * Time of having no messaging is very short, almost imperceptible by user * on UI, but the display should not crash during this critical time period. */ - assert.expect(2); + assert.expect(1); const messagingBeforeCreationDeferred = makeDeferred(); - await start({ + const { afterNextRender } = await start({ messagingBeforeCreationDeferred, waitUntilMessagingCondition: 'none', }); - assert.containsOnce( - document.body, - '.o_DialogManager', - "should have dialog manager even when messaging is not yet created" - ); // simulate messaging being created - messagingBeforeCreationDeferred.resolve(); - await nextAnimationFrame(); + await afterNextRender(messagingBeforeCreationDeferred.resolve); assert.containsOnce( document.body, '.o_DialogManager', - "should still contain dialog manager after messaging has been created" + "should contain dialog manager after messaging has been created" ); }); diff --git a/addons/project/__manifest__.py b/addons/project/__manifest__.py index dc8570e9ed3..38f3689918a 100644 --- a/addons/project/__manifest__.py +++ b/addons/project/__manifest__.py @@ -116,9 +116,7 @@ ('remove', 'mail/static/src/services/messaging/messaging.js'), ('remove', 'mail/static/src/components/dialog_manager/dialog_manager.js'), - ('remove', 'mail/static/src/services/dialog_service/dialog_service.js'), ('remove', 'mail/static/src/components/chat_window_manager/chat_window_manager.js'), - ('remove', 'mail/static/src/services/chat_window_service/chat_window_service.js'), 'web/static/src/legacy/js/public/public_widget.js', 'portal/static/src/js/portal_chatter.js',