import { useState } from "react"; import { CalendarIcon, Search, X } from "lucide-react"; import { Input } from "@/components/ui/input"; import { Button } from "@/components/ui/button"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger, DialogClose, } from "@/components/ui/dialog"; import { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/popover"; import { cn } from "@/lib/utils"; import { format } from "date-fns"; import { Calendar } from "@/components/ui/calendar"; export type SearchCriteria = { searchTerm: string; searchBy: "name" | "insuranceId" | "phone" | "gender" | "dob" | "all"; }; interface PatientSearchProps { onSearch: (criteria: SearchCriteria) => void; onClearSearch: () => void; isSearchActive: boolean; } export function PatientSearch({ onSearch, onClearSearch, isSearchActive, }: PatientSearchProps) { const [dobOpen, setDobOpen] = useState(false); const [advanceDobOpen, setAdvanceDobOpen] = useState(false); const [searchTerm, setSearchTerm] = useState(""); const [searchBy, setSearchBy] = useState("name"); const [showAdvanced, setShowAdvanced] = useState(false); const [advancedCriteria, setAdvancedCriteria] = useState({ searchTerm: "", searchBy: "name", }); const handleSearch = () => { onSearch({ searchTerm, searchBy, }); }; const handleClear = () => { setSearchTerm(""); setSearchBy("all"); onClearSearch(); }; const handleAdvancedSearch = () => { onSearch(advancedCriteria); setShowAdvanced(false); }; const updateAdvancedCriteria = ( field: keyof SearchCriteria, value: string ) => { setAdvancedCriteria({ ...advancedCriteria, [field]: value, }); }; return (
{searchBy === "dob" ? ( { if (date) { const formattedDate = format(date, "yyyy-MM-dd"); setSearchTerm(String(formattedDate)); setDobOpen(false); } }} disabled={(date) => date > new Date()} /> ) : ( setSearchTerm(e.target.value)} className="pr-10" onKeyDown={(e) => { if (e.key === "Enter") { handleSearch(); } }} /> )} {searchTerm && ( )}
Advanced Search Search for patients using multiple criteria
{advancedCriteria.searchBy === "dob" ? ( { if (date) { const formattedDate = format(date, "yyyy-MM-dd"); updateAdvancedCriteria( "searchTerm", String(formattedDate) ); setAdvanceDobOpen(false); } }} disabled={(date) => date > new Date()} /> ) : ( updateAdvancedCriteria("searchTerm", e.target.value) } placeholder="Enter search term..." /> )}
{isSearchActive && ( )}
); }