UNPKG

@gravity-ui/uikit

Version:

Gravity UI base styling and components

39 lines (38 loc) 1.33 kB
import { getListItemId } from "./getListItemId.js"; import { getGroupItemId } from "./groupItemId.js"; import { isTreeItemGuard } from "./isTreeItemGuard.js"; export function flattenItems({ items, getItemId, expandedById = {}, }) { const rootIds = []; const visibleFlattenIds = []; const visit = (item, index, parentId) => { const groupedId = getGroupItemId(index, parentId); const id = getListItemId({ groupedId, item, getItemId }); // only top level array if (!parentId) { rootIds.push(id); } visibleFlattenIds.push(id); if (isTreeItemGuard(item) && item.children) { // don't include collapsed groups const isCollapsed = id in expandedById && !expandedById[id]; if (!isCollapsed) { for (let i = 0; i < item.children.length; i++) { visit(item.children[i], i, id); } } } }; for (let i = 0; i < items.length; i++) { visit(items[i], i); } const idToFlattenIndex = {}; for (let i = 0; i < visibleFlattenIds.length; i++) { idToFlattenIndex[visibleFlattenIds[i]] = i; } return { rootIds, visibleFlattenIds, idToFlattenIndex, }; } //# sourceMappingURL=flattenItems.js.map