import type { Metadata } from 'next' import { notFound } from 'next/navigation' import { db } from '@/lib/db' import { requireUser } from '@/lib/auth/current' import { loadVisibleCase } from '@/lib/cases/service' import { loadChangeHistory } from '@/lib/cases/entryService' import { de } from '@/lib/i18n/de' import { wordDiff } from '@/lib/diff' export const metadata: Metadata = { title: de.entry.changesHeading } export const dynamic = 'force-dynamic' /** * Änderungsübersicht als eigener Reiter an der Akte. * * Für die Abteilungsleitung ist das die Ansicht, mit der sie im Zweifel prüft, * ob an einer Akte nachträglich gedreht wurde. Sichtbar für alle, die die Akte * lesen dürfen — nicht nur für die Leitung. Das ist der ganze Sinn der Sache. */ export default async function ChangesPage({ params, }: { params: Promise<{ caseNumber: string }> }) { const user = await requireUser() const { caseNumber } = await params const akte = await loadVisibleCase(user.permissions, caseNumber) if (!akte) notFound() const versionen = await loadChangeHistory(user.permissions, akte.id) const namen = new Map( ( await db.user.findMany({ where: { id: { in: [...new Set(versionen.map((v) => v.editedById))] } }, select: { id: true, displayName: true }, }) ).map((u) => [u.id, u.displayName]), ) return ( <> {/* Aktenzeichen und Titel stehen im Layout, hier nur noch die Überschrift des Reiters. */}
{de.entry.changesIntro}
{versionen.length === 0 ? ({de.entry.changesEmpty}
) : ({de.entry.changeReason}: {version.changeReason}
) : null} {/* Wortdiff statt zweier Spalten: bei langen Vermerken sieht man sonst nicht, was sich geändert hat. */}
{wordDiff(version.body, version.entry.body).map((teil, index) =>
teil.kind === 'gleich' ? (
{teil.text}
) : teil.kind === 'entfernt' ? (
{teil.text}
) : (
{teil.text}
),
)}