diff --git a/packages/main/cypress/specs/Toolbar.cy.ts b/packages/main/cypress/specs/Toolbar.cy.ts new file mode 100644 index 000000000000..6c5fa0c867a0 --- /dev/null +++ b/packages/main/cypress/specs/Toolbar.cy.ts @@ -0,0 +1,43 @@ +import { html } from "lit"; +import "../../src/Toolbar.js"; +import "../../src/ToolbarButton.js"; +import "../../src/ToolbarSelect.js"; +import "../../src/ToolbarSelectOption.js"; +import "../../src/ToolbarSeparator.js"; +import type ToolbarItem from "../../src/ToolbarItem.js"; + +describe("Toolbar general interaction", () => { + it("Should not return null upon calling getDomRef for all direct child items", () => { + cy.mount(html` + + + + + + 1 + 2 + 3 + + + + + + + `); + + cy.get("#otb_standard") + .as("toolbar"); + + cy.get("@toolbar") + .should("exist"); + + cy.get("@toolbar") + .children() + .each($el => { + const toolbarItem = $el[0] as ToolbarItem; + cy.wrap(toolbarItem.getDomRef()) + .should("not.be.null") + .should("not.be.undefined"); + }); + }); +}); diff --git a/packages/main/src/Toolbar.ts b/packages/main/src/Toolbar.ts index 2e6659de7836..a68ee1b2677a 100644 --- a/packages/main/src/Toolbar.ts +++ b/packages/main/src/Toolbar.ts @@ -333,6 +333,8 @@ class Toolbar extends UI5Element { onBeforeRendering() { this.detachListeners(); this.attachListeners(); + + this.preprocessItems(); } async onAfterRendering() { @@ -348,19 +350,19 @@ class Toolbar extends UI5Element { */ isOverflowOpen(): boolean { const overflowPopover = this.getOverflowPopover(); - return overflowPopover!.open; + return overflowPopover.open; } openOverflow(): void { const overflowPopover = this.getOverflowPopover(); - overflowPopover!.opener = this.overflowButtonDOM!; - overflowPopover!.open = true; - this.reverseOverflow = overflowPopover!.actualPlacement === "Top"; + overflowPopover.opener = this.overflowButtonDOM!; + overflowPopover.open = true; + this.reverseOverflow = overflowPopover.actualPlacement === "Top"; } closeOverflow() { const overflowPopover = this.getOverflowPopover(); - overflowPopover!.open = false; + overflowPopover.open = false; } toggleOverflow() { @@ -371,8 +373,8 @@ class Toolbar extends UI5Element { } } - getOverflowPopover(): Popover | null { - return this.shadowRoot!.querySelector(".ui5-overflow-popover"); + getOverflowPopover(): Popover { + return this.shadowRoot!.querySelector(".ui5-overflow-popover")!; } /** @@ -616,6 +618,13 @@ class Toolbar extends UI5Element { getRegisteredToolbarItemByID(id: string): HTMLElement | null { return this.itemsDOM!.querySelector(`[data-ui5-external-action-item-id="${id}"]`); } + + preprocessItems() { + this.items.forEach(item => { + item._getRealDomRef = () => this.getDomRef()!.querySelector(`[data-ui5-stable*=${item.stableDomRef}]`) + ?? this.getOverflowPopover().querySelector(`[data-ui5-stable*=${item.stableDomRef}]`)!; + }); + } } Toolbar.define(); diff --git a/packages/main/src/ToolbarButton.hbs b/packages/main/src/ToolbarButton.hbs index 3c8ad9f04fab..02db797dd118 100644 --- a/packages/main/src/ToolbarButton.hbs +++ b/packages/main/src/ToolbarButton.hbs @@ -13,7 +13,6 @@ ?hidden="{{this.hidden}}" data-ui5-external-action-item-id="{{this._id}}" data-ui5-stable="{{this.stableDomRef}}" - .refItemId="{{this._id}}" > {{this.text}} \ No newline at end of file diff --git a/packages/main/src/ToolbarPopoverSelect.hbs b/packages/main/src/ToolbarPopoverSelect.hbs index 38011e45caaa..0590af8dfb87 100644 --- a/packages/main/src/ToolbarPopoverSelect.hbs +++ b/packages/main/src/ToolbarPopoverSelect.hbs @@ -1,5 +1,6 @@ \ No newline at end of file diff --git a/packages/main/src/ToolbarSelect.hbs b/packages/main/src/ToolbarSelect.hbs index ff7bd3735acf..159b38e413c1 100644 --- a/packages/main/src/ToolbarSelect.hbs +++ b/packages/main/src/ToolbarSelect.hbs @@ -1,6 +1,7 @@ \ No newline at end of file diff --git a/packages/main/test/pages/Toolbar.html b/packages/main/test/pages/Toolbar.html index 4625486e5c54..beb46aa2c620 100644 --- a/packages/main/test/pages/Toolbar.html +++ b/packages/main/test/pages/Toolbar.html @@ -29,7 +29,7 @@ Standard Toolbar with ToolbarSelect
- + diff --git a/packages/main/test/specs/Toolbar.spec.js b/packages/main/test/specs/Toolbar.spec.js index 06b4842b085b..271e6f3e240e 100644 --- a/packages/main/test/specs/Toolbar.spec.js +++ b/packages/main/test/specs/Toolbar.spec.js @@ -72,6 +72,4 @@ describe("Toolbar general interaction", () => { assert.strictEqual(await input.getProperty("value"), "1", "Button click event only called once"); await input.setAttribute("value", "0"); }); - - });