& {
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;