"use client"; import React, { useState, useRef, useEffect } from "react"; import { ChevronDown, Search, X } from "lucide-react"; import { cn } from "../lib/utils"; interface SearchableSelectProps { id?: string; options: string[]; value: string; onChange: (value: string) => void; placeholder?: string; searchPlaceholder?: string; disabled?: boolean; className?: string; } export default function SearchableSelect({ id, options, value, onChange, placeholder = "انتخاب کنید...", searchPlaceholder = "جستجو...", disabled = false, className }: SearchableSelectProps) { const [isOpen, setIsOpen] = useState(false); const [searchQuery, setSearchQuery] = useState(""); const containerRef = useRef(null); useEffect(() => { const handleClickOutside = (e: MouseEvent) => { if (containerRef.current && !containerRef.current.contains(e.target as Node)) { setIsOpen(false); } }; document.addEventListener("mousedown", handleClickOutside); return () => document.removeEventListener("mousedown", handleClickOutside); }, []); const filteredOptions = options.filter(opt => opt.toLowerCase().includes(searchQuery.toLowerCase()) ); return (
{isOpen && (
setSearchQuery(e.target.value)} placeholder={searchPlaceholder} className="w-full bg-medical-gray-50 border border-medical-gray-200 rounded-xl py-1.5 pr-8 pl-3 text-xs font-bold text-medical-gray-900 outline-none focus:border-canina-blue" /> {searchQuery && ( )}
{filteredOptions.length === 0 ? (
موردی یافت نشد
) : ( filteredOptions.map((opt) => ( )) )}
)}
); }