@mui/x-tree-view
Version:
The community edition of the MUI X Tree View components.
70 lines • 2.02 kB
JavaScript
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
};