import Link from 'next/link'; import { GraduationCap, Plus, Users, Calendar, Euro } 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'; import { EmptyState } from '~/components/empty-state'; import { StatsCard } from '~/components/stats-card'; interface PageProps { params: Promise<{ account: string }>; } const STATUS_BADGE_VARIANT: Record< string, 'secondary' | 'default' | 'info' | 'outline' | 'destructive' > = { planned: 'secondary', open: 'default', running: 'info', completed: 'outline', cancelled: 'destructive', }; const STATUS_LABEL: Record = { planned: 'Geplant', open: 'Offen', running: 'Laufend', completed: 'Abgeschlossen', cancelled: 'Abgesagt', }; export default async function CoursesPage({ params }: PageProps) { const { account } = await params; const client = getSupabaseServerClient(); const { data: acct } = await client .from('accounts') .select('id') .eq('slug', account) .single(); if (!acct) return
Konto nicht gefunden
; const api = createCourseManagementApi(client); const [courses, stats] = await Promise.all([ api.listCourses(acct.id, { page: 1 }), api.getStatistics(acct.id), ]); return (
{/* Header */}

Kurse

Kursangebot verwalten

{/* Stats */}
} /> } /> } /> } />
{/* Table or Empty State */} {courses.data.length === 0 ? ( } title="Keine Kurse vorhanden" description="Erstellen Sie Ihren ersten Kurs, um loszulegen." actionLabel="Neuer Kurs" actionHref={`/home/${account}/courses/new`} /> ) : ( Alle Kurse ({courses.total})
{courses.data.map((course: Record) => ( ))}
Kursnr. Name Beginn Ende Status Teilnehmer Gebühr
{String(course.course_number ?? '—')} {String(course.name)} {course.start_date ? new Date(String(course.start_date)).toLocaleDateString('de-DE') : '—'} {course.end_date ? new Date(String(course.end_date)).toLocaleDateString('de-DE') : '—'} {STATUS_LABEL[String(course.status)] ?? String(course.status)} {String(course.capacity ?? '—')} {course.fee != null ? `${Number(course.fee).toFixed(2)} €` : '—'}
)}
); }