UNPKG

@mui/x-tree-view

Version:

The community edition of the MUI X Tree View components.

112 lines (110 loc) 3.64 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.useTreeView = void 0; exports.useTreeViewApiInitialization = useTreeViewApiInitialization; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var React = _interopRequireWildcard(require("react")); var _useRefWithInit = require("@base-ui/utils/useRefWithInit"); var _store = require("@mui/x-internals/store"); var _useMergedRefs = require("@base-ui/utils/useMergedRefs"); var _corePlugins = require("../corePlugins"); var _useExtractPluginParamsFromProps = require("./useExtractPluginParamsFromProps"); var _useTreeViewBuildContext = require("./useTreeViewBuildContext"); function initializeInputApiRef(inputApiRef) { if (inputApiRef.current == null) { inputApiRef.current = {}; } return inputApiRef; } function useTreeViewApiInitialization(inputApiRef) { const fallbackPublicApiRef = React.useRef({}); if (inputApiRef) { return initializeInputApiRef(inputApiRef); } return fallbackPublicApiRef; } /** * This is the main hook that sets the plugin system up for the tree-view. * * It manages the data used to create the tree-view. * * @param plugins All the plugins that will be used in the tree-view. * @param props The props passed to the tree-view. * @param rootRef The ref of the root element. */ const useTreeView = ({ plugins: inPlugins, rootRef, props }) => { const plugins = React.useMemo(() => [..._corePlugins.TREE_VIEW_CORE_PLUGINS, ...inPlugins], [inPlugins]); const { pluginParams, forwardedProps, apiRef } = (0, _useExtractPluginParamsFromProps.useExtractPluginParamsFromProps)({ plugins, props }); const instance = (0, _useRefWithInit.useRefWithInit)(() => ({})).current; const publicAPI = useTreeViewApiInitialization(apiRef); const innerRootRef = React.useRef(null); const handleRootRef = (0, _useMergedRefs.useMergedRefs)(innerRootRef, rootRef); const store = (0, _useRefWithInit.useRefWithInit)(() => { const initialState = {}; for (const plugin of plugins) { if (plugin.getInitialState) { Object.assign(initialState, plugin.getInitialState(pluginParams)); } } return new _store.Store(initialState); }).current; const contextValue = (0, _useTreeViewBuildContext.useTreeViewBuildContext)({ plugins, instance, publicAPI: publicAPI.current, store, rootRef: innerRootRef }); const rootPropsGetters = []; const runPlugin = plugin => { const pluginResponse = plugin({ instance, params: pluginParams, rootRef: innerRootRef, plugins, store }); if (pluginResponse.getRootProps) { rootPropsGetters.push(pluginResponse.getRootProps); } if (pluginResponse.publicAPI) { Object.assign(publicAPI.current, pluginResponse.publicAPI); } if (pluginResponse.instance) { Object.assign(instance, pluginResponse.instance); } }; plugins.forEach(runPlugin); const getRootProps = (otherHandlers = {}) => { const rootProps = (0, _extends2.default)({ role: 'tree' }, forwardedProps, otherHandlers, { ref: handleRootRef }); rootPropsGetters.forEach(rootPropsGetter => { Object.assign(rootProps, rootPropsGetter(otherHandlers)); }); return rootProps; }; return { getRootProps, rootRef: handleRootRef, contextValue }; }; exports.useTreeView = useTreeView;