From 2057dd3bfe9f9455986fe472f22a361687531632 Mon Sep 17 00:00:00 2001 From: Romain Estievenart Date: Fri, 28 Jul 2023 11:50:22 +0000 Subject: [PATCH] [FIX] web: traceback occurs on Quick assigns (M2M_tags_avatars) This traceback only occurs if you quickly assign and close the popover during the rerender of the popover. We call an element inside the popover already destroyed. Steps to reproduce: - Open a kanban view inside the project app - Click on the "Quick Assign icon" - Select a user A - Press directly "escape" to close the dropdown a traceback occurs => bug closes odoo/odoo#132337 X-original-commit: f75074d225a05571bea87589b81fbefb11b054f4 Signed-off-by: Romeo Fragomeli (rfr) Signed-off-by: Romain Estievenart (res) --- .../many2many_tags_avatar_field.js | 2 +- .../many2many_tags_avatar_field_tests.js | 51 ++++++++++++++++++- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/addons/web/static/src/views/fields/many2many_tags_avatar/many2many_tags_avatar_field.js b/addons/web/static/src/views/fields/many2many_tags_avatar/many2many_tags_avatar_field.js index 4a4627bf2ae..774fc16e606 100644 --- a/addons/web/static/src/views/fields/many2many_tags_avatar/many2many_tags_avatar_field.js +++ b/addons/web/static/src/views/fields/many2many_tags_avatar/many2many_tags_avatar_field.js @@ -78,7 +78,7 @@ export class Many2ManyTagsAvatarFieldPopover extends Many2ManyTagsAvatarField { // manual render to dirty record this.render(); // update dropdown - this.autoCompleteRef.el.querySelector("input").click(); + this.autoCompleteRef.el?.querySelector("input")?.click(); } get tags() { diff --git a/addons/web/static/tests/views/fields/many2many_tags_avatar_field_tests.js b/addons/web/static/tests/views/fields/many2many_tags_avatar_field_tests.js index b2f75cf2672..fb0c7e2de03 100644 --- a/addons/web/static/tests/views/fields/many2many_tags_avatar_field_tests.js +++ b/addons/web/static/tests/views/fields/many2many_tags_avatar_field_tests.js @@ -1,6 +1,12 @@ /** @odoo-module **/ -import { click, clickSave, getFixture, selectDropdownItem } from "@web/../tests/helpers/utils"; +import { + click, + clickSave, + getFixture, + selectDropdownItem, + triggerEvent, +} from "@web/../tests/helpers/utils"; import { makeView, setupViewRegistries } from "@web/../tests/views/helpers"; import { triggerHotkey } from "../../helpers/utils"; @@ -521,6 +527,49 @@ QUnit.module("Fields", (hooks) => { ); }); + QUnit.test( + "widget many2many_tags_avatar quick add tags and close in kanban view with keyboard navigation", + async function (assert) { + await makeView({ + type: "kanban", + resModel: "turtle", + serverData, + arch: ` + + + +
+ + +
+
+
+
`, + }); + await click(target, ".o_kanban_record:first-child .o_quick_assign", true); + // add and directly close the dropdown + await triggerEvent(target, null, "keydown", { key: "Tab" }); + await triggerEvent(document.activeElement, null, "keydown", { key: "Enter" }); + await triggerEvent(target, null, "keydown", { key: "Escape" }); + assert.containsOnce( + target, + ".o_kanban_record:first-child .o_field_many2many_tags_avatar .o_tag", + "should assign the user" + ); + assert.containsNone( + target, + ".o_kanban_record:first-child .o_field_many2many_tags_avatar .o_popover", + "should have close the popover" + ); + } + ); + QUnit.test( "widget many2many_tags_avatar in kanban view missing access rights", async function (assert) {