import Link from 'next/link' import { redirect } from 'next/navigation' import { createClient } from '@/lib/supabase/server' import { PageHeader, PageTitle } from '@/components/ui/page-title' import { Badge } from '@/components/ui/badge' import { Empty, EmptyHeader, EmptyMedia, EmptyTitle, EmptyDescription } from '@/components/ui/empty' import { ClipboardList } from 'lucide-react' import { CopyLinkButton } from '@/components/forms/copy-link-button' export const dynamic = 'force-dynamic' // Member-facing list of forms a member can fill. Auth + membership are already // enforced by the (app) layout; RLS lets a member read published forms in // their space. export default async function MyFormsPage() { const supabase = await createClient() const { data: { user }, } = await supabase.auth.getUser() if (!user) redirect('/login') const { data: member } = await supabase .from('space_members') .select('space_id, spaces(slug)') .eq('user_id', user.id) .in('status', ['current', 'unverified', 'late']) .single() if (!member) redirect('/login') const spaceSlug = (member.spaces as { slug?: string } | null)?.slug ?? '' const { data: forms } = await supabase .from('forms') .select('id, title, description, kind, status, slug, visibility') .eq('space_id', member.space_id) .eq('status', 'published') .order('created_at', { ascending: false }) const list = forms ?? [] return ( <> Forms
{list.length === 0 ? ( Nothing to fill right now Forms and waivers your space publishes will show up here. ) : (
{list.map(f => { const isPublic = f.visibility !== 'members' return (
{f.title} {f.kind === 'waiver' && Waiver}
{f.description && (

{f.description}

)} {isPublic && (

/f/{spaceSlug}/{f.slug}

)}
{isPublic && } Open →
) })}
)}
) }