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