'use client' import { useState } from 'react' import { trpc } from '@/lib/trpc/client' import { cn } from '@/lib/utils' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { Skeleton } from '@/components/ui/skeleton' import { Badge } from '@/components/ui/badge' import { History, ChevronRight } from 'lucide-react' export type ReassignmentHistoryProps = { roundId: string } export function ReassignmentHistory({ roundId }: ReassignmentHistoryProps) { const [expanded, setExpanded] = useState(false) const { data: events, isLoading } = trpc.assignment.getReassignmentHistory.useQuery( { roundId }, { enabled: expanded }, ) return ( setExpanded(!expanded)} > Reassignment History Juror dropout, COI, transfer, and cap redistribution audit trail {expanded && ( {isLoading ? (
{[1, 2].map((i) => )}
) : !events || events.length === 0 ? (

No reassignment events for this round

) : (
{events.map((event) => (
{event.type === 'DROPOUT' ? 'Juror Dropout' : event.type === 'COI' ? 'COI Reassignment' : event.type === 'TRANSFER' ? 'Assignment Transfer' : 'Cap Redistribution'} {event.droppedJuror.name}
{new Date(event.timestamp).toLocaleString()}

By {event.performedBy.name || event.performedBy.email} — {event.movedCount} project(s) reassigned {event.failedCount > 0 && `, ${event.failedCount} failed`}

{event.moves.length > 0 && (
{event.moves.map((move, i) => ( ))}
Project Reassigned To
{move.projectTitle} {move.newJurorName}
)} {event.failedProjects.length > 0 && (

Could not reassign:

    {event.failedProjects.map((p, i) => (
  • {p}
  • ))}
)}
))}
)}
)}
) }