UNPKG

@mui/x-tree-view

Version:

The community edition of the MUI X Tree View components.

77 lines (76 loc) 3.05 kB
'use client'; import _extends from "@babel/runtime/helpers/esm/extends"; import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; const _excluded = ["ownerState"]; import * as React from 'react'; import { useStore } from '@mui/x-internals/store'; import useSlotProps from '@mui/utils/useSlotProps'; import { fastObjectShallowCompare } from '@mui/x-internals/fastObjectShallowCompare'; import { TreeItem } from "../../TreeItem/index.js"; import { itemsSelectors } from "../plugins/useTreeViewItems/index.js"; import { useTreeViewContext } from "../TreeViewProvider/index.js"; import { expansionSelectors } from "../plugins/useTreeViewExpansion/index.js"; import { jsx as _jsx } from "react/jsx-runtime"; const RichTreeViewItemsContext = /*#__PURE__*/React.createContext(null); if (process.env.NODE_ENV !== "production") RichTreeViewItemsContext.displayName = "RichTreeViewItemsContext"; const EMPTY_ARRAY = []; const selectorNoChildren = () => EMPTY_ARRAY; const selectorChildrenIdsNull = state => itemsSelectors.itemOrderedChildrenIds(state, null); const WrappedTreeItem = /*#__PURE__*/React.memo(function WrappedTreeItem({ itemSlot, itemSlotProps, itemId, skipChildren }) { const renderItemForRichTreeView = React.useContext(RichTreeViewItemsContext); const { store } = useTreeViewContext(); const itemMeta = useStore(store, itemsSelectors.itemMeta, itemId); const children = useStore(store, skipChildren ? selectorNoChildren : itemsSelectors.itemOrderedChildrenIds, itemId); const Item = itemSlot ?? TreeItem; const _useSlotProps = useSlotProps({ elementType: Item, externalSlotProps: itemSlotProps, additionalProps: { label: itemMeta?.label, id: itemMeta?.idAttribute, itemId }, ownerState: { itemId, label: itemMeta?.label } }), itemProps = _objectWithoutPropertiesLoose(_useSlotProps, _excluded); return /*#__PURE__*/_jsx(Item, _extends({}, itemProps, { children: children?.map(renderItemForRichTreeView) })); }, fastObjectShallowCompare); if (process.env.NODE_ENV !== "production") WrappedTreeItem.displayName = "WrappedTreeItem"; export function RichTreeViewItems(props) { const { slots, slotProps } = props; const { store } = useTreeViewContext(); const itemSlot = slots?.item; const itemSlotProps = slotProps?.item; const domStructure = useStore(store, itemsSelectors.domStructure); const items = useStore(store, domStructure === 'flat' ? expansionSelectors.flatList : selectorChildrenIdsNull); const skipChildren = domStructure === 'flat'; const renderItem = React.useCallback(itemId => { return /*#__PURE__*/_jsx(WrappedTreeItem, { itemSlot: itemSlot, itemSlotProps: itemSlotProps, itemId: itemId, skipChildren: skipChildren }, itemId); }, [itemSlot, itemSlotProps, skipChildren]); return /*#__PURE__*/_jsx(RichTreeViewItemsContext.Provider, { value: renderItem, children: items.map(renderItem) }); }