import React, { useCallback, useMemo, useState } from 'react' import useTheme from '../use-theme' import useCurrentState from '../utils/use-current-state' import { FieldsetContext, FieldItem } from './fieldset-context' import useWarning from '../utils/use-warning' import useScale, { withScale } from '../use-scale' import useClasses from '../use-classes' interface Props { value: string className?: string onChange?: (value: string) => void } const defaultProps = { className: '' } type NativeAttrs = Omit, keyof Props> export type FieldsetGroupProps = Props & NativeAttrs const FieldsetGroupComponent: React.FC> = ({ className, children, value, onChange, ...props }: React.PropsWithChildren & typeof defaultProps) => { const theme = useTheme() const { SCALES } = useScale() const [selfVal, setSelfVal] = useState(value) const [items, setItems, ref] = useCurrentState([]) const classes = useClasses('group', className) const register = (newItem: FieldItem) => { const hasItem = ref.current.find((item) => item.value === newItem.value) if (hasItem) { // eslint-disable-next-line react-hooks/rules-of-hooks useWarning('The "value" of each "Fieldset" must be unique.', 'Fieldset') } setItems([...ref.current, newItem]) } const providerValue = useMemo( () => ({ currentValue: selfVal, inGroup: true, register }), [selfVal, register] ) const clickHandle = useCallback( (nextValue: string) => { setSelfVal(nextValue) onChange && onChange(nextValue) }, [onChange] ) return (
{items.map((item) => ( ))}
{children}
) } FieldsetGroupComponent.defaultProps = defaultProps FieldsetGroupComponent.displayName = 'HuiFieldsetGroup' const FieldsetGroup = withScale(FieldsetGroupComponent) export default FieldsetGroup