@hitachivantara/uikit-react-core
Version:
Core React components for the NEXT Design System.
44 lines (43 loc) • 1.26 kB
JavaScript
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
};