@mui/x-tree-view
Version:
The community edition of the MUI X Tree View components.
55 lines (54 loc) • 2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.expansionSelectors = void 0;
var _store = require("@mui/x-internals/store");
var _selectors = require("../items/selectors");
var _items = require("../items");
const expandedItemMapSelector = (0, _store.createSelectorMemoized)(state => state.expandedItems, expandedItems => {
const expandedItemsMap = new Map();
expandedItems.forEach(id => {
expandedItemsMap.set(id, true);
});
return expandedItemsMap;
});
const expansionSelectors = exports.expansionSelectors = {
/**
* Gets the expanded items as provided to the component.
*/
expandedItemsRaw: state => state.expandedItems,
/**
* Gets the expanded items as a Map.
*/
expandedItemsMap: expandedItemMapSelector,
/**
* Gets the items to render as a flat list (the descendants of an expanded item are listed as siblings of the item).
*/
flatList: (0, _store.createSelectorMemoized)(_selectors.itemsSelectors.itemOrderedChildrenIdsLookup, expandedItemMapSelector, (itemOrderedChildrenIds, expandedItemsMap) => {
function appendChildren(itemId) {
if (!expandedItemsMap.has(itemId)) {
return [itemId];
}
const itemsWithDescendants = [itemId];
const children = itemOrderedChildrenIds[itemId] || [];
for (const childId of children) {
itemsWithDescendants.push(...appendChildren(childId));
}
return itemsWithDescendants;
}
return (itemOrderedChildrenIds[_items.TREE_VIEW_ROOT_PARENT_ID] ?? []).flatMap(appendChildren);
}),
/**
* Gets the slot that triggers the item's expansion when clicked.
*/
triggerSlot: state => state.expansionTrigger,
/**
* Checks whether an item is expanded.
*/
isItemExpanded: (state, itemId) => expandedItemMapSelector(state).has(itemId),
/**
* Checks whether an item is expandable.
*/
isItemExpandable: (state, itemId) => _selectors.itemsSelectors.itemMeta(state, itemId)?.expandable ?? false
};