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");
});
-
-
});