diff --git a/src/components/cards/FacultySelector.tsx b/src/components/cards/FacultySelector.tsx index a952e3e..7f63998 100644 --- a/src/components/cards/FacultySelector.tsx +++ b/src/components/cards/FacultySelector.tsx @@ -43,37 +43,73 @@ type SelectFieldProps = { function SelectField({ label, value, options, onChange, renderOption }: SelectFieldProps) { const [isOpen, setIsOpen] = useState(false); + const [search, setSearch] = useState(''); const ref = useRef(null); + const inputRef = useRef(null); - // Close dropdown on outside click useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if (ref.current && !ref.current.contains(event.target as Node)) { setIsOpen(false); + setSearch(''); } }; document.addEventListener('mousedown', handleClickOutside); return () => document.removeEventListener('mousedown', handleClickOutside); }, []); + // Focus input when dropdown opens + useEffect(() => { + if (isOpen) inputRef.current?.focus(); + }, [isOpen]); + + const filteredOptions = options.filter(option => { + const label = renderOption ? renderOption(option) : option; + return label.toLowerCase().includes(search.toLowerCase()); + }); + const selectedLabel = value ? (renderOption ? renderOption(value) : value) : `Select ${label}`; + const handleToggle = () => { + setIsOpen(prev => { + if (prev) setSearch(''); + return !prev; + }); + }; + return (
-
- + + {isOpen && ( )}