UNPKG

@mui/x-tree-view

Version:

The community edition of the MUI X Tree View components.

61 lines 2.6 kB
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) };