diff --git a/components/common/SelectField.tsx b/components/common/SelectField.tsx index 2d08159..384ec44 100644 --- a/components/common/SelectField.tsx +++ b/components/common/SelectField.tsx @@ -30,7 +30,9 @@ const SelectField = (props: SelectFieldProps) => { flags = false, emptyMsg = '' } = props; - const [showOptions, setShowOptions] = useState(false); + const [showOptions, setShowOptions] = useState(false); + const [filterInput, setFilterInput] = useState(''); + const [filterdOptions, setFilterdOptions] = useState([]); const selectedLabels = useMemo(() => { return options.reduce((acc:string[], item:SelectionOption) :string[] => { @@ -51,6 +53,18 @@ const SelectField = (props: SelectFieldProps) => { if (!multiple) { setShowOptions(false); } }; + const filterOptions = (event:React.FormEvent) => { + setFilterInput(event.currentTarget.value); + const filteredItems:SelectionOption[] = []; + const userVal = event.currentTarget.value.toLowerCase(); + options.forEach((option:SelectionOption) => { + if (flags ? option.label.toLowerCase().startsWith(userVal) : option.label.toLowerCase().includes(userVal)) { + filteredItems.push(option); + } + }); + setFilterdOptions(filteredItems); + }; + return (
{
+ {options.length > 20 && ( +
+ +
+ )}
    - {options.map((opt) => { + {(options.length > 20 && filterdOptions.length > 0 && filterInput ? filterdOptions : options).map((opt) => { const itemActive = selected.includes(opt.value); return (