UNPKG

@mui/x-tree-view

Version:

The community edition of the MUI X Tree View components.

88 lines (87 loc) 3.29 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.useTreeViewSelectionItemPlugin = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _fastObjectShallowCompare = require("@mui/x-internals/fastObjectShallowCompare"); var _TreeViewProvider = require("../../TreeViewProvider"); var _useTreeViewItems = require("../useTreeViewItems/useTreeViewItems.selectors"); var _useTreeViewSelection = require("./useTreeViewSelection.selectors"); var _useSelector = require("../../hooks/useSelector"); function selectorItemCheckboxStatus(state, itemId) { const isCheckboxSelectionEnabled = (0, _useTreeViewSelection.selectorIsCheckboxSelectionEnabled)(state); const isSelectionEnabledForItem = (0, _useTreeViewSelection.selectorIsItemSelectionEnabled)(state, itemId); if ((0, _useTreeViewSelection.selectorIsItemSelected)(state, itemId)) { return { disabled: !isSelectionEnabledForItem, visible: isCheckboxSelectionEnabled, indeterminate: false, checked: true }; } const children = (0, _useTreeViewItems.selectorItemOrderedChildrenIds)(state, itemId); if (children.length === 0) { return { disabled: !isSelectionEnabledForItem, visible: isCheckboxSelectionEnabled, indeterminate: false, checked: false }; } let hasSelectedDescendant = false; let hasUnSelectedDescendant = false; const traverseDescendants = itemToTraverseId => { if (itemToTraverseId !== itemId) { if ((0, _useTreeViewSelection.selectorIsItemSelected)(state, itemToTraverseId)) { hasSelectedDescendant = true; } else { hasUnSelectedDescendant = true; } } (0, _useTreeViewItems.selectorItemOrderedChildrenIds)(state, itemToTraverseId).forEach(traverseDescendants); }; traverseDescendants(itemId); return { disabled: !isSelectionEnabledForItem, visible: isCheckboxSelectionEnabled, indeterminate: hasSelectedDescendant && hasUnSelectedDescendant, checked: (0, _useTreeViewSelection.selectorSelectionPropagationRules)(state).parents ? hasSelectedDescendant && !hasUnSelectedDescendant : false }; } const useTreeViewSelectionItemPlugin = ({ props }) => { const { itemId } = props; const { store } = (0, _TreeViewProvider.useTreeViewContext)(); const checkboxStatus = (0, _useSelector.useSelector)(store, selectorItemCheckboxStatus, itemId, _fastObjectShallowCompare.fastObjectShallowCompare); return { propsEnhancers: { checkbox: ({ externalEventHandlers, interactions }) => { const handleChange = event => { externalEventHandlers.onChange?.(event); if (event.defaultMuiPrevented) { return; } if (!(0, _useTreeViewSelection.selectorIsItemSelectionEnabled)(store.value, itemId)) { return; } interactions.handleCheckboxSelection(event); }; return (0, _extends2.default)({ tabIndex: -1, onChange: handleChange }, checkboxStatus); } } }; }; exports.useTreeViewSelectionItemPlugin = useTreeViewSelectionItemPlugin;