import { useState, useEffect, useCallback } from 'react'; import { getAllInquiriesApi, HealthInquiry } from '@/api/healthCheck'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Badge } from '@/components/ui/badge'; import { Loader2, RefreshCw, ChevronLeft, ChevronRight, CalendarDays } from 'lucide-react'; export default function PackageInquiriesTab() { const [inquiries, setInquiries] = useState([]); const [loading, setLoading] = useState(true); const [searchText, setSearchText] = useState(''); const [dateMode, setDateMode] = useState<'preferred' | 'booked'>('preferred'); const [filterDate, setFilterDate] = useState(''); const [startDate, setStartDate] = useState(''); const [endDate, setEndDate] = useState(''); const [createdDate, setCreatedDate] = useState(''); const [createdStartDate, setCreatedStartDate] = useState(''); const [createdEndDate, setCreatedEndDate] = useState(''); const [currentPage, setCurrentPage] = useState(1); const [itemsPerPage, setItemsPerPage] = useState(10); const [totalItems, setTotalItems] = useState(0); const [totalPages, setTotalPages] = useState(1); const fetchInquiries = useCallback(async () => { setLoading(true); try { const res = await getAllInquiriesApi( currentPage, itemsPerPage, filterDate, startDate, endDate, createdDate, createdStartDate, createdEndDate, searchText ); setInquiries(res.data || []); setTotalItems(res.pagination?.total || 0); setTotalPages(res.pagination?.totalPages || 1); } catch (err) { console.error('Failed to fetch inquiries', err); } finally { setLoading(false); } }, [ currentPage, itemsPerPage, filterDate, startDate, endDate, createdDate, createdStartDate, createdEndDate, searchText, ]); useEffect(() => { fetchInquiries(); }, [fetchInquiries]); const handleModeChange = (newMode: 'preferred' | 'booked') => { setDateMode(newMode); setFilterDate(''); setStartDate(''); setEndDate(''); setCreatedDate(''); setCreatedStartDate(''); setCreatedEndDate(''); setCurrentPage(1); }; useEffect(() => { setCurrentPage(1); }, [searchText, filterDate, startDate, endDate, createdDate, createdStartDate, createdEndDate, itemsPerPage]); const indexOfFirstItem = (currentPage - 1) * itemsPerPage; const indexOfLastItem = Math.min(currentPage * itemsPerPage, totalItems); return (
Package Inquiries
setSearchText(e.target.value)} className="text-base h-10 bg-background w-full" />
Specific Day dateMode === 'preferred' ? setFilterDate(e.target.value) : setCreatedDate(e.target.value) } className="text-sm h-8" disabled={dateMode === 'preferred' ? !!startDate || !!endDate : !!createdStartDate || !!createdEndDate} />
From Range dateMode === 'preferred' ? setStartDate(e.target.value) : setCreatedStartDate(e.target.value) } className="text-sm h-8" disabled={dateMode === 'preferred' ? !!filterDate : !!createdDate} />
To Range dateMode === 'preferred' ? setEndDate(e.target.value) : setCreatedEndDate(e.target.value) } className="text-sm h-8" disabled={dateMode === 'preferred' ? !!filterDate : !!createdDate} />
Preferred Date Booked Date Patient Details Requested Package Demographics Message {loading ? ( ) : inquiries.length === 0 ? ( No package inquiries matched your active search filters. ) : ( inquiries.map((inq) => ( {inq.preferredDate ? (
{new Date(inq.preferredDate).toLocaleDateString('en-GB')}
) : ( Not specified )}
{new Date(inq.createdAt).toLocaleDateString('en-GB')}
{inq.fullName}
{inq.mobileNumber}
{inq.email &&
{inq.email}
}
{inq.healthPackage?.name || 'N/A'}
{inq.healthPackage?.category?.name && ( {inq.healthPackage.category.name} )}
{inq.age ? `${inq.age} yrs` : '—'}
{inq.gender || 'unspecified'}
{inq.message || 'No message provided.'}
{inq.message || 'No message provided.'}
)) )}
{!loading && totalItems > 0 && (
Showing {indexOfFirstItem + 1} to{' '} {indexOfLastItem} of{' '} {totalItems} inquiries
Page {currentPage} of {totalPages || 1}
)}
); }