Path: blob/1.0-develop/resources/scripts/components/elements/Checkbox.tsx
7461 views
import React from 'react';1import { Field, FieldProps } from 'formik';2import Input from '@/components/elements/Input';34interface Props {5name: string;6value: string;7className?: string;8}910type OmitFields = 'ref' | 'name' | 'value' | 'type' | 'checked' | 'onClick' | 'onChange';1112type InputProps = Omit<JSX.IntrinsicElements['input'], OmitFields>;1314const Checkbox = ({ name, value, className, ...props }: Props & InputProps) => (15<Field name={name}>16{({ field, form }: FieldProps) => {17if (!Array.isArray(field.value)) {18console.error('Attempting to mount a checkbox using a field value that is not an array.');1920return null;21}2223return (24<Input25{...field}26{...props}27className={className}28type={'checkbox'}29checked={(field.value || []).includes(value)}30onClick={() => form.setFieldTouched(field.name, true)}31onChange={(e) => {32const set = new Set(field.value);33set.has(value) ? set.delete(value) : set.add(value);3435field.onChange(e);36form.setFieldValue(field.name, Array.from(set));37}}38/>39);40}}41</Field>42);4344export default Checkbox;454647