@gravity-ui/uikit
Version:
Gravity UI base styling and components
39 lines (38 loc) • 1.33 kB
JavaScript
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