UNPKG

@hitachivantara/uikit-react-core

Version:
37 lines (36 loc) 1.27 kB
import * as React from "react"; //#region src/TreeView/internals/hooks/useTreeViewModels.ts /** * Implements the same behavior as `useControlled` but for several models. * The controlled models are never stored in the state and the state is only updated if the model is not controlled. */ var useTreeViewModels = (plugins, props) => { const modelsRef = React.useRef({}); const [modelsState, setModelsState] = React.useState(() => { const initialState = {}; plugins.forEach((plugin) => { if (plugin.models) Object.entries(plugin.models).forEach(([modelName, model]) => { modelsRef.current[modelName] = { controlledProp: model.controlledProp, defaultProp: model.defaultProp, isControlled: props[model.controlledProp] !== void 0 }; initialState[modelName] = props[model.defaultProp]; }); }); return initialState; }); return Object.fromEntries(Object.entries(modelsRef.current).map(([modelName, model]) => { return [modelName, { value: model.isControlled ? props[model.controlledProp] : modelsState[modelName], setValue: (newValue) => { if (!model.isControlled) setModelsState((prevState) => ({ ...prevState, [modelName]: newValue })); } }]; })); }; //#endregion export { useTreeViewModels };