'use client' import { useState } from 'react' import { Trash2, UserPlus } from 'lucide-react' import { toast } from 'sonner' import { trpc } from '@/lib/trpc/client' import { Button } from '@/components/ui/button' import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table' import { Badge } from '@/components/ui/badge' import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from '@/components/ui/alert-dialog' import { AddMemberDialog } from './add-member-dialog' interface JuryMember { id: string userId: string role: string user: { id: string name: string | null email: string } maxAssignmentsOverride: number | null preferredStartupRatio: number | null } interface JuryMembersTableProps { juryGroupId: string members: JuryMember[] } export function JuryMembersTable({ juryGroupId, members }: JuryMembersTableProps) { const [addDialogOpen, setAddDialogOpen] = useState(false) const [removingMemberId, setRemovingMemberId] = useState(null) const utils = trpc.useUtils() const { mutate: removeMember, isPending: isRemoving } = trpc.juryGroup.removeMember.useMutation({ onSuccess: () => { utils.juryGroup.getById.invalidate({ id: juryGroupId }) toast.success('Member removed successfully') setRemovingMemberId(null) }, onError: (err) => { toast.error(err.message) setRemovingMemberId(null) }, }) const handleRemove = (memberId: string) => { removeMember({ id: memberId }) } return (
Name Email Role Max Assignments Actions {members.length === 0 ? ( No members yet. Add members to get started. ) : ( members.map((member) => ( {member.user.name || 'Unnamed User'} {member.user.email} {member.role} {member.maxAssignmentsOverride ?? '—'} )) )}
setRemovingMemberId(null)}> Remove Member Are you sure you want to remove this member from the jury group? This action cannot be undone. Cancel removingMemberId && handleRemove(removingMemberId)} className="bg-destructive text-destructive-foreground hover:bg-destructive/90" > Remove
) }