UNPKG

@mui/x-tree-view

Version:

The community edition of the MUI X Tree View components.

157 lines (155 loc) 5.65 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.useTreeViewExpansion = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _useAssertModelConsistency = require("@mui/x-internals/useAssertModelConsistency"); var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback")); var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect")); var _useTreeViewExpansion = require("./useTreeViewExpansion.selectors"); var _useTreeViewExpansion2 = require("./useTreeViewExpansion.utils"); var _useTreeViewItems = require("../useTreeViewItems/useTreeViewItems.selectors"); var _publishTreeViewEvent = require("../../utils/publishTreeViewEvent"); const useTreeViewExpansion = ({ instance, store, params }) => { (0, _useAssertModelConsistency.useAssertModelConsistency)({ componentName: 'Tree View', propName: 'expandedItems', controlled: params.expandedItems, defaultValue: params.defaultExpandedItems }); (0, _useEnhancedEffect.default)(() => { store.update(prevState => { const newExpansionTrigger = (0, _useTreeViewExpansion2.getExpansionTrigger)({ isItemEditable: params.isItemEditable, expansionTrigger: params.expansionTrigger }); if (prevState.expansion.expansionTrigger === newExpansionTrigger) { return prevState; } return (0, _extends2.default)({}, prevState, { expansion: (0, _extends2.default)({}, prevState.expansion, { expansionTrigger: newExpansionTrigger }) }); }); }, [store, params.isItemEditable, params.expansionTrigger]); const setExpandedItems = (event, value) => { if (params.expandedItems === undefined) { store.update(prevState => (0, _extends2.default)({}, prevState, { expansion: (0, _extends2.default)({}, prevState.expansion, { expandedItems: value }) })); } params.onExpandedItemsChange?.(event, value); }; const applyItemExpansion = (0, _useEventCallback.default)(({ itemId, event, shouldBeExpanded }) => { const oldExpanded = (0, _useTreeViewExpansion.selectorExpandedItems)(store.value); let newExpanded; if (shouldBeExpanded) { newExpanded = [itemId].concat(oldExpanded); } else { newExpanded = oldExpanded.filter(id => id !== itemId); } if (params.onItemExpansionToggle) { params.onItemExpansionToggle(event, itemId, shouldBeExpanded); } setExpandedItems(event, newExpanded); }); const setItemExpansion = (0, _useEventCallback.default)(({ itemId, event = null, shouldBeExpanded }) => { const isExpandedBefore = (0, _useTreeViewExpansion.selectorIsItemExpanded)(store.value, itemId); const cleanShouldBeExpanded = shouldBeExpanded ?? !isExpandedBefore; if (isExpandedBefore === cleanShouldBeExpanded) { return; } const eventParameters = { isExpansionPrevented: false, shouldBeExpanded: cleanShouldBeExpanded, event, itemId }; (0, _publishTreeViewEvent.publishTreeViewEvent)(instance, 'beforeItemToggleExpansion', eventParameters); if (eventParameters.isExpansionPrevented) { return; } instance.applyItemExpansion({ itemId, event, shouldBeExpanded: cleanShouldBeExpanded }); }); const expandAllSiblings = (event, itemId) => { const itemMeta = (0, _useTreeViewItems.selectorItemMeta)(store.value, itemId); if (itemMeta == null) { return; } const siblings = (0, _useTreeViewItems.selectorItemOrderedChildrenIds)(store.value, itemMeta.parentId); const diff = siblings.filter(child => (0, _useTreeViewExpansion.selectorIsItemExpandable)(store.value, child) && !(0, _useTreeViewExpansion.selectorIsItemExpanded)(store.value, child)); const newExpanded = (0, _useTreeViewExpansion.selectorExpandedItems)(store.value).concat(diff); if (diff.length > 0) { if (params.onItemExpansionToggle) { diff.forEach(newlyExpandedItemId => { params.onItemExpansionToggle(event, newlyExpandedItemId, true); }); } setExpandedItems(event, newExpanded); } }; /** * Update the controlled model when the `expandedItems` prop changes. */ (0, _useEnhancedEffect.default)(() => { const expandedItems = params.expandedItems; if (expandedItems !== undefined) { store.update(prevState => (0, _extends2.default)({}, prevState, { expansion: (0, _extends2.default)({}, prevState.expansion, { expandedItems }) })); } }, [store, params.expandedItems]); return { publicAPI: { setItemExpansion }, instance: { setItemExpansion, applyItemExpansion, expandAllSiblings } }; }; exports.useTreeViewExpansion = useTreeViewExpansion; const DEFAULT_EXPANDED_ITEMS = []; useTreeViewExpansion.applyDefaultValuesToParams = ({ params }) => (0, _extends2.default)({}, params, { defaultExpandedItems: params.defaultExpandedItems ?? DEFAULT_EXPANDED_ITEMS }); useTreeViewExpansion.getInitialState = params => ({ expansion: { expandedItems: params.expandedItems === undefined ? params.defaultExpandedItems : params.expandedItems, expansionTrigger: (0, _useTreeViewExpansion2.getExpansionTrigger)(params) } }); useTreeViewExpansion.params = { expandedItems: true, defaultExpandedItems: true, onExpandedItemsChange: true, onItemExpansionToggle: true, expansionTrigger: true };