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 } from 'lucide-react'; export default function PackageInquiriesTab() { const [inquiries, setInquiries] = useState([]); const [loading, setLoading] = useState(true); const [filterDate, setFilterDate] = useState(''); const [startDate, setStartDate] = useState(''); const [endDate, setEndDate] = 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); 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]); useEffect(() => { fetchInquiries(); }, [fetchInquiries]); const handleFilterChange = (setter: React.Dispatch>, value: string) => { setter(value); setCurrentPage(1); }; const indexOfFirstItem = (currentPage - 1) * itemsPerPage; const indexOfLastItem = Math.min(currentPage * itemsPerPage, totalItems); return ( Package Inquiries
handleFilterChange(setFilterDate, e.target.value)} className="w-[140px] text-sm" disabled={!!startDate || !!endDate} />
handleFilterChange(setStartDate, e.target.value)} className="w-[140px] text-sm" disabled={!!filterDate} />
handleFilterChange(setEndDate, e.target.value)} className="w-[140px] text-sm" disabled={!!filterDate} />
Requested Date Patient Details Requested Package Age/Gender Message {loading ? ( ) : inquiries.length === 0 ? ( No inquiries found for the selected criteria ) : ( inquiries.map((inq) => (
{new Date(inq.preferredDate).toLocaleDateString()}
Submitted: {new Date(inq.createdAt).toLocaleDateString()}
{inq.fullName}
{inq.mobileNumber}
{inq.email || '-'}
{inq.healthPackage?.name || 'N/A'}
{inq.age} yrs / {inq.gender}
{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}
)}
); }