'use client' import { trpc } from '@/lib/trpc/client' import { toast } from 'sonner' import { UserPlus, Loader2 } from 'lucide-react' import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, } from '@/components/ui/alert-dialog' interface BulkInviteButtonProps { roundId: string } export function BulkInviteButton({ roundId }: BulkInviteButtonProps) { const preview = trpc.round.getBulkInvitePreview.useQuery({ roundId }) const inviteMutation = trpc.round.bulkInviteTeamMembers.useMutation({ onSuccess: (data) => { toast.success( `Invited ${data.invited} team member${data.invited !== 1 ? 's' : ''}${data.skipped ? ` (${data.skipped} already active/invited)` : ''}` ) void preview.refetch() }, onError: (err) => toast.error(err.message), }) const uninvited = preview.data?.uninvitedCount ?? 0 if (uninvited === 0 && !preview.isLoading) return null return ( Invite team members? This will send invitation emails to {uninvited} team member {uninvited !== 1 ? 's' : ''} who haven't been invited yet. {preview.data?.alreadyInvitedCount ? ` (${preview.data.alreadyInvitedCount} already invited)` : ''} Cancel inviteMutation.mutate({ roundId })} disabled={inviteMutation.isPending} > {inviteMutation.isPending ? ( <> Sending... ) : ( `Send ${uninvited} Invitation${uninvited !== 1 ? 's' : ''}` )} ) }