import React, { useMemo } from 'react' import useTheme from '../use-theme' import { ButtonTypes } from '../utils/prop-types' import { ButtonGroupContext, ButtonGroupConfig } from './button-group-context' import { HuiThemesPalette } from '../themes/presets' import useScale, { withScale } from '../use-scale' import useClasses from '../use-classes' interface Props { disabled?: boolean vertical?: boolean ghost?: boolean type?: ButtonTypes className?: string } const defaultProps = { disabled: false, vertical: false, ghost: false, type: 'default' as ButtonTypes, className: '' } type NativeAttrs = Omit, keyof Props> export type ButtonGroupProps = Props & NativeAttrs const getGroupBorderColors = (palette: HuiThemesPalette, props: ButtonGroupProps): string => { const { ghost, type } = props if (!ghost && type !== 'default') return palette.background const colors: { [key in ButtonTypes]?: string } = { default: palette.border, success: palette.success, secondary: palette.secondary, error: palette.error, warning: palette.warning } const withoutLightType = type?.replace('-light', '') as ButtonTypes return colors[withoutLightType] || (colors.default as string) } const ButtonGroupComponent: React.FC> = ( groupProps: ButtonGroupProps ) => { const theme = useTheme() const { SCALES } = useScale() const { disabled, type, ghost, vertical, children, className, ...props } = groupProps const initialValue = useMemo( () => ({ disabled, type, ghost, isButtonGroup: true }), [disabled, type] ) const border = useMemo(() => { return getGroupBorderColors(theme.palette, groupProps) }, [theme, type, disabled, ghost]) const classes = useClasses( 'btn-group', { vertical: vertical, horizontal: !vertical }, className ) return (
{children}
) } ButtonGroupComponent.defaultProps = defaultProps ButtonGroupComponent.displayName = 'HuiButtonGroup' const ButtonGroup = withScale(ButtonGroupComponent) export default ButtonGroup