'use client'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Loader2, GitBranch, ChevronRight, CheckCircle2, Clock, XCircle, Circle } from 'lucide-react'; import { useCirculationsByCorrespondence } from '@/hooks/use-circulation'; import { Circulation, CirculationRouting } from '@/types/circulation'; import { format } from 'date-fns'; import Link from 'next/link'; interface CirculationStatusCardProps { correspondencePublicId: string; } const ROUTING_STATUS_META: Record = { PENDING: { icon: Clock, color: 'text-yellow-500', label: 'Pending' }, IN_PROGRESS: { icon: Circle, color: 'text-blue-500', label: 'In Progress' }, COMPLETED: { icon: CheckCircle2, color: 'text-green-500', label: 'Completed' }, REJECTED: { icon: XCircle, color: 'text-red-500', label: 'Rejected' }, }; const CIRC_STATUS_CLASS: Record = { OPEN: 'bg-blue-100 text-blue-700', COMPLETED: 'bg-green-100 text-green-700', CANCELLED: 'bg-slate-100 text-slate-500', }; function RoutingStep({ routing }: { routing: CirculationRouting }) { const meta = ROUTING_STATUS_META[routing.status] ?? ROUTING_STATUS_META.PENDING; const Icon = meta.icon; const assigneeName = routing.assignee ? `${routing.assignee.firstName ?? ''} ${routing.assignee.lastName ?? ''}`.trim() || routing.assignee.username : '—'; return (
{assigneeName} {routing.completedAt && ( {format(new Date(routing.completedAt), 'dd MMM')} )}
); } function CirculationItem({ circ }: { circ: Circulation }) { const statusClass = CIRC_STATUS_CLASS[circ.statusCode] ?? 'bg-gray-100 text-gray-700'; const routings = circ.routings ?? []; return (

{circ.circulationNo}

{circ.subject}

{circ.statusCode}
{routings.length > 0 && (
{routings.slice(0, 3).map((r) => ( ))} {routings.length > 3 && (

+{routings.length - 3} more assignees

)}
)}
); } export function CirculationStatusCard({ correspondencePublicId }: CirculationStatusCardProps) { const { data, isLoading } = useCirculationsByCorrespondence(correspondencePublicId); const circulations: Circulation[] = Array.isArray(data) ? data : Array.isArray(data?.data) ? data.data : []; return ( Circulations {circulations.length > 0 && ( {circulations.length} )} {isLoading ? (
Loading...
) : circulations.length === 0 ? (

No circulations yet

) : ( circulations.map((circ) => ( )) )}
); }