From 6378e351bad4aff1aefe62b7c52262ae57c48907 Mon Sep 17 00:00:00 2001 From: Matt Driscoll Date: Tue, 30 May 2023 17:27:21 -0700 Subject: [PATCH] fix(accordion-item): support items working across shadowDOM (#7035) **Related Issue:** #6167 ## Summary - Uses `closestElementCrossShadowBoundary` to find the parent `calcite-accordion` across shadow DOM. --- .../accordion-item/accordion-item.tsx | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/components/accordion-item/accordion-item.tsx b/src/components/accordion-item/accordion-item.tsx index f89e5268073..0cc20cc8516 100644 --- a/src/components/accordion-item/accordion-item.tsx +++ b/src/components/accordion-item/accordion-item.tsx @@ -14,7 +14,13 @@ import { connectConditionalSlotComponent, disconnectConditionalSlotComponent } from "../../utils/conditionalSlot"; -import { getElementDir, getElementProp, getSlotted, toAriaBoolean } from "../../utils/dom"; +import { + closestElementCrossShadowBoundary, + getElementDir, + getElementProp, + getSlotted, + toAriaBoolean +} from "../../utils/dom"; import { CSS_UTILITY } from "../../utils/resources"; import { SLOTS, CSS } from "./resources"; import { FlipContext, Position, Scale } from "../interfaces"; @@ -298,9 +304,12 @@ export class AccordionItem implements ConditionalSlotComponent { } private getItemPosition(): number { - return Array.prototype.indexOf.call( - this.parent.querySelectorAll("calcite-accordion-item"), - this.el + const { el } = this; + + const items = closestElementCrossShadowBoundary(el, "calcite-accordion")?.querySelectorAll( + "calcite-accordion-item" ); + + return items ? Array.from(items).indexOf(el) : -1; } }