UNPKG

@mui/x-tree-view

Version:

The community edition of the MUI X Tree View components.

112 lines (111 loc) 4.81 kB
"use strict"; 'use client'; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.useTreeViewJSXItems = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var React = _interopRequireWildcard(require("react")); var _useStableCallback = require("@base-ui/utils/useStableCallback"); var _TreeViewChildrenItemProvider = require("../../TreeViewProvider/TreeViewChildrenItemProvider"); var _useTreeViewItems = require("../useTreeViewItems/useTreeViewItems.utils"); var _TreeViewItemDepthContext = require("../../TreeViewItemDepthContext"); var _itemPlugin = require("./itemPlugin"); var _jsxRuntime = require("react/jsx-runtime"); const useTreeViewJSXItems = ({ instance, store }) => { instance.preventItemUpdates(); const insertJSXItem = (0, _useStableCallback.useStableCallback)(item => { if (store.state.items.itemMetaLookup[item.id] != null) { throw new Error(['MUI X: The Tree View component requires all items to have a unique `id` property.', 'Alternatively, you can use the `getItemId` prop to specify a custom id for each item.', `Two items were provided with the same id in the \`items\` prop: "${item.id}"`].join('\n')); } store.set('items', (0, _extends2.default)({}, store.state.items, { itemMetaLookup: (0, _extends2.default)({}, store.state.items.itemMetaLookup, { [item.id]: item }), // For Simple Tree View, we don't have a proper `item` object, so we create a very basic one. itemModelLookup: (0, _extends2.default)({}, store.state.items.itemModelLookup, { [item.id]: { id: item.id, label: item.label ?? '' } }) })); return () => { const newItemMetaLookup = (0, _extends2.default)({}, store.state.items.itemMetaLookup); const newItemModelLookup = (0, _extends2.default)({}, store.state.items.itemModelLookup); delete newItemMetaLookup[item.id]; delete newItemModelLookup[item.id]; store.set('items', (0, _extends2.default)({}, store.state.items, { itemMetaLookup: newItemMetaLookup, itemModelLookup: newItemModelLookup })); }; }); const setJSXItemsOrderedChildrenIds = (parentId, orderedChildrenIds) => { const parentIdWithDefault = parentId ?? _useTreeViewItems.TREE_VIEW_ROOT_PARENT_ID; store.set('items', (0, _extends2.default)({}, store.state.items, { itemOrderedChildrenIdsLookup: (0, _extends2.default)({}, store.state.items.itemOrderedChildrenIdsLookup, { [parentIdWithDefault]: orderedChildrenIds }), itemChildrenIndexesLookup: (0, _extends2.default)({}, store.state.items.itemChildrenIndexesLookup, { [parentIdWithDefault]: (0, _useTreeViewItems.buildSiblingIndexes)(orderedChildrenIds) }) })); }; const mapLabelFromJSX = (0, _useStableCallback.useStableCallback)((itemId, label) => { instance.updateLabelMap(labelMap => { labelMap[itemId] = label; return labelMap; }); return () => { instance.updateLabelMap(labelMap => { const newMap = (0, _extends2.default)({}, labelMap); delete newMap[itemId]; return newMap; }); }; }); return { instance: { insertJSXItem, setJSXItemsOrderedChildrenIds, mapLabelFromJSX } }; }; exports.useTreeViewJSXItems = useTreeViewJSXItems; useTreeViewJSXItems.itemPlugin = _itemPlugin.useTreeViewJSXItemsItemPlugin; useTreeViewJSXItems.wrapItem = ({ children, itemId, idAttribute }) => { // eslint-disable-next-line react-hooks/rules-of-hooks const depthContext = React.useContext(_TreeViewItemDepthContext.TreeViewItemDepthContext); return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeViewChildrenItemProvider.TreeViewChildrenItemProvider, { itemId: itemId, idAttribute: idAttribute, children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeViewItemDepthContext.TreeViewItemDepthContext.Provider, { value: depthContext + 1, children: children }) }); }; if (process.env.NODE_ENV !== "production") useTreeViewJSXItems.wrapItem.displayName = "useTreeViewJSXItems.wrapItem"; useTreeViewJSXItems.wrapRoot = ({ children }) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeViewChildrenItemProvider.TreeViewChildrenItemProvider, { itemId: null, idAttribute: null, children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_TreeViewItemDepthContext.TreeViewItemDepthContext.Provider, { value: 0, children: children }) }); if (process.env.NODE_ENV !== "production") useTreeViewJSXItems.wrapRoot.displayName = "useTreeViewJSXItems.wrapRoot"; useTreeViewJSXItems.params = {};