UNPKG

fannypack-v5

Version:

An accessible, composable, and friendly React UI Kit

42 lines (39 loc) 1.64 kB
import { omitBy } from './omitBy'; import { get } from './get'; import { useTheme } from './useTheme'; import { useColorMode } from './useColorMode'; const isUndefined = (val) => typeof val === 'undefined'; export function useDefaultProps(props: any = {}, config: any = {}) { const { themeKey } = config; const { theme } = useTheme(); const { colorMode: globalColorMode } = useColorMode(); const colorMode = props.colorMode || globalColorMode; const configDefaultProps = omitBy(config?.defaultProps ?? {}, isUndefined); const themeDefaultProps = omitBy(get(theme, `${themeKey}.defaultProps`, {}), isUndefined); const themeVariantDefaultProps = omitBy( get(theme, `${themeKey}.variants.${props.variant}.defaultProps`, {}), isUndefined ); const themeColorModeDefaultProps = omitBy(get(theme, `${themeKey}.modes.${colorMode}.defaultProps`, {}), isUndefined); const overridesDefaultProps = omitBy(get(props, `overrides.${themeKey}.defaultProps`, {}), isUndefined); const overridesVariantDefaultProps = omitBy( get(props, `overrides.${themeKey}.variants.${props.variant}.defaultProps`, {}), isUndefined ); const overridesColorModeDefaultProps = omitBy( get(props, `overrides.${themeKey}.modes.${colorMode}.defaultProps`, {}), isUndefined ); const newProps = { ...configDefaultProps, ...themeDefaultProps, ...themeVariantDefaultProps, ...themeColorModeDefaultProps, ...overridesDefaultProps, ...overridesVariantDefaultProps, ...overridesColorModeDefaultProps, colorMode, ...omitBy(props, isUndefined), }; return { props: newProps, themeKey }; }