{project.name}
{projectStatusLabel(project.status)} {/* Verstuurt het projectformulier hieronder (form-attribuut) */}{message.text}
)}import Link from "next/link"; import { notFound, redirect } from "next/navigation"; import { requireAdmin } from "../../../lib/auth"; import { getDb, listRikxRondes, type Project } from "../../../lib/db"; import { listBeoordelingen } from "../../../lib/experts"; import { projectStatusBadgeClass, projectStatusLabel } from "../../../lib/projectStatus"; import { listAccountNames } from "../../../lib/platform-db"; import { AppHeader } from "../../AppHeader"; import { PROJECT_FORM_ID } from "./formId"; import { ProjectDetailForm } from "./ProjectDetailForm"; export default async function ProjectPage({ params, searchParams, }: { params: Promise<{ id: string }>; searchParams: Promise<{ error?: string; opgeslagen?: string; tab?: string }>; }) { const session = await requireAdmin(); const { id } = await params; const { error, opgeslagen, tab } = 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 beoordelingen = listBeoordelingen([project.id]); const message = error === "missing" ? { tone: "error", text: "Vul een projectnaam in." } : error === "invalid" ? { tone: "error", text: "Niet opgeslagen: controleer de getallen (percentage 0–100, 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 (
{message.text}
)}