'use client' import { useState, useEffect } from 'react' import { Button } from '@/components/ui/button' import { Checkbox } from '@/components/ui/checkbox' import { Switch } from '@/components/ui/switch' import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog' import { Loader2 } from 'lucide-react' export type AttendeeSelection = { attendingUserIds: string[] visaFlags: Record } type Member = { userId: string name: string | null role: string email: string } interface Props { open: boolean onOpenChange: (open: boolean) => void members: Member[] cap: number onConfirm: (attendingUserIds: string[], visaFlags: Record) => void initial?: AttendeeSelection isPending?: boolean } export function EnrollAttendeesDialog({ open, onOpenChange, members, cap, onConfirm, initial, isPending = false, }: Props) { const [selected, setSelected] = useState>(new Set()) const [visa, setVisa] = useState>({}) // Seed from initial or default to first member (the lead) useEffect(() => { if (!open) return if (initial) { setSelected(new Set(initial.attendingUserIds)) setVisa(initial.visaFlags) } else { const defaultSelected = members.slice(0, 1).map((m) => m.userId) setSelected(new Set(defaultSelected)) setVisa({}) } }, [open, initial, members]) const overCap = selected.size > cap const noneSelected = selected.size === 0 const toggleMember = (userId: string, checked: boolean) => { setSelected((prev) => { const next = new Set(prev) if (checked) next.add(userId) else next.delete(userId) return next }) } const handleConfirm = () => { const ids = Array.from(selected) onConfirm( ids, Object.fromEntries(ids.map((id) => [id, !!visa[id]])), ) } return ( { if (!isPending) onOpenChange(next) }} > Select attendees Choose up to {cap} team member{cap === 1 ? '' : 's'} who will attend. Toggle "Visa?" for anyone who needs a visa letter.
    {members.map((m) => { const checked = selected.has(m.userId) const atCap = !checked && selected.size >= cap return (
  • {checked && ( )}
  • ) })}
{overCap && (

Please select no more than {cap} member{cap === 1 ? '' : 's'}.

)}
) }