import React, { useMemo } from 'react' import useTheme from '../use-theme' import { NormalTypes } from '../utils/prop-types' import { HuiThemesPalette } from '../themes/presets' import useScale, { withScale } from '../use-scale' import useClasses from '../use-classes' export type BadgeTypes = NormalTypes interface Props { type?: BadgeTypes dot?: boolean className?: string } const defaultProps = { type: 'default' as BadgeTypes, dot: false, className: '' } type NativeAttrs = Omit, keyof Props> export type BadgeProps = Props & NativeAttrs const getBgColor = (type: NormalTypes, palette: HuiThemesPalette) => { const colors: { [key in NormalTypes]: string } = { default: palette.foreground, success: palette.success, warning: palette.warning, error: palette.error, secondary: palette.secondary } return colors[type] } const BadgeComponent: React.FC> = ({ type, className, children, dot, ...props }: BadgeProps & typeof defaultProps) => { const theme = useTheme() const { SCALES } = useScale() const bg = useMemo(() => getBgColor(type, theme.palette), [type, theme.palette]) const color = useMemo(() => { if (!type || type === 'default') return theme.palette.background return 'white' }, [type, theme.palette.background]) const classes = useClasses('badge', { dot }, className) return ( {!dot && children} ) } BadgeComponent.defaultProps = defaultProps BadgeComponent.displayName = 'HuiBadge' const Badge = withScale(BadgeComponent) export default Badge