'use client' import { useState } from 'react' import { Search } from 'lucide-react' import { toast } from 'sonner' import { trpc } from '@/lib/trpc/client' import { Button } from '@/components/ui/button' import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select' interface AddMemberDialogProps { juryGroupId: string open: boolean onOpenChange: (open: boolean) => void } export function AddMemberDialog({ juryGroupId, open, onOpenChange }: AddMemberDialogProps) { const [searchQuery, setSearchQuery] = useState('') const [selectedUserId, setSelectedUserId] = useState('') const [role, setRole] = useState<'CHAIR' | 'MEMBER' | 'OBSERVER'>('MEMBER') const [maxAssignments, setMaxAssignments] = useState('') const utils = trpc.useUtils() const { data: userResponse, isLoading: isSearching } = trpc.user.list.useQuery( { search: searchQuery, perPage: 20 }, { enabled: searchQuery.length > 0 } ) const users = userResponse?.users || [] const { mutate: addMember, isPending } = trpc.juryGroup.addMember.useMutation({ onSuccess: () => { utils.juryGroup.getById.invalidate({ id: juryGroupId }) toast.success('Member added successfully') onOpenChange(false) resetForm() }, onError: (err) => { toast.error(err.message) }, }) const resetForm = () => { setSearchQuery('') setSelectedUserId('') setRole('MEMBER') setMaxAssignments('') } const handleSubmit = (e: React.FormEvent) => { e.preventDefault() if (!selectedUserId) { toast.error('Please select a user') return } addMember({ juryGroupId, userId: selectedUserId, role, maxAssignmentsOverride: maxAssignments ? parseInt(maxAssignments, 10) : null, }) } return ( Add Member to Jury Group Search for a user and assign them to this jury group
setSearchQuery(e.target.value)} />
{isSearching && (

Searching...

)} {users && users.length > 0 && (
{users.map((user) => ( ))}
)}
setMaxAssignments(e.target.value)} />
) }