From d16efb624f4d581bfa413cb96a4eebd4b9ce29d8 Mon Sep 17 00:00:00 2001 From: Diana Pazheva Date: Thu, 25 Jan 2024 14:58:01 +0200 Subject: [PATCH] fix(ui5-shellbar): allow prevent default 'menu-item-click' action (#8172) * fix(ui5-shellbar): allow prevent default 'menu-item-click' action * fix(ui5-shellbar): remove recundant code --- packages/fiori/src/ShellBar.ts | 6 ++++-- packages/fiori/test/pages/ShellBar.html | 4 ++++ packages/fiori/test/specs/ShellBar.spec.js | 20 +++++++++++++++++++- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/packages/fiori/src/ShellBar.ts b/packages/fiori/src/ShellBar.ts index 29d35fa33c6e..e85375f8039d 100644 --- a/packages/fiori/src/ShellBar.ts +++ b/packages/fiori/src/ShellBar.ts @@ -563,10 +563,12 @@ class ShellBar extends UI5Element { } _menuItemPress(e: CustomEvent) { - this.menuPopover!.close(); - this.fireEvent("menu-item-click", { + const shouldContinue = this.fireEvent("menu-item-click", { item: e.detail.selectedItems[0], }, true); + if (shouldContinue) { + this.menuPopover!.close(); + } } _logoPress() { diff --git a/packages/fiori/test/pages/ShellBar.html b/packages/fiori/test/pages/ShellBar.html index 98368cd31259..85fcca123e4f 100644 --- a/packages/fiori/test/pages/ShellBar.html +++ b/packages/fiori/test/pages/ShellBar.html @@ -97,6 +97,7 @@ + ShellBar in Compact }); shellbar.addEventListener("ui5-menu-item-click", function(event) { + if (checkKeepPopoverOpen.checked) { + event.preventDefault(); + } var item = event.detail.item; window["press-input"].value = item.textContent; window["press-data"].value = item.getAttribute("data-key"); diff --git a/packages/fiori/test/specs/ShellBar.spec.js b/packages/fiori/test/specs/ShellBar.spec.js index 5646c218867e..c8c3d96c5a2d 100644 --- a/packages/fiori/test/specs/ShellBar.spec.js +++ b/packages/fiori/test/specs/ShellBar.spec.js @@ -65,16 +65,34 @@ describe("Component Behavior", () => { }); describe("ui5-shellbar menu", () => { + it("tests prevents close on content click", async () => { + const primaryTitle = await browser.$("#shellbar").shadow$(".ui5-shellbar-menu-button"); + const staticAreaItemClassName = await browser.getStaticAreaItemClassName("#shellbar"); + const menuPopover = await browser.$(`.${staticAreaItemClassName}`).shadow$(".ui5-shellbar-menu-popover"); + const firstMenuItem = await menuPopover.$("ui5-list > ui5-li"); + const checkBox = await browser.$("#checkKeepPopoverOpen"); + + await checkBox.setProperty("checked", true); + + await primaryTitle.click(); + await firstMenuItem.click(); + + assert.strictEqual(await menuPopover.getProperty("opened"), true, "Popover remains open"); + }); + it("tests close on content click", async () => { const primaryTitle = await browser.$("#shellbar").shadow$(".ui5-shellbar-menu-button"); const staticAreaItemClassName = await browser.getStaticAreaItemClassName("#shellbar"); const menuPopover = await browser.$(`.${staticAreaItemClassName}`).shadow$(".ui5-shellbar-menu-popover"); const firstMenuItem = await menuPopover.$("ui5-list > ui5-li"); + const checkBox = await browser.$("#checkKeepPopoverOpen"); + + await checkBox.setProperty("checked", false); await primaryTitle.click(); await firstMenuItem.click(); - assert.strictEqual(await menuPopover.getProperty("opened"), false, "Count property propagates to ui5-button"); + assert.strictEqual(await menuPopover.getProperty("opened"), false, "Popover is closed"); }); });