From 8d8201a8e033b59edb08bf36a9551bfe934e0613 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9ry=20Debongnie?= Date: Tue, 15 Jun 2021 09:23:22 +0000 Subject: [PATCH] [REF] web: small refactoring of dialog service - move dialog state handling in dialog service - remove use of __destroy calls in dialog container closes odoo-dev/odoo#964 Signed-off-by: Aaron Bohy (aab) --- .../tests/base_automation_error_dialog.js | 11 ++---- .../src/core/dialog/dialog_container.js | 34 +++++-------------- .../static/src/core/dialog/dialog_service.js | 15 +++++--- 3 files changed, 20 insertions(+), 40 deletions(-) diff --git a/addons/base_automation/static/tests/base_automation_error_dialog.js b/addons/base_automation/static/tests/base_automation_error_dialog.js index fe5153c4b80..df04c028466 100644 --- a/addons/base_automation/static/tests/base_automation_error_dialog.js +++ b/addons/base_automation/static/tests/base_automation_error_dialog.js @@ -1,6 +1,5 @@ /** @odoo-modules */ -import session from "web.session"; import { registry } from "@web/core/registry"; import { errorService } from "@web/core/errors/error_service"; import { dialogService } from "@web/core/dialog/dialog_service"; @@ -70,17 +69,11 @@ QUnit.module("base_automation", {}, function () { exceptionName: errorContext.exception_class, }); - patchWithCleanup(DialogContainer.prototype, { + patchWithCleanup(BaseAutomationErrorDialog.prototype, { setup() { - this.props.bus.on("ADD", this, ({ class: dialogClass, props }) => { - assert.equal(props.data.context, errorContext, "Received the correct error context"); - }); + assert.equal(this.props.data.context, errorContext, "Received the correct error context"); this._super(); }, - mounted() { - this._super(); - this.el.classList.add("o_dialog_container"); - } }); const env = await makeTestEnv(); diff --git a/addons/web/static/src/core/dialog/dialog_container.js b/addons/web/static/src/core/dialog/dialog_container.js index 7c01c4a466c..564051f1487 100644 --- a/addons/web/static/src/core/dialog/dialog_container.js +++ b/addons/web/static/src/core/dialog/dialog_container.js @@ -1,8 +1,5 @@ /** @odoo-module **/ -import { registry } from "../registry"; -import { useService } from "../service_hook"; - const { Component, tags } = owl; class ErrorHandler extends Component { @@ -15,39 +12,24 @@ ErrorHandler.template = tags.xml` this.remove(id); + return () => this.close(id); } } DialogContainer.components = { ErrorHandler }; DialogContainer.template = tags.xml` -
- - + +
diff --git a/addons/web/static/src/core/dialog/dialog_service.js b/addons/web/static/src/core/dialog/dialog_service.js index b05489d5fb4..bb6145f6c10 100644 --- a/addons/web/static/src/core/dialog/dialog_service.js +++ b/addons/web/static/src/core/dialog/dialog_service.js @@ -25,12 +25,13 @@ const { EventBus } = core; export const dialogService = { /** @returns {DialogServiceInterface} */ start() { + const dialogs = {}; const bus = new EventBus(); let dialogId = 0; registry.category("main_components").add("DialogContainer", { Component: DialogContainer, - props: { bus }, + props: { bus, dialogs }, }); function add(dialogClass, props, options = {}) { @@ -40,10 +41,13 @@ export const dialogService = { const id = ++dialogId; function close() { - if (options.onClose) { - options.onClose(); + if (dialogs[id]) { + delete dialogs[id]; + if (options.onClose) { + options.onClose(); + } + bus.trigger("UPDATE"); } - bus.trigger("REMOVE", id); } const dialog = { @@ -51,7 +55,8 @@ export const dialogService = { class: dialogClass, props: { ...props, close }, }; - bus.trigger("ADD", dialog); + dialogs[id] = dialog; + bus.trigger("UPDATE"); return close; }