'use client' import { trpc } from '@/lib/trpc/client' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { Skeleton } from '@/components/ui/skeleton' import { AlertCircle, CheckCircle2, Users } from 'lucide-react' interface CoverageReportProps { roundId: string } export function CoverageReport({ roundId }: CoverageReportProps) { const { data: coverage, isLoading } = trpc.roundAssignment.coverageReport.useQuery({ roundId, requiredReviews: 3, }) if (isLoading) { return (
{[1, 2, 3].map((i) => ( ))}
) } if (!coverage) { return

No coverage data available

} const totalAssigned = coverage.fullyAssigned || 0 const totalProjects = coverage.totalProjects || 0 const avgPerJuror = coverage.avgReviewsPerProject?.toFixed(1) || '0' const unassignedCount = coverage.unassigned || 0 return (
Total Assigned
{totalAssigned}

{totalProjects > 0 ? `${((totalAssigned / totalProjects) * 100).toFixed(1)}% coverage` : 'No projects'}

Avg Per Juror
{avgPerJuror}

Assignments per juror

Unassigned
{unassignedCount}

Projects below 3 reviews

{coverage.unassigned > 0 && ( Coverage Warnings Issues detected in assignment coverage
  • {coverage.unassigned} projects have insufficient coverage
)}
) }