UNPKG

@hitachivantara/uikit-react-core

Version:

Core React components for the NEXT Design System.

44 lines (43 loc) 1.26 kB
import * as React from "react"; const 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; }); const models = Object.fromEntries( Object.entries(modelsRef.current).map(([modelName, model]) => { const value = model.isControlled ? props[model.controlledProp] : modelsState[modelName]; return [ modelName, { value, setValue: (newValue) => { if (!model.isControlled) { setModelsState((prevState) => ({ ...prevState, [modelName]: newValue })); } } } ]; }) ); return models; }; export { useTreeViewModels };