'use client' import { useState, useTransition } from 'react' import Link from 'next/link' import { linkText } from '@/lib/i18n/cases' import { commonText } from '@/lib/i18n/common' import { LINK_KINDS } from '@/lib/cases/terms' import { linkCasesAction, unlinkCasesAction } from '../actions' import { classificationEdgeStyle } from '@/components/StampMark' type Verknuepfung = { kind: string direction: 'in' | 'out' other: { id: string; caseNumber: string; title: string; status: string; classification: number } } /** * Verknüpfungen zwischen Akten. * * Lösen ohne Bestätigungsdialog: eine Verknüpfung ist umkehrbar, sie lässt * sich in zwei Klicks neu ziehen. Siehe docs/09-performance-und-ux.md. */ export function CaseLinks({ caseNumber, links, canEdit, }: { caseNumber: string links: Verknuepfung[] canEdit: boolean }) { const [open, setOpen] = useState(false) const [target, setTarget] = useState('') const [kind, setKind] = useState('RELATED') const [error, setError] = useState(null) const [pending, startTransition] = useTransition() return (
{links.length === 0 ? (

{linkText.empty}

) : (
    {links.map((link) => (
  • {(link.direction === 'in' ? linkText.incoming : linkText.kinds)[link.kind] ?? link.kind} {link.other.caseNumber} {link.other.title} {canEdit ? ( ) : null}
  • ))}
)} {error ?

{error}

: null} {canEdit ? ( open ? (
setTarget(event.target.value)} placeholder={linkText.target} aria-label={linkText.target} className="border border-line bg-raised px-2 py-1 font-mono text-2xs" />
) : ( ) ) : null}
) }