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;