@esri/calcite-components
Version:
Web Components for Esri's Calcite Design System.
33 lines (32 loc) • 1.48 kB
JavaScript
/*!
* All material copyright ESRI, All Rights Reserved, unless otherwise specified.
* See https://github.com/Esri/calcite-components/blob/master/LICENSE.md for details.
* v1.5.0-next.4
*/
import { Build } from "@stencil/core";
const listItemGroupSelector = "calcite-list-item-group";
const listItemSelector = "calcite-list-item";
export function getListItemChildren(event) {
const assignedElements = event.target.assignedElements({ flatten: true });
const listItemGroupChildren = assignedElements.filter((el) => el?.matches(listItemGroupSelector))
.map((group) => Array.from(group.querySelectorAll(listItemSelector)))
.reduce((previousValue, currentValue) => [...previousValue, ...currentValue], []);
const listItemChildren = assignedElements.filter((el) => el?.matches(listItemSelector));
return [...listItemGroupChildren, ...listItemChildren];
}
export function updateListItemChildren(listItemChildren) {
listItemChildren.forEach((listItem) => {
listItem.setPosition = listItemChildren.indexOf(listItem) + 1;
listItem.setSize = listItemChildren.length;
});
}
export function getDepth(element, includeGroup = false) {
if (!Build.isBrowser) {
return 0;
}
const expression = includeGroup
? "ancestor::calcite-list-item | ancestor::calcite-list-item-group"
: "ancestor::calcite-list-item";
const result = document.evaluate(expression, element, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
return result.snapshotLength;
}