diff --git a/addons/web/static/src/core/dropdown/dropdown.js b/addons/web/static/src/core/dropdown/dropdown.js index 1dfcf1a2bf1..ee6cbce04b5 100644 --- a/addons/web/static/src/core/dropdown/dropdown.js +++ b/addons/web/static/src/core/dropdown/dropdown.js @@ -207,6 +207,10 @@ export class Dropdown extends Component { return this.changeStateAndNotify({ open: toggled, groupIsOpen: toggled }); } + get showCaret() { + return this.props.showCaret === undefined ? this.parentDropdown : this.props.showCaret; + } + // ------------------------------------------------------------------------- // Handlers // ------------------------------------------------------------------------- @@ -341,5 +345,9 @@ Dropdown.props = { type: Object, optional: true, }, + showCaret: { + type: Boolean, + optional: true, + }, }; Dropdown.template = "web.Dropdown"; diff --git a/addons/web/static/src/core/dropdown/dropdown.xml b/addons/web/static/src/core/dropdown/dropdown.xml index b442305bae8..ba63d59e324 100644 --- a/addons/web/static/src/core/dropdown/dropdown.xml +++ b/addons/web/static/src/core/dropdown/dropdown.xml @@ -8,7 +8,7 @@ t-attf-class=" {{ directionCaretClass || ''}} {{ state.open ? 'show' : ''}} - {{ !parentDropdown ? 'o-dropdown--no-caret' : '' }} + {{ !showCaret ? 'o-dropdown--no-caret' : '' }} " t-ref="root" > diff --git a/addons/web/static/tests/core/dropdown_tests.js b/addons/web/static/tests/core/dropdown_tests.js index 1a05206d297..983204db796 100644 --- a/addons/web/static/tests/core/dropdown_tests.js +++ b/addons/web/static/tests/core/dropdown_tests.js @@ -883,6 +883,32 @@ QUnit.module("Components", ({ beforeEach }) => { } }); + QUnit.test("showCaret props adds caret class", async (assert) => { + class Parent extends Component {} + Parent.template = xml` + + O + + O + + + `; + Parent.components = { Dropdown, DropdownItem }; + env = await makeTestEnv(); + await mount(Parent, target, { env }); + assert.containsNone( + target, + ".first.o-dropdown--no-caret", + "first dropdown should have a caret" + ); + await click(target, ".dropdown-toggle"); + assert.containsOnce( + target, + ".second.o-dropdown--no-caret", + "second dropdown should not have a caret" + ); + }); + QUnit.test( "multi-level dropdown: mouseentering a dropdown item should close any subdropdown", async (assert) => {