import Link from 'next/link'; import { GraduationCap, Users, Calendar, Euro, User, Clock } from 'lucide-react'; import { getSupabaseServerClient } from '@kit/supabase/server-client'; import { Badge } from '@kit/ui/badge'; import { Button } from '@kit/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@kit/ui/card'; import { createCourseManagementApi } from '@kit/course-management/api'; import { CmsPageShell } from '~/components/cms-page-shell'; interface PageProps { params: Promise<{ account: string; courseId: string }>; } const STATUS_LABEL: Record = { planned: 'Geplant', open: 'Offen', running: 'Laufend', completed: 'Abgeschlossen', cancelled: 'Abgesagt', }; const STATUS_VARIANT: Record = { planned: 'secondary', open: 'default', running: 'info', completed: 'outline', cancelled: 'destructive', }; export default async function CourseDetailPage({ params }: PageProps) { const { account, courseId } = await params; const client = getSupabaseServerClient(); const api = createCourseManagementApi(client); const [course, participants, sessions] = await Promise.all([ api.getCourse(courseId), api.getParticipants(courseId), api.getSessions(courseId), ]); if (!course) return
Kurs nicht gefunden
; const c = course as Record; return (
{/* Summary Cards */}

Name

{String(c.name)}

Status

{STATUS_LABEL[String(c.status)] ?? String(c.status)}

Dozent

{String(c.instructor_id ?? '—')}

Beginn – Ende

{c.start_date ? new Date(String(c.start_date)).toLocaleDateString('de-DE') : '—'} {' – '} {c.end_date ? new Date(String(c.end_date)).toLocaleDateString('de-DE') : '—'}

Gebühr

{c.fee != null ? `${Number(c.fee).toFixed(2)} €` : '—'}

Teilnehmer

{participants.length} / {String(c.capacity ?? '∞')}

{/* Teilnehmer Section */} Teilnehmer
{participants.length === 0 ? ( ) : participants.map((p: Record) => ( ))}
Name E-Mail Status Datum
Keine Teilnehmer
{String(p.last_name ?? '')}, {String(p.first_name ?? '')} {String(p.email ?? '—')} {String(p.status ?? '—')} {p.enrolled_at ? new Date(String(p.enrolled_at)).toLocaleDateString('de-DE') : '—'}
{/* Termine Section */} Termine
{sessions.length === 0 ? ( ) : sessions.map((s: Record) => ( ))}
Datum Beginn Ende Abgesagt?
Keine Termine
{s.session_date ? new Date(String(s.session_date)).toLocaleDateString('de-DE') : '—'} {String(s.start_time ?? '—')} {String(s.end_time ?? '—')} {s.cancelled ? Ja : '—'}
); }