diff --git a/packages/calcite-components/src/components/scrim/scrim.e2e.ts b/packages/calcite-components/src/components/scrim/scrim.e2e.ts index 7bf8dfcddc4..e3adacbc539 100644 --- a/packages/calcite-components/src/components/scrim/scrim.e2e.ts +++ b/packages/calcite-components/src/components/scrim/scrim.e2e.ts @@ -89,14 +89,21 @@ describe("calcite-scrim", () => { expect(clickSpy).toHaveReceivedEventTimes(1); }); - it("does not render content if the default slot if it is empty", async () => { + it("does not display content if the default slot if it is empty", async () => { const page = await newE2EPage(); await page.setContent(``); - const contentNode = await page.find(`calcite-scrim >>> .${CSS.content}`); + expect(contentNode).toHaveAttribute("hidden"); + + const scrim = await page.find("calcite-scrim"); + scrim.innerHTML = "

Content added after initialization

"; + await page.waitForChanges(); - expect(contentNode).toBeNull(); + const content = await page.find("p"); + expect(content).toBeTruthy(); + expect(await content.isVisible()).toBe(true); + expect(contentNode).not.toHaveAttribute("hidden"); }); it("renders content in the default slot has content", async () => { diff --git a/packages/calcite-components/src/components/scrim/scrim.tsx b/packages/calcite-components/src/components/scrim/scrim.tsx index 265de2465a5..a23ab421056 100644 --- a/packages/calcite-components/src/components/scrim/scrim.tsx +++ b/packages/calcite-components/src/components/scrim/scrim.tsx @@ -11,6 +11,7 @@ import { ScrimMessages } from "./assets/scrim/t9n"; import { CSS, BREAKPOINTS } from "./resources"; import { createObserver } from "../../utils/observers"; import { Scale } from "../interfaces"; +import { slotChangeHasAssignedElement } from "../../utils/dom"; /** * @slot - A slot for adding custom content, primarily loading information. @@ -75,6 +76,8 @@ export class Scrim implements LocalizedComponent, T9nComponent { updateMessages(this, this.effectiveLocale); } + @State() hasContent = false; + //-------------------------------------------------------------------------- // // Lifecycle @@ -104,21 +107,20 @@ export class Scrim implements LocalizedComponent, T9nComponent { // -------------------------------------------------------------------------- render(): VNode { - const { el, loading, messages } = this; - const hasContent = el.innerHTML.trim().length > 0; - const loaderNode = loading ? ( - - ) : null; - const contentNode = hasContent ? ( -
- -
- ) : null; + const { hasContent, loading, messages } = this; return (
- {loaderNode} - {contentNode} + {loading ? ( + + ) : null} +
); } @@ -129,6 +131,10 @@ export class Scrim implements LocalizedComponent, T9nComponent { // // -------------------------------------------------------------------------- + private handleDefaultSlotChange = (event: Event): void => { + this.hasContent = slotChangeHasAssignedElement(event); + }; + private storeLoaderEl = (el: HTMLCalciteLoaderElement): void => { this.loaderEl = el; this.handleResize();