diff --git a/addons/web/static/src/views/view_button/view_button.js b/addons/web/static/src/views/view_button/view_button.js index 2c31d2354a4..b88eb15fd03 100644 --- a/addons/web/static/src/views/view_button/view_button.js +++ b/addons/web/static/src/views/view_button/view_button.js @@ -1,5 +1,6 @@ /** @odoo-module */ +import { DROPDOWN } from "@web/core/dropdown/dropdown"; import { debounce as debounceFn } from "@web/core/utils/timing"; const { Component } = owl; @@ -84,6 +85,11 @@ export class ViewButton extends Component { this.env.onClickViewButton({ clickParams: this.clickParams, record: this.props.record, + beforeExecute: () => { + if (this.env[DROPDOWN]) { + this.env[DROPDOWN].close(); + } + }, }); } diff --git a/addons/web/static/tests/views/view_button_hook_tests.js b/addons/web/static/tests/views/view_button_hook_tests.js index efd7d38926c..82a8167601e 100644 --- a/addons/web/static/tests/views/view_button_hook_tests.js +++ b/addons/web/static/tests/views/view_button_hook_tests.js @@ -1,11 +1,14 @@ /** @odoo-module */ +import { ViewButton } from "@web/views/view_button/view_button"; import { useViewButtons } from "@web/views/view_button/view_button_hook"; import { setupViewRegistries } from "./helpers"; -import { click, getFixture } from "../helpers/utils"; +import { click, getFixture, mount } from "../helpers/utils"; import { makeTestEnv } from "../helpers/mock_env"; import { registry } from "@web/core/registry"; +import { Dropdown } from "@web/core/dropdown/dropdown"; +import { DropdownItem } from "@web/core/dropdown/dropdown_item"; -const { useRef, mount, Component, xml } = owl; +const { useRef, Component, xml } = owl; QUnit.module("UseViewButton tests", (hooks) => { let target; @@ -76,4 +79,48 @@ QUnit.module("UseViewButton tests", (hooks) => { await click(target, ".myComponent"); assert.verifySteps(["beforeExecuteAction on handler"]); }); + + QUnit.test("ViewButton clicked in Dropdown close the Dropdown", async (assert) => { + registry.category("services").add( + "action", + { + start() { + return { + doActionButton() { + assert.step("doActionButton"); + }, + }; + }, + }, + { force: true } + ); + + class MyComponent extends Component { + setup() { + const rootRef = useRef("root"); + useViewButtons({}, rootRef); + } + } + MyComponent.components = { Dropdown, DropdownItem, ViewButton }; + MyComponent.template = xml` +