import React, { useState, useCallback } from 'react'; import { isEqual } from 'lodash'; import { Flex, ErrorText } from 'indigo-react'; import cn from 'classnames'; import { useField } from 'react-final-form'; import { hasErrors } from 'form/validators'; const Chip = ({ value, onDelete, disabled }) => { return ( {value} ✗ ); }; const EmailChipInput = ({ className, name, label, disabled }) => { const [chips, _setChips] = useState([]); const [value, setValue] = useState(''); const handleChange = useCallback( event => { setValue(event.target.value); }, [setValue] ); const { input, meta: { active, error, dirtySinceLastSubmit }, } = useField(name, { subscription: { active: true, error: true, value: true, dirtySinceLastSubmit: true, }, isEqual, }); const setChips = useCallback( chips => { console.log(chips); _setChips(chips); input.onChange(chips); }, [input, _setChips] ); const addToChips = useCallback(() => { setChips([...chips, value]); setValue(''); }, [chips, value, setChips]); const handleKeyDown = useCallback( event => { if (['Enter', 'Tab', ','].includes(event.key) && value !== '') { event.preventDefault(); addToChips(); } else if ('Backspace' === event.key && value === '') { event.preventDefault(); setChips(chips.slice(0, -1)); } else if (disabled) { event.preventDefault(); } }, [setChips, chips, value, addToChips, disabled] ); const handleDelete = useCallback( idx => () => { setChips([...chips.slice(0, idx), ...chips.slice(idx + 1)]); }, [setChips, chips] ); const handleBlur = useCallback( e => { if (value !== '') { addToChips(); input.onBlur(); } }, [addToChips, value, input] ); const hasError = hasErrors(error); return ( {label && ( {label} )} {chips.map((chip, idx) => ( ))} {error && ( {error} )} ); }; export default EmailChipInput;