UNPKG

@mui/x-tree-view

Version:

The community edition of the MUI X Tree View components.

70 lines 2.02 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect'; import { useTreeViewLabelItemPlugin } from "./itemPlugin.js"; import { labelSelectors } from "./useTreeViewLabel.selectors.js"; export const useTreeViewLabel = ({ store, params }) => { const setEditedItem = editedItemId => { if (editedItemId !== null) { const isEditable = labelSelectors.isItemEditable(store.state, editedItemId); if (!isEditable) { return; } } store.set('label', _extends({}, store.state.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')); } const item = store.state.items.itemMetaLookup[itemId]; if (item.label === label) { return; } store.set('items', _extends({}, store.state.items, { itemMetaLookup: _extends({}, store.state.items.itemMetaLookup, { [itemId]: _extends({}, item, { label }) }) })); if (params.onItemLabelChange) { params.onItemLabelChange(itemId, label); } }; useIsoLayoutEffect(() => { store.set('label', _extends({}, store.state.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 };