@gravity-ui/uikit
Version:
Gravity UI base styling and components
42 lines (41 loc) • 1.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.flattenItems = flattenItems;
const getListItemId_1 = require("./getListItemId.js");
const groupItemId_1 = require("./groupItemId.js");
const isTreeItemGuard_1 = require("./isTreeItemGuard.js");
function flattenItems({ items, getItemId, expandedById = {}, }) {
const rootIds = [];
const visibleFlattenIds = [];
const visit = (item, index, parentId) => {
const groupedId = (0, groupItemId_1.getGroupItemId)(index, parentId);
const id = (0, getListItemId_1.getListItemId)({ groupedId, item, getItemId });
// only top level array
if (!parentId) {
rootIds.push(id);
}
visibleFlattenIds.push(id);
if ((0, isTreeItemGuard_1.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