import React, { useMemo } from 'react' import useTheme from '../styles/use-theme' import withDefaults from '../utils/with-defaults' import { NormalSizes, ButtonTypes } from '../utils/prop-types' import { ButtonGroupContext, ButtonGroupConfig } from './button-group-context' import { ZeitUIThemesPalette } from 'components/styles/themes' interface Props { disabled?: boolean vertical?: boolean ghost?: boolean size?: NormalSizes type?: ButtonTypes className?: string } const defaultProps = { disabled: false, vertical: false, ghost: false, size: 'medium' as NormalSizes, type: 'default' as ButtonTypes, className: '', } type NativeAttrs = Omit, keyof Props> export type ButtonGroupProps = Props & typeof defaultProps & NativeAttrs const getGroupBorderColors = (palette: ZeitUIThemesPalette, 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 ButtonGroup: React.FC> = groupProps => { const theme = useTheme() const { disabled, size, type, ghost, vertical, children, className, ...props } = groupProps const initialValue = useMemo( () => ({ disabled, size, type, ghost, isButtonGroup: true, }), [disabled, size, type], ) const border = useMemo(() => { return getGroupBorderColors(theme.palette, groupProps) }, [theme, type, disabled, ghost]) return (
{children}
) } const MemoButtonGroup = React.memo(ButtonGroup) export default withDefaults(MemoButtonGroup, defaultProps)