import React, { InputHTMLAttributes, useState } from 'react'; import Checkbox from './checkbox'; type CheckboxValueType = string | string[] | number; type CheckboxProps = InputHTMLAttributes & { label: string; } type Props = { name: string; options: CheckboxProps[]; defaultValue?: CheckboxValueType[]; isFullWidth?: boolean; onChange?: (values: CheckboxValueType[]) => void; }; const CheckboxGroup = ({ name, options, defaultValue, isFullWidth, onChange, }: Props) => { const [values, setValues] = useState(defaultValue || []); const handleChange = (value: CheckboxValueType, isChecked: boolean) => { const index = values.indexOf(value); let newValues; if (isChecked && index === -1) { newValues = values.concat([value]); } if (!isChecked && index !== -1) { newValues = values.filter((val: CheckboxValueType) => val !== value); } newValues.sort(); setValues(newValues); onChange(newValues); }; return (
{options.map((props: CheckboxProps) => { const { label, ...attributes } = props; const value = (props.value as CheckboxValueType); return ( handleChange(value, isChecked)} isFullWidth={isFullWidth} {...attributes} // eslint-disable-line react/jsx-props-no-spreading > {label} ); })}
); }; export default CheckboxGroup;