@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
39 lines (38 loc) • 1.29 kB
JavaScript
"use client";
import { useCallback, useContext, useMemo } from 'react';
import { assignPropsWithContext } from "../../../../shared/component-helper.js";
import ValueProviderContext from "./ValueProviderContext.js";
function useValueProvider(props) {
const {
overwriteProps,
...restProps
} = props || {};
const nestedContext = useContext(ValueProviderContext);
const inheritedProps = nestedContext?.inheritedContext;
const nestedValueProps = useMemo(() => {
if (inheritedProps && Object.keys(inheritedProps).length > 0) {
return {
...inheritedProps,
...restProps
};
}
return restProps;
}, [inheritedProps, restProps]);
const extend = useCallback(valueProps => {
const key = overwriteProps && valueProps?.path?.split('/')?.pop();
const overwrite = overwriteProps?.[key];
const props = overwrite ? {
...valueProps,
...overwrite
} : valueProps;
const value = Object.keys(nestedValueProps).length > 0 ? assignPropsWithContext(props, nestedValueProps) : props;
return value;
}, [nestedValueProps, overwriteProps]);
return {
extend,
inheritedProps: restProps,
inheritedContext: nestedValueProps
};
}
export default useValueProvider;
//# sourceMappingURL=useValueProvider.js.map