UNPKG

@hitachivantara/uikit-react-utils

Version:
40 lines (39 loc) 1.25 kB
import { useCss } from "./useCss.js"; import { useTheme } from "./useTheme.js"; import { useMemo } from "react"; //#region src/hooks/useDefaultProps.ts /** Filter out `undefined` entries from `props` object. */ function filterProps(props) { return Object.keys(props).reduce((acc, key) => { if (props[key] !== void 0) acc[key] = props[key]; return acc; }, {}); } /** Injects into `props` the props defined in the theme `componentName`. */ 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 } }; } //#endregion export { useDefaultProps };