UNPKG

@mui/x-tree-view

Version:

The community edition of the MUI X Tree View components.

160 lines (157 loc) • 6.72 kB
"use strict"; 'use client'; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.RichTreeViewItem = void 0; exports.RichTreeViewItems = RichTreeViewItems; var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var React = _interopRequireWildcard(require("react")); var _empty = require("@base-ui/utils/empty"); var _store = require("@mui/x-internals/store"); var _useSlotProps2 = _interopRequireDefault(require("@mui/utils/useSlotProps")); var _fastObjectShallowCompare = require("@mui/x-internals/fastObjectShallowCompare"); var _TreeItem = require("../../TreeItem"); var _items = require("../plugins/items"); var _TreeViewProvider = require("../TreeViewProvider"); var _expansion = require("../plugins/expansion"); var _lazyLoading = require("../plugins/lazyLoading"); var _RichTreeViewLoading = require("./RichTreeViewLoading"); var _useTreeViewRootProps = require("../hooks/useTreeViewRootProps"); var _jsxRuntime = require("react/jsx-runtime"); const _excluded = ["ownerState"]; const RichTreeViewItemsContext = /*#__PURE__*/React.createContext(null); if (process.env.NODE_ENV !== "production") RichTreeViewItemsContext.displayName = "RichTreeViewItemsContext"; const selectorNoChildren = () => _empty.EMPTY_ARRAY; const selectorChildrenIdsNull = state => _items.itemsSelectors.itemOrderedChildrenIds(state, null); /** * Renders the loading rows for the children of an item that lazily loads them. * It only mounts while the item is loading, so the `loading` slot props are not * resolved for the other items. */ function RichTreeViewItemLoadingChildren({ itemId }) { const { store } = (0, _TreeViewProvider.useTreeViewContext)(); const { classes, slots: styleSlots, slotProps: styleSlotProps } = (0, _TreeViewProvider.useTreeViewStyleContext)(); const itemDepth = (0, _store.useStore)(store, _items.itemsSelectors.itemDepth, itemId); const loadingChildrenCount = (0, _store.useStore)(store, _lazyLoading.lazyLoadingSelectors.itemLoadingChildrenCount, itemId); const Loading = styleSlots.loading; const loadingProps = (0, _useSlotProps2.default)({ elementType: Loading ?? 'div', externalSlotProps: styleSlotProps.loading, ownerState: { itemId } }); // The count reported by `getChildrenCount()` wins over `slotProps.loading.itemsCount`, // which only acts as a fallback when the count is unknown. const itemsCount = loadingChildrenCount > 0 ? Math.min(loadingChildrenCount, _RichTreeViewLoading.MAX_LOADING_ITEMS_COUNT) : (0, _RichTreeViewLoading.getLoadingItemsCount)(loadingProps.itemsCount); return /*#__PURE__*/(0, _jsxRuntime.jsx)(_RichTreeViewLoading.RichTreeViewLoadingContext, { store: store, itemDepth: itemDepth + 1, children: Loading ? /*#__PURE__*/(0, _jsxRuntime.jsx)(Loading, (0, _extends2.default)({}, loadingProps, { itemsCount: itemsCount })) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_RichTreeViewLoading.RichTreeViewItemLoaders, { classes: classes, slots: { itemLoader: styleSlots.itemLoader }, slotProps: { itemLoader: styleSlotProps.itemLoader }, itemsCount: itemsCount }) }); } const RichTreeViewItem = exports.RichTreeViewItem = /*#__PURE__*/React.memo(function RichTreeViewItem({ itemSlot, itemSlotProps, itemId, skipChildren }) { const renderItemForRichTreeView = React.useContext(RichTreeViewItemsContext); const { store } = (0, _TreeViewProvider.useTreeViewContext)(); const itemMeta = (0, _store.useStore)(store, _items.itemsSelectors.itemMeta, itemId); const children = (0, _store.useStore)(store, skipChildren ? selectorNoChildren : _items.itemsSelectors.itemOrderedChildrenIds, itemId); const isLoadingChildren = (0, _store.useStore)(store, _lazyLoading.lazyLoadingSelectors.isItemLoading, itemId); const Item = itemSlot ?? _TreeItem.TreeItem; const _useSlotProps = (0, _useSlotProps2.default)({ elementType: Item, externalSlotProps: itemSlotProps, additionalProps: { label: itemMeta?.label, id: itemMeta?.idAttribute, itemId }, ownerState: { itemId, label: itemMeta?.label } }), itemProps = (0, _objectWithoutPropertiesLoose2.default)(_useSlotProps, _excluded); let renderedChildren = renderItemForRichTreeView ? children?.map(renderItemForRichTreeView) : null; if (isLoadingChildren && !skipChildren && (children == null || children.length === 0)) { renderedChildren = /*#__PURE__*/(0, _jsxRuntime.jsx)(RichTreeViewItemLoadingChildren, { itemId: itemId }); } return /*#__PURE__*/(0, _jsxRuntime.jsx)(Item, (0, _extends2.default)({}, itemProps, { children: renderedChildren })); }, _fastObjectShallowCompare.fastObjectShallowCompare); if (process.env.NODE_ENV !== "production") RichTreeViewItem.displayName = "RichTreeViewItem"; function RichTreeViewItems(props) { const { slots, slotProps, ownerState, forwardedProps, rootRef } = props; const { store } = (0, _TreeViewProvider.useTreeViewContext)(); const { classes } = (0, _TreeViewProvider.useTreeViewStyleContext)(); const itemSlot = slots?.item; const itemSlotProps = slotProps?.item; const domStructure = (0, _store.useStore)(store, _items.itemsSelectors.domStructure); const items = (0, _store.useStore)(store, domStructure === 'flat' ? _expansion.expansionSelectors.flatList : selectorChildrenIdsNull); const getRootProps = (0, _useTreeViewRootProps.useTreeViewRootProps)(store, forwardedProps, rootRef); const Root = slots.root; const rootProps = (0, _useSlotProps2.default)({ elementType: Root, externalSlotProps: slotProps?.root, className: classes.root, getSlotProps: getRootProps, ownerState }); const skipChildren = domStructure === 'flat'; const renderItem = React.useCallback(itemId => { return /*#__PURE__*/(0, _jsxRuntime.jsx)(RichTreeViewItem, { itemSlot: itemSlot, itemSlotProps: itemSlotProps, itemId: itemId, skipChildren: skipChildren }, itemId); }, [itemSlot, itemSlotProps, skipChildren]); return /*#__PURE__*/(0, _jsxRuntime.jsx)(RichTreeViewItemsContext.Provider, { value: renderItem, children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Root, (0, _extends2.default)({}, rootProps, { children: items.map(renderItem) })) }); }