From be4db26316e7522f567a4ce6fc27e0a0f73f89f2 Mon Sep 17 00:00:00 2001 From: Towfiq Date: Thu, 1 Dec 2022 12:01:13 +0600 Subject: [PATCH] feat: Adds a search field in Country select field. resolves: #2 --- components/common/SelectField.tsx | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) 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 (