diff --git a/packages/calcite-components/src/components/block/block.e2e.ts b/packages/calcite-components/src/components/block/block.e2e.ts index bac00a7f613..7ad0053c892 100644 --- a/packages/calcite-components/src/components/block/block.e2e.ts +++ b/packages/calcite-components/src/components/block/block.e2e.ts @@ -16,7 +16,7 @@ import { html } from "../../../support/formatting"; import { openClose } from "../../tests/commonTests"; import { skipAnimations } from "../../tests/utils"; import { defaultEndMenuPlacement } from "../../utils/floating-ui"; -import { CSS, SLOTS } from "./resources"; +import { CSS, IDS, SLOTS } from "./resources"; describe("calcite-block", () => { describe("renders", () => { @@ -186,26 +186,23 @@ describe("calcite-block", () => { it("can display/hide content", async () => { const page = await newE2EPage(); - await page.setContent("
some content
"); - let element = await page.find("calcite-block"); - let content = await page.find(`calcite-block >>> .${CSS.content}`); + await page.setContent( + html`
Hello world!
`, + ); + await skipAnimations(page); + const element = await page.find("calcite-block"); + const content = await page.find(`calcite-block >>> #${IDS.content}`); + expect(await element.getProperty("open")).toBe(false); expect(await content.isVisible()).toBe(false); element.setProperty("open", true); await page.waitForChanges(); - element = await page.find("calcite-block[open]"); - content = await page.find(`calcite-block >>> .${CSS.content}`); - - expect(element).toBeTruthy(); expect(await content.isVisible()).toBe(true); element.setProperty("open", false); await page.waitForChanges(); - element = await page.find("calcite-block[open]"); - content = await page.find(`calcite-block >>> .${CSS.content}`); - expect(element).toBeNull(); expect(await content.isVisible()).toBe(false); }); diff --git a/packages/calcite-components/src/components/block/block.tsx b/packages/calcite-components/src/components/block/block.tsx index 8b986c0a7cd..07207f21c20 100644 --- a/packages/calcite-components/src/components/block/block.tsx +++ b/packages/calcite-components/src/components/block/block.tsx @@ -11,17 +11,7 @@ import { VNode, Watch, } from "@stencil/core"; -import { - ConditionalSlotComponent, - connectConditionalSlotComponent, - disconnectConditionalSlotComponent, -} from "../../utils/conditionalSlot"; -import { - focusFirstTabbable, - getSlotted, - toAriaBoolean, - slotChangeHasAssignedElement, -} from "../../utils/dom"; +import { focusFirstTabbable, toAriaBoolean, slotChangeHasAssignedElement } from "../../utils/dom"; import { InteractiveComponent, InteractiveContainer, @@ -71,7 +61,6 @@ import { BlockMessages } from "./assets/block/t9n"; }) export class Block implements - ConditionalSlotComponent, InteractiveComponent, LocalizedComponent, T9nComponent, @@ -233,6 +222,12 @@ export class Block updateMessages(this, this.effectiveLocale); } + @State() hasIcon = false; + + @State() hasControl = false; + + @State() hasMenuActions = false; + @State() hasContentStart = false; @State() hasEndActions = false; @@ -248,7 +243,6 @@ export class Block // -------------------------------------------------------------------------- connectedCallback(): void { - connectConditionalSlotComponent(this); connectLocalized(this); connectMessages(this); @@ -258,7 +252,6 @@ export class Block disconnectedCallback(): void { disconnectLocalized(this); disconnectMessages(this); - disconnectConditionalSlotComponent(this); } async componentWillLoad(): Promise { @@ -314,6 +307,18 @@ export class Block this.calciteBlockToggle.emit(); }; + private controlSlotChangeHandler = (event: Event): void => { + this.hasControl = slotChangeHasAssignedElement(event); + }; + + private menuActionsSlotChangeHandler = (event: Event): void => { + this.hasMenuActions = slotChangeHasAssignedElement(event); + }; + + private iconSlotChangeHandler = (event: Event): void => { + this.hasIcon = slotChangeHasAssignedElement(event); + }; + private actionsEndSlotChangeHandler = (event: Event): void => { this.hasEndActions = slotChangeHasAssignedElement(event); }; @@ -338,8 +343,6 @@ export class Block private renderLoaderStatusIcon(): VNode[] { const { loading, messages, status } = this; - const hasSlottedIcon = !!getSlotted(this.el, SLOTS.icon); - return loading ? (
@@ -356,25 +359,24 @@ export class Block scale="s" />
- ) : hasSlottedIcon ? ( -
- + ) : ( + - ) : null; + ); } private renderActionsEnd(): VNode { return ( -
+ ); } private renderContentStart(): VNode { - const { hasContentStart } = this; return ( - );