UNPKG

@hitachivantara/uikit-react-utils

Version:
41 lines (40 loc) 1.14 kB
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 };