import { useTranslation } from 'react-i18next' import { useState } from 'react' import { useCombobox } from 'downshift' import classnames from 'classnames' import { defaults as countries } from '../../countries-list' import { CountryCode } from '../../../../../../types/country' type CountryInputProps = { setValue: React.Dispatch> } & React.InputHTMLAttributes const itemToString = (item: typeof countries[number] | null) => item?.name ?? '' function CountryInput({ setValue }: CountryInputProps) { const { t } = useTranslation() const [inputItems, setInputItems] = useState(() => countries) const [inputValue, setInputValue] = useState('') const { isOpen, getLabelProps, getMenuProps, getInputProps, getComboboxProps, getItemProps, openMenu, selectedItem, } = useCombobox({ inputValue, items: inputItems, itemToString, onSelectedItemChange: ({ selectedItem }) => { setValue(selectedItem?.code ?? null) setInputValue(selectedItem?.name ?? '') }, onInputValueChange: ({ inputValue = '' }) => { setInputItems( countries.filter(country => itemToString(country).toLowerCase().includes(inputValue.toLowerCase()) ) ) }, }) return (
{/* eslint-disable-next-line jsx-a11y/label-has-for */} ) => { setInputValue(event.target.value) }, onFocus: () => { if (!isOpen) { openMenu() } }, })} className="form-control" type="text" placeholder={t('country')} />
    {inputItems.map((item, index) => (
  • {item.name}
  • ))}
) } export default CountryInput