[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) <rfr@odoo.com>
Signed-off-by: Romain Estievenart (res) <res@odoo.com>
This commit is contained in:
Romain Estievenart
2023-08-19 06:59:44 +02:00
parent 885d52f75a
commit 2057dd3bfe
2 changed files with 51 additions and 2 deletions
@@ -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() {
@@ -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: `
<kanban>
<templates>
<t t-name="kanban-box">
<div class="oe_kanban_global_click">
<field name="display_name"/>
<div class="oe_kanban_footer">
<div class="o_kanban_record_bottom">
<div class="oe_kanban_bottom_right">
<field name="partner_ids" widget="many2many_tags_avatar"/>
</div>
</div>
</div>
</div>
</t>
</templates>
</kanban>`,
});
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) {