feat(vorlagen): Editor, Liste und Versionsgeschichte (#24)
This commit was merged in pull request #24.
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
import { notFound } from "next/navigation";
|
||||
import { Editor } from "@/components/vorlagen/editor";
|
||||
import { VersionStatus } from "@/generated/prisma/enums";
|
||||
import { darf } from "@/server/auth/rollen";
|
||||
import { sitzungErforderlich } from "@/server/auth/sitzungspflicht";
|
||||
import { versionMitAufbau } from "@/server/queries/vorlagen";
|
||||
|
||||
/**
|
||||
* Eine Version einer Vorlage im Editor (#010).
|
||||
*
|
||||
* Die Seite prueft ihr Recht selbst — die Huelle darunter ist das zweite Netz,
|
||||
* nicht das erste. `lesen` genuegt zum Ansehen; geaendert werden darf nur ein
|
||||
* Entwurf und nur mit `vorlagenBearbeiten`. Beides entscheidet hier der Server,
|
||||
* der `lesend`-Schalter im Editor ist nur die Anzeige davon: die Server Actions
|
||||
* pruefen dasselbe noch einmal.
|
||||
*
|
||||
* `undefined` aus `versionMitAufbau` heisst „gibt es nicht oder darfst du nicht
|
||||
* sehen“ — die Unterscheidung waere schon die Auskunft, die wir nicht geben.
|
||||
*/
|
||||
export default async function VersionSeite({ params }: { params: Promise<{ versionId: string }> }) {
|
||||
const { versionId } = await params;
|
||||
const { benutzer } = await sitzungErforderlich("lesen", `/vorlagen/version/${versionId}`);
|
||||
|
||||
const version = await versionMitAufbau(versionId, benutzer);
|
||||
if (!version) notFound();
|
||||
|
||||
const darfBearbeiten = darf(benutzer.rolle, "vorlagenBearbeiten");
|
||||
const veroeffentlicht = version.status === VersionStatus.VEROEFFENTLICHT;
|
||||
|
||||
return (
|
||||
<Editor
|
||||
version={{
|
||||
id: version.id,
|
||||
vorlageId: version.vorlageId,
|
||||
vorlageName: version.vorlageName,
|
||||
version: version.version,
|
||||
veroeffentlicht,
|
||||
struktur: version.struktur,
|
||||
stand: version.stand.toISOString(),
|
||||
aenderungsnotiz: version.aenderungsnotiz,
|
||||
}}
|
||||
lesend={veroeffentlicht || !darfBearbeiten}
|
||||
darfBearbeiten={darfBearbeiten}
|
||||
// Auf dem Server formatiert: im Browser waere es eine zweite Uhrzeit und
|
||||
// damit ein Unterschied zwischen Vorrendern und Hydrieren.
|
||||
beispielDatum={new Date().toLocaleDateString("de-DE", {
|
||||
day: "2-digit",
|
||||
month: "2-digit",
|
||||
year: "numeric",
|
||||
})}
|
||||
/>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user