@mui/x-tree-view
Version:
The community edition of the MUI X Tree View components.
61 lines • 2.6 kB
JavaScript
import { createSelector, createSelectorMemoized } from '@mui/x-internals/store';
import { itemsSelectors } from "../useTreeViewItems/useTreeViewItems.selectors.js";
const selectedItemsSelector = createSelectorMemoized(state => state.selection.selectedItems, selectedItemsRaw => {
if (Array.isArray(selectedItemsRaw)) {
return selectedItemsRaw;
}
if (selectedItemsRaw != null) {
return [selectedItemsRaw];
}
return [];
});
const selectedItemsMapSelector = createSelectorMemoized(selectedItemsSelector, selectedItems => {
const selectedItemsMap = new Map();
selectedItems.forEach(id => {
selectedItemsMap.set(id, true);
});
return selectedItemsMap;
});
export const selectionSelectors = {
/**
* Gets the selected items as provided to the component.
*/
selectedItemsRaw: createSelector(state => state.selection.selectedItems),
/**
* Gets the selected items as an array.
*/
selectedItems: selectedItemsSelector,
/**
* Gets the selected items as a Map.
*/
selectedItemsMap: selectedItemsMapSelector,
/**
* Checks whether selection is enabled.
*/
enabled: createSelector(state => state.selection.isEnabled),
/**
* Checks whether multi selection is enabled.
*/
isMultiSelectEnabled: createSelector(state => state.selection.isMultiSelectEnabled),
/**
* Checks whether checkbox selection is enabled.
*/
isCheckboxSelectionEnabled: createSelector(state => state.selection.isCheckboxSelectionEnabled),
/**
* Gets the selection propagation rules.
*/
propagationRules: createSelector(state => state.selection.selectionPropagation),
/**
* Checks whether an item is selected.
*/
isItemSelected: createSelector(selectedItemsMapSelector, (selectedItemsMap, itemId) => selectedItemsMap.has(itemId)),
/**
* Checks whether the selection feature is enabled for an item.
* Returns `true` when selection is enabled on the Tree View and the item is selectable (even if the item is disabled).
*/
isFeatureEnabledForItem: createSelector(itemsSelectors.isItemSelectable, state => state.selection.isEnabled, (isItemSelectable, isSelectionEnabled, _itemId) => isSelectionEnabled && isItemSelectable),
/**
* Checks whether an item can be selected (if selection is enabled, if the item is not disabled, and if the item is selectable).
*/
canItemBeSelected: createSelector(itemsSelectors.isItemDisabled, itemsSelectors.isItemSelectable, state => state.selection.isEnabled, (isItemDisabled, isItemSelectable, isSelectionEnabled, _itemId) => isSelectionEnabled && !isItemDisabled && isItemSelectable)
};