import React, { useState, useCallback } from 'react';
import { Flex, ErrorText } from 'indigo-react';
import cn from 'classnames';
import { useField } from 'react-final-form';
import { useFieldArray } from 'react-final-form-arrays';
import { hasErrors } from 'form/validators';
const Chip = ({ onDelete, disabled, name }) => {
const { input } = useField(name, { subscription: { value: true } });
return (
{input.value}
✗
);
};
const EmailChipInput = ({ className, name, label, disabled }) => {
const {
fields,
meta: { error, active },
} = useFieldArray(name, { subscription: { error: true, active: true } });
const [value, setValue] = useState('');
const handleChange = useCallback(
event => {
event.preventDefault();
setValue(event.target.value);
},
[setValue]
);
const addToChips = useCallback(() => {
fields.concat(value.split(/[\n\t, ]+/));
setValue('');
}, [value, fields, setValue]);
const handleKeyDown = useCallback(
event => {
if (['Enter', 'Tab', ',', ' '].includes(event.key) && value !== '') {
event.preventDefault();
addToChips();
} else if ('Backspace' === event.key && value === '') {
event.preventDefault();
fields.pop();
} else if (disabled) {
event.preventDefault();
}
},
[fields, value, disabled, addToChips]
);
const handleDelete = useCallback(
idx => () => {
fields.remove(idx);
},
[fields]
);
const handleBlur = useCallback(
e => {
e.preventDefault();
if (value !== '') {
addToChips();
}
},
[addToChips, value]
);
const hasError = hasErrors(error);
return (
{label && (
{label}
)}
{fields.map((name, idx) => (
))}
{error && (
{JSON.stringify(error)}
)}
);
};
export default EmailChipInput;