From 30087290e9c0894ccade73b059e6efdd732018cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20K=C3=BChn?= Date: Thu, 3 Nov 2022 21:52:21 +0000 Subject: [PATCH] [IMP] mail: introduce useMessagingContainer This commit introduces component hook useMessagingContainer, which allow to lazily use messaging component in template. This allow simplifing some code in container, and more notably in child messaging components, as they can now define their template in models. Task-3055886 Part-of: odoo/odoo#105099 --- .../activity_cell_view/activity_cell_view.js | 25 ------------- .../activity_cell_view/activity_cell_view.xml | 6 ++-- .../activity_cell_view_container.js | 6 ++-- .../activity_cell_view_container.xml | 4 ++- .../kanban_field_activity_view.js | 20 ----------- .../kanban_field_activity_view.xml | 2 +- .../kanban_field_activity_view_container.js | 5 ++- .../kanban_field_activity_view_container.xml | 4 ++- .../list_field_activity_view.js | 20 ----------- .../list_field_activity_view.xml | 4 +-- .../list_field_activity_view_container.js | 5 ++- .../list_field_activity_view_container.xml | 4 ++- .../use_messaging_container.js | 21 +++++++++++ .../call_systray_menu/call_systray_menu.js | 23 ------------ .../call_systray_menu/call_systray_menu.xml | 2 +- .../call_systray_menu_container.js | 9 ++--- .../call_systray_menu_container.xml | 4 ++- .../src/components/chat_window/chat_window.js | 32 ----------------- .../components/chat_window/chat_window.xml | 30 ++++++++-------- .../chat_window_manager.js | 14 -------- .../chat_window_manager.xml | 4 +-- .../chat_window_manager_container.js | 9 ++--- .../chat_window_manager_container.xml | 4 ++- .../static/src/components/chatter/chatter.js | 33 ----------------- .../static/src/components/chatter/chatter.xml | 28 +++++++-------- .../chatter_container/chatter_container.js | 8 ++--- .../chatter_container/chatter_container.xml | 4 ++- .../static/src/components/dialog/dialog.js | 27 -------------- .../static/src/components/dialog/dialog.xml | 8 ++--- .../dialog_manager/dialog_manager.js | 28 --------------- .../dialog_manager/dialog_manager.xml | 2 +- .../dialog_manager_container.js | 11 ++---- .../dialog_manager_container.xml | 4 ++- .../static/src/components/discuss/discuss.js | 26 -------------- .../static/src/components/discuss/discuss.xml | 26 +++++++------- .../discuss_container/discuss_container.js | 8 ++--- .../discuss_container/discuss_container.xml | 4 ++- .../discuss_public_view.js | 22 ------------ .../discuss_public_view.xml | 8 ++--- .../discuss_public_view_container.js | 6 ++-- .../discuss_public_view_container.xml | 4 ++- .../messaging_menu/messaging_menu.js | 36 ------------------- .../messaging_menu/messaging_menu.xml | 26 +++++++------- .../messaging_menu_container.js | 9 ++--- .../messaging_menu_container.xml | 4 ++- .../popover_manager/popover_manager.js | 19 ---------- .../popover_manager/popover_manager.xml | 2 +- .../popover_manager_container.js | 9 ++--- .../popover_manager_container.xml | 4 ++- .../web_client_view_attachment_view.js | 30 ---------------- .../web_client_view_attachment_view.xml | 16 ++++----- ...b_client_view_attachment_view_container.js | 8 ++--- ..._client_view_attachment_view_container.xml | 2 +- addons/mail/static/src/model/model_core.js | 6 ++-- addons/mail/static/src/model/model_manager.js | 5 ++- .../static/src/models/activity_cell_view.js | 3 +- .../mail/static/src/models/activity_view.js | 6 +--- .../static/src/models/call_systray_menu.js | 1 + addons/mail/static/src/models/chat_window.js | 5 +++ .../static/src/models/chat_window_manager.js | 1 + addons/mail/static/src/models/chatter.js | 8 ++++- addons/mail/static/src/models/dialog.js | 1 + .../mail/static/src/models/dialog_manager.js | 5 +++ .../static/src/models/discuss_public_view.js | 1 + addons/mail/static/src/models/discuss_view.js | 1 + .../src/models/kanban_field_activity_view.js | 1 + .../src/models/list_field_activity_view.js | 1 + .../mail/static/src/models/messaging_menu.js | 5 +++ .../mail/static/src/models/popover_manager.js | 1 + .../models/web_client_view_attachment_view.js | 7 +++- .../static/src/utils/messaging_component.js | 2 +- 71 files changed, 210 insertions(+), 529 deletions(-) delete mode 100644 addons/mail/static/src/backend_components/activity_cell_view/activity_cell_view.js delete mode 100644 addons/mail/static/src/backend_components/kanban_field_activity_view/kanban_field_activity_view.js delete mode 100644 addons/mail/static/src/backend_components/list_field_activity_view/list_field_activity_view.js create mode 100644 addons/mail/static/src/component_hooks/use_messaging_container.js delete mode 100644 addons/mail/static/src/components/call_systray_menu/call_systray_menu.js delete mode 100644 addons/mail/static/src/components/chat_window/chat_window.js delete mode 100644 addons/mail/static/src/components/chat_window_manager/chat_window_manager.js delete mode 100644 addons/mail/static/src/components/chatter/chatter.js delete mode 100644 addons/mail/static/src/components/dialog/dialog.js delete mode 100644 addons/mail/static/src/components/dialog_manager/dialog_manager.js delete mode 100644 addons/mail/static/src/components/discuss/discuss.js delete mode 100644 addons/mail/static/src/components/discuss_public_view/discuss_public_view.js delete mode 100644 addons/mail/static/src/components/messaging_menu/messaging_menu.js delete mode 100644 addons/mail/static/src/components/popover_manager/popover_manager.js delete mode 100644 addons/mail/static/src/components/web_client_view_attachment_view/web_client_view_attachment_view.js diff --git a/addons/mail/static/src/backend_components/activity_cell_view/activity_cell_view.js b/addons/mail/static/src/backend_components/activity_cell_view/activity_cell_view.js deleted file mode 100644 index 4166683f999..00000000000 --- a/addons/mail/static/src/backend_components/activity_cell_view/activity_cell_view.js +++ /dev/null @@ -1,25 +0,0 @@ -/** @odoo-module **/ - -import { useRefToModel } from '@mail/component_hooks/use_ref_to_model'; -import { registerMessagingComponent } from '@mail/utils/messaging_component'; - -import { Component } from '@odoo/owl'; - -export class ActivityCellView extends Component { - - setup() { - useRefToModel({ fieldName: 'contentRef', refName: 'content' }); - } - - get activityCellView() { - return this.props.record; - } - -} - -Object.assign(ActivityCellView, { - props: { record: Object }, - template: 'mail.ActivityCellView', -}); - -registerMessagingComponent(ActivityCellView); diff --git a/addons/mail/static/src/backend_components/activity_cell_view/activity_cell_view.xml b/addons/mail/static/src/backend_components/activity_cell_view/activity_cell_view.xml index c8b464b3feb..54d74361ca7 100644 --- a/addons/mail/static/src/backend_components/activity_cell_view/activity_cell_view.xml +++ b/addons/mail/static/src/backend_components/activity_cell_view/activity_cell_view.xml @@ -2,10 +2,10 @@ -
+
-
- +
+
diff --git a/addons/mail/static/src/backend_components/activity_cell_view/activity_cell_view_container.js b/addons/mail/static/src/backend_components/activity_cell_view/activity_cell_view_container.js index 48dba4b3167..e3d10c7cf86 100644 --- a/addons/mail/static/src/backend_components/activity_cell_view/activity_cell_view_container.js +++ b/addons/mail/static/src/backend_components/activity_cell_view/activity_cell_view_container.js @@ -1,9 +1,7 @@ /** @odoo-module **/ -// ensure components are registered beforehand. -import '@mail/backend_components/activity_cell_view/activity_cell_view'; +import { useMessagingContainer } from '@mail/component_hooks/use_messaging_container'; import { insert } from '@mail/model/model_field_command'; -import { getMessagingComponent } from '@mail/utils/messaging_component'; import { Component, onWillDestroy, onWillUpdateProps } from '@odoo/owl'; @@ -25,6 +23,7 @@ export class ActivityCellViewContainer extends Component { * @override */ setup() { + useMessagingContainer(); super.setup(); this.activityCellView = undefined; this.activityCellViewId = getNextId(); @@ -85,7 +84,6 @@ export class ActivityCellViewContainer extends Component { } Object.assign(ActivityCellViewContainer, { - components: { ActivityCellView: getMessagingComponent('ActivityCellView') }, props: { activityIds: { type: Array, diff --git a/addons/mail/static/src/backend_components/activity_cell_view/activity_cell_view_container.xml b/addons/mail/static/src/backend_components/activity_cell_view/activity_cell_view_container.xml index 783f3b7525d..dd1b290df3f 100644 --- a/addons/mail/static/src/backend_components/activity_cell_view/activity_cell_view_container.xml +++ b/addons/mail/static/src/backend_components/activity_cell_view/activity_cell_view_container.xml @@ -2,7 +2,9 @@ - + + + diff --git a/addons/mail/static/src/backend_components/kanban_field_activity_view/kanban_field_activity_view.js b/addons/mail/static/src/backend_components/kanban_field_activity_view/kanban_field_activity_view.js deleted file mode 100644 index 301cfec9a17..00000000000 --- a/addons/mail/static/src/backend_components/kanban_field_activity_view/kanban_field_activity_view.js +++ /dev/null @@ -1,20 +0,0 @@ -/** @odoo-module **/ - -import { registerMessagingComponent } from '@mail/utils/messaging_component'; - -import { Component } from '@odoo/owl'; - -export class KanbanFieldActivityView extends Component { - - get kanbanFieldActivityView() { - return this.props.record; - } - -} - -Object.assign(KanbanFieldActivityView, { - props: { record: Object }, - template: 'mail.KanbanFieldActivityView', -}); - -registerMessagingComponent(KanbanFieldActivityView); diff --git a/addons/mail/static/src/backend_components/kanban_field_activity_view/kanban_field_activity_view.xml b/addons/mail/static/src/backend_components/kanban_field_activity_view/kanban_field_activity_view.xml index 7321e47f503..19268de9fcc 100644 --- a/addons/mail/static/src/backend_components/kanban_field_activity_view/kanban_field_activity_view.xml +++ b/addons/mail/static/src/backend_components/kanban_field_activity_view/kanban_field_activity_view.xml @@ -2,7 +2,7 @@ - + diff --git a/addons/mail/static/src/backend_components/kanban_field_activity_view/kanban_field_activity_view_container.js b/addons/mail/static/src/backend_components/kanban_field_activity_view/kanban_field_activity_view_container.js index 84923b00ae1..c88894382c0 100644 --- a/addons/mail/static/src/backend_components/kanban_field_activity_view/kanban_field_activity_view_container.js +++ b/addons/mail/static/src/backend_components/kanban_field_activity_view/kanban_field_activity_view_container.js @@ -1,8 +1,7 @@ /** @odoo-module **/ // ensure components are registered beforehand. -import '@mail/backend_components/kanban_field_activity_view/kanban_field_activity_view'; -import { getMessagingComponent } from '@mail/utils/messaging_component'; +import { useMessagingContainer } from '@mail/component_hooks/use_messaging_container'; import { registry } from "@web/core/registry"; import { standardFieldProps } from "@web/views/fields/standard_field_props"; @@ -28,6 +27,7 @@ export class KanbanFieldActivityViewContainer extends Component { */ setup() { super.setup(); + useMessagingContainer(); this.kanbanFieldActivityView = undefined; this.kanbanFieldActivityViewId = getNextId(); this._insertFromProps(this.props); @@ -80,7 +80,6 @@ export class KanbanFieldActivityViewContainer extends Component { } Object.assign(KanbanFieldActivityViewContainer, { - components: { KanbanFieldActivityView: getMessagingComponent('KanbanFieldActivityView') }, fieldDependencies: { activity_exception_decoration: { type: 'selection' }, activity_exception_icon: { type: 'char' }, diff --git a/addons/mail/static/src/backend_components/kanban_field_activity_view/kanban_field_activity_view_container.xml b/addons/mail/static/src/backend_components/kanban_field_activity_view/kanban_field_activity_view_container.xml index f29585e6434..ca824c78937 100644 --- a/addons/mail/static/src/backend_components/kanban_field_activity_view/kanban_field_activity_view_container.xml +++ b/addons/mail/static/src/backend_components/kanban_field_activity_view/kanban_field_activity_view_container.xml @@ -2,7 +2,9 @@ - + + + diff --git a/addons/mail/static/src/backend_components/list_field_activity_view/list_field_activity_view.js b/addons/mail/static/src/backend_components/list_field_activity_view/list_field_activity_view.js deleted file mode 100644 index abf477dd1b4..00000000000 --- a/addons/mail/static/src/backend_components/list_field_activity_view/list_field_activity_view.js +++ /dev/null @@ -1,20 +0,0 @@ -/** @odoo-module **/ - -import { registerMessagingComponent } from '@mail/utils/messaging_component'; - -import { Component } from '@odoo/owl'; - -export class ListFieldActivityView extends Component { - - get listFieldActivityView() { - return this.props.record; - } - -} - -Object.assign(ListFieldActivityView, { - props: { record: Object }, - template: 'mail.ListFieldActivityView', -}); - -registerMessagingComponent(ListFieldActivityView); diff --git a/addons/mail/static/src/backend_components/list_field_activity_view/list_field_activity_view.xml b/addons/mail/static/src/backend_components/list_field_activity_view/list_field_activity_view.xml index 4e6cf99f748..9e319d4cd65 100644 --- a/addons/mail/static/src/backend_components/list_field_activity_view/list_field_activity_view.xml +++ b/addons/mail/static/src/backend_components/list_field_activity_view/list_field_activity_view.xml @@ -2,8 +2,8 @@ - - + + diff --git a/addons/mail/static/src/backend_components/list_field_activity_view/list_field_activity_view_container.js b/addons/mail/static/src/backend_components/list_field_activity_view/list_field_activity_view_container.js index 7854d1a41e2..bb6c3200085 100644 --- a/addons/mail/static/src/backend_components/list_field_activity_view/list_field_activity_view_container.js +++ b/addons/mail/static/src/backend_components/list_field_activity_view/list_field_activity_view_container.js @@ -1,8 +1,7 @@ /** @odoo-module **/ // ensure components are registered beforehand. -import '@mail/backend_components/list_field_activity_view/list_field_activity_view'; -import { getMessagingComponent } from '@mail/utils/messaging_component'; +import { useMessagingContainer } from '@mail/component_hooks/use_messaging_container'; import { registry } from "@web/core/registry"; import { standardFieldProps } from "@web/views/fields/standard_field_props"; @@ -28,6 +27,7 @@ export class ListFieldActivityViewContainer extends Component { */ setup() { super.setup(); + useMessagingContainer(); this.listFieldActivityView = undefined; this.listFieldActivityViewId = getNextId(); this._insertFromProps(this.props); @@ -80,7 +80,6 @@ export class ListFieldActivityViewContainer extends Component { } Object.assign(ListFieldActivityViewContainer, { - components: { ListFieldActivityView: getMessagingComponent('ListFieldActivityView') }, fieldDependencies: { activity_exception_decoration: { type: 'selection' }, activity_exception_icon: { type: 'char' }, diff --git a/addons/mail/static/src/backend_components/list_field_activity_view/list_field_activity_view_container.xml b/addons/mail/static/src/backend_components/list_field_activity_view/list_field_activity_view_container.xml index 8de371fb8b4..cf1cd4b465c 100644 --- a/addons/mail/static/src/backend_components/list_field_activity_view/list_field_activity_view_container.xml +++ b/addons/mail/static/src/backend_components/list_field_activity_view/list_field_activity_view_container.xml @@ -2,7 +2,9 @@ - + + + diff --git a/addons/mail/static/src/component_hooks/use_messaging_container.js b/addons/mail/static/src/component_hooks/use_messaging_container.js new file mode 100644 index 00000000000..e89e0a6223b --- /dev/null +++ b/addons/mail/static/src/component_hooks/use_messaging_container.js @@ -0,0 +1,21 @@ +/** @odoo-module **/ + +import { useModels } from '@mail/component_hooks/use_models'; +import { componentRegistry, getMessagingComponent } from "@mail/utils/messaging_component"; + +import { useComponent } from '@odoo/owl'; + +export function useMessagingContainer() { + const component = useComponent(); + component.isLoaded = false; + useModels(); + component.env.services.messaging.modelManager.messagingCreatedPromise.then(() => { + let components = { ...component.constructor.components }; + for (const name in componentRegistry) { + Object.assign(components, { [name]: getMessagingComponent(name) }); + } + component.constructor.components = components; + component.isLoaded = true; + component.render(); + }); +} diff --git a/addons/mail/static/src/components/call_systray_menu/call_systray_menu.js b/addons/mail/static/src/components/call_systray_menu/call_systray_menu.js deleted file mode 100644 index 75b0b1e5b05..00000000000 --- a/addons/mail/static/src/components/call_systray_menu/call_systray_menu.js +++ /dev/null @@ -1,23 +0,0 @@ -/** @odoo-module **/ - -import { registerMessagingComponent } from '@mail/utils/messaging_component'; - -import { Component } from '@odoo/owl'; - -export class CallSystrayMenu extends Component { - - /** - * @returns {CallSystrayMenu} - */ - get callSystrayMenu() { - return this.props.record; - } - -} - -Object.assign(CallSystrayMenu, { - props: { record: Object }, - template: 'mail.CallSystrayMenu', -}); - -registerMessagingComponent(CallSystrayMenu); diff --git a/addons/mail/static/src/components/call_systray_menu/call_systray_menu.xml b/addons/mail/static/src/components/call_systray_menu/call_systray_menu.xml index 3e3b362b6f7..70acc889b02 100644 --- a/addons/mail/static/src/components/call_systray_menu/call_systray_menu.xml +++ b/addons/mail/static/src/components/call_systray_menu/call_systray_menu.xml @@ -5,7 +5,7 @@