import { useState, useRef, useEffect } from 'react'; import { ChevronDown } from 'lucide-react'; export interface SelectOption { value: string | number; label: React.ReactNode; } interface CustomSelectProps { value: string | number; onChange: (value: any) => void; options: SelectOption[]; className?: string; disabled?: boolean; } export function CustomSelect({ value, onChange, options, className = '', disabled = false, }: CustomSelectProps) { const [isOpen, setIsOpen] = useState(false); const containerRef = useRef(null); // Close when clicking outside useEffect(() => { function handleClickOutside(event: MouseEvent) { if (containerRef.current && !containerRef.current.contains(event.target as Node)) { setIsOpen(false); } } if (isOpen) { document.addEventListener('mousedown', handleClickOutside); } return () => { document.removeEventListener('mousedown', handleClickOutside); }; }, [isOpen]); const selectedOption = options.find(opt => opt.value === value) || options[0]; return (
{isOpen && !disabled && (
{options.map(option => { const isSelected = option.value === value; return ( ); })}
)}
); }