UNPKG

@hitachivantara/uikit-react-core

Version:
59 lines (58 loc) 1.85 kB
import { TREE_VIEW_CORE_PLUGINS } from "../corePlugins.js"; import { DEFAULT_TREE_VIEW_CONTEXT_VALUE } from "../TreeViewProvider.js"; import { useTreeViewModels } from "./useTreeViewModels.js"; import * as React from "react"; import useForkRef from "@mui/utils/useForkRef"; //#region src/TreeView/internals/hooks/useTreeView.ts var useTreeView = (inParams) => { const plugins = [...TREE_VIEW_CORE_PLUGINS, ...inParams.plugins]; const params = plugins.reduce((acc, plugin) => { if (plugin.getDefaultizedParams) return plugin.getDefaultizedParams(acc); return acc; }, inParams); const models = useTreeViewModels(plugins, params); const instance = React.useRef({}).current; const innerRootRef = React.useRef(null); const handleRootRef = useForkRef(innerRootRef, inParams.rootRef); const [state, setState] = React.useState(() => { const temp = {}; plugins.forEach((plugin) => { if (plugin.getInitialState) Object.assign(temp, plugin.getInitialState(params)); }); return temp; }); const rootPropsGetters = []; let contextValue = DEFAULT_TREE_VIEW_CONTEXT_VALUE; const runPlugin = (plugin) => { const pluginResponse = plugin({ instance, params, state, setState, rootRef: innerRootRef, models }) || {}; if (pluginResponse.getRootProps) rootPropsGetters.push(pluginResponse.getRootProps); if (pluginResponse.contextValue) contextValue = pluginResponse.contextValue; }; plugins.forEach(runPlugin); const getRootProps = (otherHandlers = {}) => { const rootProps = { role: "tree", tabIndex: 0, ...otherHandlers, ref: handleRootRef }; rootPropsGetters.forEach((rootPropsGetter) => { Object.assign(rootProps, rootPropsGetter(otherHandlers)); }); return rootProps; }; return { getRootProps, rootRef: handleRootRef, contextValue }; }; //#endregion export { useTreeView };