@hitachivantara/uikit-react-utils
Version:
UI Kit utilities package.
41 lines (40 loc) • 1.14 kB
JavaScript
import { useMemo } from "react";
import { useCss } from "./useCss.js";
import { useTheme } from "./useTheme.js";
function filterProps(props) {
return Object.keys(props).reduce((acc, key) => {
if (props[key] !== void 0) {
acc[key] = props[key];
}
return acc;
}, {});
}
function useDefaultProps(componentName, props) {
const { activeTheme } = useTheme();
const { css, cx } = useCss();
const themeDefaultProps = activeTheme?.components?.[componentName];
const classes = useMemo(() => {
const themeClasses = themeDefaultProps?.classes || {};
const propsClasses = props?.classes || {};
const classKeys = [
...Object.keys(themeClasses),
...Object.keys(propsClasses)
];
if (classKeys.length === 0) return void 0;
return classKeys.reduce((acc, key) => {
acc[key] = cx(
themeClasses[key] && css(themeClasses[key]),
propsClasses[key]
);
return acc;
}, {});
}, [css, cx, props?.classes, themeDefaultProps?.classes]);
return {
...themeDefaultProps,
...filterProps(props),
...classes && { classes }
};
}
export {
useDefaultProps
};