import React, { useState, useCallback } from 'react';
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 }) => {
return (
{value}
✗
);
};
const EmailChipInput = ({ className, name, label }) => {
const [chips, _setChips] = useState([]);
const [value, setValue] = useState('');
const handleChange = useCallback(
event => {
setValue(event.target.value);
},
[setValue]
);
const {
input,
meta: { active, error },
} = useField(name, {
subscription: { active: true, error: true },
});
const setChips = useCallback(
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));
}
},
[setChips, chips, value]
);
const handleDelete = useCallback(
idx => () => {
setChips([...chips.slice(0, idx), ...chips.slice(idx + 1)]);
},
[setChips, chips]
);
const handleBlur = useCallback(
e => {
if (value !== '') {
addToChips();
input.handleBlur();
}
},
[addToChips, value]
);
const hasError = hasErrors(error);
return (
{label && (
{label}
)}
{chips.map((chip, idx) => (
))}
{error && (
{error}
)}
);
};
export default EmailChipInput;