import { notFound } from 'next/navigation' import Link from 'next/link' import type { Route } from 'next' import { api } from '@/lib/trpc/server' import { Button } from '@/components/ui/button' import { Badge } from '@/components/ui/badge' import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from '@/components/ui/card' import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table' import { ArrowLeft, Pencil, Plus } from 'lucide-react' import { formatDateOnly } from '@/lib/utils' interface ProgramDetailPageProps { params: Promise<{ id: string }> } const statusColors: Record = { DRAFT: 'secondary', ACTIVE: 'default', CLOSED: 'success', ARCHIVED: 'secondary', } export default async function ProgramDetailPage({ params }: ProgramDetailPageProps) { const { id } = await params const caller = await api() let program try { program = await caller.program.get({ id }) } catch { notFound() } return (

{program.name}

{program.status}

{program.year} Edition

{program.description && ( Description

{program.description}

)}
Rounds Competition rounds for this program
{(program.stages as Array<{ id: string; name: string; status: string; _count: { projects: number; assignments: number }; createdAt?: Date }>).length === 0 ? (
No rounds created yet. Set up a competition to get started.
) : ( Stage Status Projects Assignments {(program.stages as Array<{ id: string; name: string; status: string; _count: { projects: number; assignments: number } }>).map((stage) => ( {stage.name} {stage.status} {stage._count.projects} {stage._count.assignments} ))}
)}
) }