@mui/x-tree-view
Version:
The community edition of the MUI X Tree View components.
78 lines (77 loc) • 2.41 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useTreeViewLabel = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _useIsoLayoutEffect = require("@base-ui/utils/useIsoLayoutEffect");
var _itemPlugin = require("./itemPlugin");
var _useTreeViewLabel = require("./useTreeViewLabel.selectors");
const useTreeViewLabel = ({
store,
params
}) => {
const setEditedItem = editedItemId => {
if (editedItemId !== null) {
const isEditable = _useTreeViewLabel.labelSelectors.isItemEditable(store.state, editedItemId);
if (!isEditable) {
return;
}
}
store.set('label', (0, _extends2.default)({}, 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', (0, _extends2.default)({}, store.state.items, {
itemMetaLookup: (0, _extends2.default)({}, store.state.items.itemMetaLookup, {
[itemId]: (0, _extends2.default)({}, item, {
label
})
})
}));
if (params.onItemLabelChange) {
params.onItemLabelChange(itemId, label);
}
};
(0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => {
store.set('label', (0, _extends2.default)({}, store.state.label, {
isItemEditable: params.isItemEditable
}));
}, [store, params.isItemEditable]);
return {
instance: {
setEditedItem,
updateItemLabel
},
publicAPI: {
setEditedItem,
updateItemLabel
}
};
};
exports.useTreeViewLabel = useTreeViewLabel;
useTreeViewLabel.itemPlugin = _itemPlugin.useTreeViewLabelItemPlugin;
useTreeViewLabel.applyDefaultValuesToParams = ({
params
}) => (0, _extends2.default)({}, params, {
isItemEditable: params.isItemEditable ?? false
});
useTreeViewLabel.getInitialState = params => ({
label: {
isItemEditable: params.isItemEditable,
editedItemId: null
}
});
useTreeViewLabel.params = {
onItemLabelChange: true,
isItemEditable: true
};