'use client'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { api } from '@/lib/api'; import { Card, CardContent } from '@/components/ui/card'; import { Skeleton } from '@/components/ui/skeleton'; import { ChevronRight, CheckCircle } from 'lucide-react'; import { format } from 'date-fns'; interface Remittance { id: string; totalAmount: string; notes: string | null; status: string; createdAt: string; collectedBy?: { firstName: string; lastName: string }; confirmedBy?: { firstName: string; lastName: string }; payments?: Array<{ id: string; amount: string }>; } const peso = (v: string | number) => '₱' + Number(v ?? 0).toLocaleString('en-PH', { minimumFractionDigits: 2 }); export default function RemittancesPage() { const qc = useQueryClient(); const { data, isLoading } = useQuery<{ data: Remittance[]; total: number }>({ queryKey: ['remittances'], queryFn: async () => { const res = await api.get('/api/v1/remittances?limit=30'); return res.data; }, staleTime: 30_000, }); const confirm = useMutation({ mutationFn: async (id: string) => { await api.patch(`/api/v1/remittances/${id}/confirm`); }, onSuccess: () => qc.invalidateQueries({ queryKey: ['remittances'] }), }); const remittances = data?.data ?? []; return (

Remittances

Cash collections submitted by collectors

{isLoading ? Array.from({ length: 6 }).map((_, i) => ( {[...Array(7)].map((_, j) => ( ))} )) : remittances.map((r) => ( ))}
Date Collector Amount Payments Status Confirmed By
{r.createdAt ? format(new Date(r.createdAt), 'MMM d, yyyy') : '—'} {r.collectedBy ? `${r.collectedBy.firstName} ${r.collectedBy.lastName}` : '—'} {peso(r.totalAmount)} {r.payments?.length ?? '—'} {r.status} {r.confirmedBy ? `${r.confirmedBy.firstName} ${r.confirmedBy.lastName}` : '—'} {r.status !== 'CONFIRMED' && ( )}
{!isLoading && remittances.length === 0 && (
No remittances yet
)}
); }