UNPKG

@mui/x-tree-view

Version:

The community edition of the MUI X Tree View components.

78 lines 2.26 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import useEnhancedEffect from '@mui/utils/useEnhancedEffect'; import { useTreeViewLabelItemPlugin } from "./useTreeViewLabel.itemPlugin.js"; import { selectorIsItemEditable } from "./useTreeViewLabel.selectors.js"; export const useTreeViewLabel = ({ store, params }) => { const setEditedItem = editedItemId => { if (editedItemId !== null) { const isEditable = selectorIsItemEditable(store.value, editedItemId); if (!isEditable) { return; } } store.update(prevState => _extends({}, prevState, { label: _extends({}, prevState.label, { editedItemId }) })); }; const updateItemLabel = (itemId, label) => { if (!label) { throw new Error(['MUI X: The Tree View component requires all items to have a `label` property.', 'The label of an item cannot be empty.', itemId].join('\n')); } store.update(prevState => { const item = prevState.items.itemMetaLookup[itemId]; if (item.label !== label) { return _extends({}, prevState, { items: _extends({}, prevState.items, { itemMetaLookup: _extends({}, prevState.items.itemMetaLookup, { [itemId]: _extends({}, item, { label }) }) }) }); } return prevState; }); if (params.onItemLabelChange) { params.onItemLabelChange(itemId, label); } }; useEnhancedEffect(() => { store.update(prevState => _extends({}, prevState, { label: _extends({}, prevState.label, { isItemEditable: params.isItemEditable }) })); }, [store, params.isItemEditable]); return { instance: { setEditedItem, updateItemLabel }, publicAPI: { setEditedItem, updateItemLabel } }; }; useTreeViewLabel.itemPlugin = useTreeViewLabelItemPlugin; useTreeViewLabel.applyDefaultValuesToParams = ({ params }) => _extends({}, params, { isItemEditable: params.isItemEditable ?? false }); useTreeViewLabel.getInitialState = params => ({ label: { isItemEditable: params.isItemEditable, editedItemId: null } }); useTreeViewLabel.params = { onItemLabelChange: true, isItemEditable: true };