From a6d65cac4335d914b9340dca68ca71f57ef77b4b Mon Sep 17 00:00:00 2001 From: "Hubert Van de Walle (huvw)" Date: Wed, 12 Apr 2023 13:12:38 +0000 Subject: [PATCH] [FIX] mass_mailing: unregister ResizeObserver on unmount Steps to reproduce ================== This only seem to happen on Firefox - Go to Email Marketing - Open a campaign - Go back to the homepage by using the topleft square button -> `$(...).offset() is undefined` Cause of the issue ================== The ResizeObserver used in MassMailingFullWidthViewController is still triggered, even though it shoudln't. Solution ======== Disconnect the observer when the component is unmounted. opw-3271101 closes odoo/odoo#118785 X-original-commit: d5f6bc2b33c3b83520ed2ed710610b69dbe67b75 Signed-off-by: Hubert Van De Walle --- addons/mass_mailing/__manifest__.py | 1 + .../mailing_mailing_view_form_full_width.js | 1 + .../tests/mailing_mailing_view_form_tests.js | 71 +++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 addons/mass_mailing/static/tests/mailing_mailing_view_form_tests.js diff --git a/addons/mass_mailing/__manifest__.py b/addons/mass_mailing/__manifest__.py index 970665fcc0e..a8be759106a 100644 --- a/addons/mass_mailing/__manifest__.py +++ b/addons/mass_mailing/__manifest__.py @@ -130,6 +130,7 @@ 'mass_mailing/static/src/snippets/s_showcase/options.js', 'mass_mailing/static/src/snippets/s_rating/options.js', 'mass_mailing/static/tests/mass_mailing_html_tests.js', + 'mass_mailing/static/tests/mailing_mailing_view_form_tests.js', ], }, 'license': 'LGPL-3', diff --git a/addons/mass_mailing/static/src/js/mailing_mailing_view_form_full_width.js b/addons/mass_mailing/static/src/js/mailing_mailing_view_form_full_width.js index 3f0d2b75cd0..d60cbf5a329 100644 --- a/addons/mass_mailing/static/src/js/mailing_mailing_view_form_full_width.js +++ b/addons/mass_mailing/static/src/js/mailing_mailing_view_form_full_width.js @@ -30,6 +30,7 @@ export class MassMailingFullWidthViewController extends formView.Controller { }); onWillUnmount(() => { $('.o_content').off('.repositionMailingEditorSidebar'); + this._resizeObserver.disconnect(); }); } //-------------------------------------------------------------------------- diff --git a/addons/mass_mailing/static/tests/mailing_mailing_view_form_tests.js b/addons/mass_mailing/static/tests/mailing_mailing_view_form_tests.js new file mode 100644 index 00000000000..5eb0e999600 --- /dev/null +++ b/addons/mass_mailing/static/tests/mailing_mailing_view_form_tests.js @@ -0,0 +1,71 @@ +/** @odoo-module **/ + +import { setupViewRegistries } from "@web/../tests/views/helpers"; +import { patchWithCleanup } from "@web/../tests/helpers/utils"; +import { createWebClient, doAction } from "@web/../tests/webclient/helpers"; +import { MassMailingFullWidthViewController } from "@mass_mailing/js/mailing_mailing_view_form_full_width"; + +let serverData; + +QUnit.module("mass_mailing", {}, function () { + QUnit.module("MassMailingFullWidthViewController", (hooks) => { + hooks.beforeEach(() => { + serverData = { + models: { + partner: { + fields: { + display_name: { string: "Displayed name", type: "char" }, + }, + }, + }, + + actions: { + 1: { + id: 1, + name: "test", + res_model: "partner", + type: "ir.actions.act_window", + views: [[false, "form"]], + }, + 2: { + id: 2, + name: "test", + res_model: "partner", + type: "ir.actions.act_window", + views: [[false, "list"]], + }, + }, + + views: { + "partner,false,form": `
+ + `, + "partner,false,list": ``, + "partner,false,search": ``, + }, + }; + + setupViewRegistries(); + }); + + QUnit.test("unregister ResizeObserver on unmount", async (assert) => { + patchWithCleanup(MassMailingFullWidthViewController.prototype, { + setup() { + this._super(); + patchWithCleanup(this._resizeObserver, { + disconnect() { + assert.step("disconnect"); + return this._super(...arguments); + }, + }); + }, + }); + + const webClient = await createWebClient({ serverData }); + await doAction(webClient, 1); + assert.verifySteps([]); + await doAction(webClient, 2); + assert.verifySteps(["disconnect"]); + }); + }); +});