'use client' import { useEffect, useState, useCallback } from 'react' import Link from 'next/link' import { toast } from 'sonner' import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog' import { Badge } from '@/components/ui/badge' import { listMemberSubmissions } from '@/lib/actions' type Submission = { id: string formId: string title: string kind: string version: number submittedAt: string } export function MemberFormsDialog({ member, onClose, }: { member: { id: string; display_name: string | null } | null onClose: () => void }) { const open = !!member const [loading, setLoading] = useState(false) const [rows, setRows] = useState([]) const load = useCallback(async (memberId: string) => { setLoading(true) const res = await listMemberSubmissions({ memberId }) setLoading(false) if ('error' in res && res.error) { toast.error(res.error) return } setRows(((res as { data: Submission[] }).data) ?? []) }, []) useEffect(() => { if (member) load(member.id) }, [member, load]) return ( { if (!o) onClose() }}> Forms submitted — {member?.display_name ?? 'Member'} {loading ? (

Loading…

) : rows.length === 0 ? (

This member has no submitted forms on record. Submissions link automatically when the submitter email matches the member.

) : (
    {rows.map(s => (
  • {s.title} {s.kind === 'waiver' && waiver} v{s.version}

    {new Date(s.submittedAt).toLocaleString()}

    View
  • ))}
)}
) }