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.changesHeading}

{de.entry.changesIntro}

{versionen.length === 0 ? (

{de.entry.changesEmpty}

) : (
    {versionen.map((version) => (
  1. {de.entry.versionLabel(version.version)} → {version.version + 1} {namen.get(version.editedById) ?? version.editedById}
    {version.changeReason ? (

    {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} ), )}

  2. ))}
)} ) }