diff --git a/packages/fiori/cypress/specs/SideNavigationWithGroups.cy.tsx b/packages/fiori/cypress/specs/SideNavigationWithGroups.cy.tsx index e318ff969993..c6582e0cb8c6 100644 --- a/packages/fiori/cypress/specs/SideNavigationWithGroups.cy.tsx +++ b/packages/fiori/cypress/specs/SideNavigationWithGroups.cy.tsx @@ -3,10 +3,11 @@ import SideNavigationGroup from "../../src/SideNavigationGroup.js"; import SideNavigationItem from "../../src/SideNavigationItem.js"; describe("Component Behavior", () => { - describe("Main functionality", async () => { - it("rendering", async () => { + describe("Main functionality", () => { + it("rendering", () => { cy.mount( + { .should("not.exist"); }); - it("collapse/expand", async () => { + it("collapse/expand", () => { cy.mount( + + + + + ); cy.get("#group1").should("have.prop", "expanded", true); @@ -45,13 +54,42 @@ describe("Component Behavior", () => { .shadow() .find(".ui5-sn-item") .realClick(); - cy.get("#group1").should("not.have.prop", "expanded"); + cy.get("#group1").should("have.prop", "expanded", false); cy.get("#group1") .shadow() .find(".ui5-sn-item") .realClick(); cy.get("#group1").should("have.prop", "expanded", true); + + cy.get("#group2") + .shadow() + .find(".ui5-sn-item") + .realClick(); + cy.get("#group2").should("have.prop", "expanded", false); + }); + + it("disabled", () => { + cy.mount( + + + + + + + ); + + cy.get("#group1").should("not.have.attr", "disabled"); + cy.get("#group1").invoke("prop", "disabled", true); + cy.get("#group1").should("have.attr", "disabled"); + + cy.get("#group1").then(($group) => { + const group = $group[0] as SideNavigationGroup; + cy.wrap(group.items).each((item: SideNavigationItem) => { + cy.wrap(item).should("have.prop", "disabled", true); + }); + }); }); + }); }); diff --git a/packages/fiori/src/SideNavigationGroup.ts b/packages/fiori/src/SideNavigationGroup.ts index 14331cde27de..45da0c71c325 100644 --- a/packages/fiori/src/SideNavigationGroup.ts +++ b/packages/fiori/src/SideNavigationGroup.ts @@ -69,6 +69,28 @@ class SideNavigationGroup extends SideNavigationItemBase { @i18n("@ui5/webcomponents-fiori") static i18nBundle: I18nBundle; + _initialChildDisabledStates: Map = new Map(); + + onBeforeRendering() { + this.allItems.forEach(item => { + if (!this._initialChildDisabledStates.has(item)) { + this._initialChildDisabledStates.set(item, item.disabled); + } + }); + + this._updateChildItemsDisabledState(); + } + + _updateChildItemsDisabledState() { + this.allItems.forEach(item => { + if (this.disabled) { + item.disabled = true; + } else { + item.disabled = this._initialChildDisabledStates.get(item)!; + } + }); + } + get overflowItems() : Array { const separator1 = this.shadowRoot!.querySelector(".ui5-sn-item-separator:first-child")!; const separator2 = this.shadowRoot!.querySelector(".ui5-sn-item-separator:last-child")!; @@ -161,7 +183,9 @@ class SideNavigationGroup extends SideNavigationItemBase { } _toggle() { - this.expanded = !this.expanded; + if (!this.disabled) { + this.expanded = !this.expanded; + } } get isSideNavigationGroup() { diff --git a/packages/fiori/test/pages/SideNavigationWithGroups.html b/packages/fiori/test/pages/SideNavigationWithGroups.html index 6dcf3c80f912..5606ff0708cd 100644 --- a/packages/fiori/test/pages/SideNavigationWithGroups.html +++ b/packages/fiori/test/pages/SideNavigationWithGroups.html @@ -104,6 +104,7 @@
+
Change width @@ -124,6 +125,10 @@ document.body.classList.toggle("ui5-content-density-compact", e.target.checked); }); + document.getElementById("disable").addEventListener("change", e => { + document.getElementById("group1").toggleAttribute("disabled", e.target.checked); + }); + slider.addEventListener("ui5-input", function (event) { sn1.style.width = event.target.value + 'px'; });