From 86d00f1053a8a257948767f817341b0867cabf25 Mon Sep 17 00:00:00 2001 From: "Michael (mcm)" Date: Wed, 10 Jan 2024 09:46:28 +0100 Subject: [PATCH] [FIX] web: fix searchbar menu position Before this commit, the searchbar menu was misplaced after opening the advanced search dialog. After this commit, the searchbar menu is always at the correct position. Task-id: 3673493 X-original-commit: 19d40f48fb98b28b7fd49b79581ac0ac5fcecc87 Part-of: odoo/odoo#149655 --- .../web/static/src/core/dropdown/dropdown.js | 2 ++ .../web/static/tests/core/dropdown_tests.js | 30 +++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/addons/web/static/src/core/dropdown/dropdown.js b/addons/web/static/src/core/dropdown/dropdown.js index 753412d31e1..9368fce9d61 100644 --- a/addons/web/static/src/core/dropdown/dropdown.js +++ b/addons/web/static/src/core/dropdown/dropdown.js @@ -167,6 +167,8 @@ export class Dropdown extends Component { (isOpen) => { if (isOpen) { this.props.onOpened(); + } else { + this.position.unlock(); } }, () => [this.state.open] diff --git a/addons/web/static/tests/core/dropdown_tests.js b/addons/web/static/tests/core/dropdown_tests.js index 3769aec5f36..36d6ca0a72c 100644 --- a/addons/web/static/tests/core/dropdown_tests.js +++ b/addons/web/static/tests/core/dropdown_tests.js @@ -268,6 +268,36 @@ QUnit.module("Components", ({ beforeEach }) => { assert.strictEqual(menuBox3.top - menuBox1.top, 100); }); + QUnit.test("unlock position after close", async (assert) => { + class Parent extends Component { + static template = xml` +
+ + +
+ `; + static components = { Dropdown }; + } + env = await makeTestEnv(); + await mount(Parent, target, { env }); + assert.containsNone(target, ".dropdown-menu"); + await click(target, "button.dropdown-toggle"); + assert.containsOnce(target, ".dropdown-menu"); + const menuBox1 = target.querySelector(".dropdown-menu").getBoundingClientRect(); + + // Pointer enter the dropdown menu to lock the menu + await mouseEnter(target, ".dropdown-menu"); + // close the menu + await click(target); + assert.containsNone(target, ".dropdown-menu"); + + // and reopen it + await click(target, "button.dropdown-toggle"); + assert.containsOnce(target, ".dropdown-menu"); + const menuBox2 = target.querySelector(".dropdown-menu").getBoundingClientRect(); + assert.strictEqual(menuBox2.left - menuBox1.left, 0); + }); + QUnit.test("payload received on item selection", async (assert) => { class Parent extends Component { onItemSelected(value) {