import Link from "next/link"; import { notFound, redirect } from "next/navigation"; import { getSession } from "../../../lib/auth"; import { getDb, listRikxRondes, type Project, type ProjectExpertScore } from "../../../lib/db"; import { projectStatusBadgeClass, projectStatusLabel } from "../../../lib/projectStatus"; import { AppHeader } from "../../AppHeader"; import { ProjectDetailForm } from "./ProjectDetailForm"; export default async function ProjectPage({ params, searchParams, }: { params: Promise<{ id: string }>; searchParams: Promise<{ error?: string; opgeslagen?: string }>; }) { const session = await getSession(); if (!session) redirect("/login"); const { id } = await params; const { error, opgeslagen } = await searchParams; const db = getDb(); const row = db.prepare("SELECT * FROM projects WHERE id = ?").get(Number(id)) as Project | undefined; if (!row) notFound(); // node:sqlite levert objecten met null-prototype; spreiden maakt ze doorgeefbaar aan client components. const project = { ...row }; const expertScores = ( db.prepare("SELECT * FROM project_expert_scores WHERE project_id = ? ORDER BY expert").all(project.id) as ProjectExpertScore[] ).map((s) => ({ ...s })); const message = error === "missing" ? { tone: "error", text: "Vul een projectnaam in." } : error === "invalid" ? { tone: "error", text: "Niet opgeslagen: controleer de getallen (percentage 0–100, expertscores 1–10, geen negatieve waarden)." } : error === "datum" ? { tone: "error", text: "Niet opgeslagen: controleer de datums (de einddatum mag niet vóór de startdatum liggen)." } : opgeslagen ? { tone: "ok", text: "Project opgeslagen." } : null; return (
← Terug naar projecten

{project.name}

{projectStatusLabel(project.status)}
{message && (

{message.text}

)}
); }