UNPKG

fannypack-v5

Version:

An accessible, composable, and friendly React UI Kit

48 lines (42 loc) 1.37 kB
import * as React from 'react'; import buildClassNames from 'classnames'; import _uniq from 'lodash/uniq'; import { useTheme } from './useTheme'; export function useClassName({ style, prevClassName, styleProps, themeKey, themeKeyOverride, themeKeySuffix, }: { style: any; prevClassName?: string; styleProps: any; themeKey?: string; themeKeyOverride?: string; themeKeySuffix?: string; }) { const { theme } = useTheme(); let newThemeKey = `${themeKeyOverride || themeKey || ''}${themeKeySuffix ? `.${themeKeySuffix}` : ''}`; const className = React.useMemo(() => { let className; if (Array.isArray(style)) { className = style.map((style) => style({ theme, ...styleProps, themeKey: newThemeKey })); } else { className = [style({ theme, ...styleProps, themeKey: newThemeKey })]; } return className; }, [newThemeKey, style, styleProps, theme]); const originalThemeKey = themeKeyOverride ? `${themeKey || ''}${themeKeySuffix ? `.${themeKeySuffix}` : ''}` : undefined; const classNames = buildClassNames( ...className, prevClassName, newThemeKey ? `fp-${newThemeKey.replace(/\./g, '')}` : undefined, originalThemeKey ? `fp-${originalThemeKey.replace(/\./g, '')}` : undefined ); const uniqueClassNames = _uniq(classNames.split(' ')).join(' '); return uniqueClassNames; }