import { Add, Delete } from '@mui/icons-material'; import { IconButton, InputAdornment, TextField } from '@mui/material'; import get from 'lodash/get'; import { useEffect, useState } from 'react'; import { FieldError } from 'react-hook-form'; import styles from './ArrayInput.module.scss'; type Props = { label: string; value: string[]; className?: string; onChange: (event: any) => void; errors?: FieldError | FieldError[]; }; const ArrayInput: React.FC = ({ value, label, onChange, errors, className }) => { const [items, setItems] = useState(value); const onAdd = () => setItems([...items, '']); const onDelete = (index: number) => setItems(items.filter((_, idx) => idx !== index)); const handleChange = (event: React.ChangeEvent, index: number) => { const tempItems = [...items]; tempItems[index] = event.target.value; setItems(tempItems); }; useEffect(() => { onChange(items); }, [onChange, items]); return (

{label} ({items.length})

{items.map((value, index) => ( ) => handleChange(event, index)} error={!!get(errors, index, false)} helperText={get(errors, `${index}.message`, '')} InputProps={{ endAdornment: ( onDelete(index)} className={styles.delete}> ), }} /> ))}
); }; export default ArrayInput;