Gedankenstriche durch Bindestriche ersetzt
Prüfung / Lint, Typen, Tests (push) Canceled after 0s
Prüfung / Images bauen (pdf) (push) Canceled after 0s
Prüfung / Images bauen (web) (push) Canceled after 0s
Prüfung / Images bauen (worker) (push) Canceled after 0s
Images / bauen (pdf, docker/pdf.Dockerfile) (push) Canceled after 0s
Images / bauen (web, docker/web.Dockerfile) (push) Canceled after 0s
Images / bauen (worker, docker/worker.Dockerfile) (push) Canceled after 0s
Prüfung / Lint, Typen, Tests (push) Canceled after 0s
Prüfung / Images bauen (pdf) (push) Canceled after 0s
Prüfung / Images bauen (web) (push) Canceled after 0s
Prüfung / Images bauen (worker) (push) Canceled after 0s
Images / bauen (pdf, docker/pdf.Dockerfile) (push) Canceled after 0s
Images / bauen (web, docker/web.Dockerfile) (push) Canceled after 0s
Images / bauen (worker, docker/worker.Dockerfile) (push) Canceled after 0s
375 Vorkommen in 210 Dateien. Betrifft Kommentare, Oberflaechentexte und die README; an keiner Stelle Bedeutung, nur Zeichensetzung.
This commit is contained in:
@@ -90,7 +90,7 @@ export function CaseActions({
|
||||
</button>
|
||||
</div>
|
||||
{/* Welche Zustände von hier aus erreichbar sind, ergibt sich aus dem
|
||||
Lebenszyklus — aus einem Entwurf führt nur „Offen" heraus. Ohne
|
||||
Lebenszyklus - aus einem Entwurf führt nur „Offen" heraus. Ohne
|
||||
diesen Satz sieht die kurze Auswahl aus wie ein Fehler. */}
|
||||
<p className="mt-1.5 max-w-sm text-2xs text-text-dim">
|
||||
{caseText.statusHints[nextStatus] ?? caseText.statusChangeHint}
|
||||
|
||||
@@ -113,7 +113,7 @@ export function Participants({
|
||||
))}
|
||||
</PanelSelect>
|
||||
<PanelSelect value={target} onChange={setTarget} label={participantText.person}>
|
||||
<option value="">—</option>
|
||||
<option value="">-</option>
|
||||
<optgroup label={participantText.pickUser}>
|
||||
{members.map((member) => (
|
||||
<option key={member.id} value={`user:${member.id}`}>
|
||||
|
||||
@@ -7,7 +7,7 @@ import { toggleWatchAction } from '../actions'
|
||||
/**
|
||||
* Akte beobachten.
|
||||
*
|
||||
* Sofortiges Umschalten, der Server bestätigt nur — misslingt es, springt der
|
||||
* Sofortiges Umschalten, der Server bestätigt nur - misslingt es, springt der
|
||||
* Zustand zurück. Beobachten ist umkehrbar und harmlos, dafür braucht es
|
||||
* keinen Wartezustand. Siehe docs/09-performance-und-ux.md.
|
||||
*/
|
||||
|
||||
@@ -2,7 +2,7 @@ import { Skeleton, SkeletonLine } from '@/components/Skeleton'
|
||||
|
||||
/**
|
||||
* Skelett statt Spinner: die Struktur steht sofort, die Daten fallen hinein.
|
||||
* Ohne diese Grenze wartet die Navigation stumm, bis der Server fertig ist —
|
||||
* Ohne diese Grenze wartet die Navigation stumm, bis der Server fertig ist -
|
||||
* man klickt und es passiert scheinbar nichts. Siehe docs/09-performance-und-ux.md.
|
||||
*/
|
||||
export default function Loading() {
|
||||
|
||||
@@ -15,7 +15,7 @@ export const dynamic = 'force-dynamic'
|
||||
*
|
||||
* 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.
|
||||
* lesen dürfen - nicht nur für die Leitung. Das ist der ganze Sinn der Sache.
|
||||
*/
|
||||
export default async function ChangesPage({
|
||||
params,
|
||||
|
||||
@@ -2,7 +2,7 @@ import { Skeleton, SkeletonLine } from '@/components/Skeleton'
|
||||
|
||||
/**
|
||||
* Skelett statt Spinner: die Struktur steht sofort, die Daten fallen hinein.
|
||||
* Ohne diese Grenze wartet die Navigation stumm, bis der Server fertig ist —
|
||||
* Ohne diese Grenze wartet die Navigation stumm, bis der Server fertig ist -
|
||||
* man klickt und es passiert scheinbar nichts. Siehe docs/09-performance-und-ux.md.
|
||||
*/
|
||||
export default function Loading() {
|
||||
|
||||
@@ -2,7 +2,7 @@ import { Skeleton, SkeletonLine } from '@/components/Skeleton'
|
||||
|
||||
/**
|
||||
* Skelett statt Spinner: die Struktur steht sofort, die Daten fallen hinein.
|
||||
* Ohne diese Grenze wartet die Navigation stumm, bis der Server fertig ist —
|
||||
* Ohne diese Grenze wartet die Navigation stumm, bis der Server fertig ist -
|
||||
* man klickt und es passiert scheinbar nichts. Siehe docs/09-performance-und-ux.md.
|
||||
*/
|
||||
export default function Loading() {
|
||||
|
||||
@@ -2,7 +2,7 @@ import { Skeleton, SkeletonLine } from '@/components/Skeleton'
|
||||
|
||||
/**
|
||||
* Skelett statt Spinner: die Struktur steht sofort, die Daten fallen hinein.
|
||||
* Ohne diese Grenze wartet die Navigation stumm, bis der Server fertig ist —
|
||||
* Ohne diese Grenze wartet die Navigation stumm, bis der Server fertig ist -
|
||||
* man klickt und es passiert scheinbar nichts. Siehe docs/09-performance-und-ux.md.
|
||||
*/
|
||||
export default function Loading() {
|
||||
|
||||
@@ -20,12 +20,12 @@ export const dynamic = 'force-dynamic'
|
||||
* Die Akte ist in Reiter geteilt, und zwar in **eigene Seiten**, nicht in
|
||||
* umgeschaltete Blöcke: nur so wird der Code getrennt geladen. Die Fallakte
|
||||
* war die dichteste Seite der Anwendung und hatte das Bündelbudget aus
|
||||
* docs/09-performance-und-ux.md aufgebraucht — Beteiligte, Verknüpfungen,
|
||||
* docs/09-performance-und-ux.md aufgebraucht - Beteiligte, Verknüpfungen,
|
||||
* Dokumente und Anhänge lagen mit auf der Seite, obwohl man sie selten
|
||||
* gleichzeitig braucht.
|
||||
*
|
||||
* Fachlich passt der Schnitt ohnehin: die drei Ebenen aus
|
||||
* docs/05-akten-und-vorlagen.md — Kopfdaten, Abschnitte, Verlauf — bleiben
|
||||
* docs/05-akten-und-vorlagen.md - Kopfdaten, Abschnitte, Verlauf - bleiben
|
||||
* zusammen, das Umfeld der Akte bekommt seinen eigenen Platz.
|
||||
*/
|
||||
export default async function CaseLayout({
|
||||
|
||||
@@ -185,7 +185,7 @@ async function ChatBlock({
|
||||
|
||||
/**
|
||||
* Der Reiter „Akte": die drei Ebenen aus docs/05-akten-und-vorlagen.md, die
|
||||
* zusammengehören — Abschnitte als Sachstand, Verlauf als Chronologie, dazu
|
||||
* zusammengehören - Abschnitte als Sachstand, Verlauf als Chronologie, dazu
|
||||
* der formlose Aktenchat. Kopfdaten und Reiterleiste stehen im Layout.
|
||||
*/
|
||||
export default async function CasePage({
|
||||
|
||||
@@ -51,7 +51,7 @@ export async function saveSectionAction(
|
||||
/**
|
||||
* Mehrere Abschnitte in einem Zug.
|
||||
*
|
||||
* Jedes Feld wird einzeln geschrieben und einzeln beantwortet — Abschnitte
|
||||
* Jedes Feld wird einzeln geschrieben und einzeln beantwortet - Abschnitte
|
||||
* sind einzeln versioniert, und ein zwischenzeitlich geändertes Feld soll die
|
||||
* übrigen nicht aufhalten. Wäre das eine Transaktion, blockierte ein einziger
|
||||
* fremder Eingriff das ganze Blatt.
|
||||
|
||||
@@ -66,7 +66,7 @@ export async function createCaseAction(
|
||||
caseNumber = created.caseNumber
|
||||
|
||||
// Die Beteiligten gleich mitverknüpfen, damit sie nicht in einem zweiten
|
||||
// Schritt vergessen werden. Scheitert einer, steht die Akte trotzdem — sie
|
||||
// Schritt vergessen werden. Scheitert einer, steht die Akte trotzdem - sie
|
||||
// ist das Wichtigere, und nachtragen kann man auf der Aktenseite.
|
||||
for (const eintrag of beteiligte) {
|
||||
await addParticipant(user.permissions, {
|
||||
@@ -294,7 +294,7 @@ const watchSchema = z.object({ caseNumber: z.string().min(1) })
|
||||
|
||||
export type WatchResult = { ok: true; watching: boolean } | { ok: false; error: string }
|
||||
|
||||
/** Beobachten verschafft keinen Zugriff — nur was sichtbar ist, lässt sich merken. */
|
||||
/** Beobachten verschafft keinen Zugriff - nur was sichtbar ist, lässt sich merken. */
|
||||
export async function toggleWatchAction(input: unknown): Promise<WatchResult> {
|
||||
const user = await requireUser()
|
||||
const parsed = watchSchema.safeParse(input)
|
||||
|
||||
@@ -25,7 +25,7 @@ export function NewCaseForm({
|
||||
const [state, action, pending] = useActionState<CreateState, FormData>(createCaseAction, {})
|
||||
|
||||
// Beliebig viele Beteiligte, jeder mit seiner Rolle. Vorher gab es genau
|
||||
// eine „betroffene Person" — wer einen Zeugen und einen Täter eintragen
|
||||
// eine „betroffene Person" - wer einen Zeugen und einen Täter eintragen
|
||||
// wollte, musste die Akte erst anlegen und dann noch einmal hinein.
|
||||
const [beteiligte, setBeteiligte] = useState<Entwurf[]>([])
|
||||
const [naechster, setNaechster] = useState(1)
|
||||
@@ -133,7 +133,7 @@ export function NewCaseForm({
|
||||
onChange={(event) => aendern(eintrag.schluessel, { ziel: event.target.value })}
|
||||
className="field grow"
|
||||
>
|
||||
<option value="">—</option>
|
||||
<option value="">-</option>
|
||||
<optgroup label={participantText.pickUser}>
|
||||
{members.map((member) => (
|
||||
<option key={member.id} value={`user:${member.id}`}>
|
||||
|
||||
@@ -2,7 +2,7 @@ import { Skeleton } from '@/components/Skeleton'
|
||||
|
||||
/**
|
||||
* Skelett statt Spinner: die Struktur steht sofort, die Daten fallen hinein.
|
||||
* Ohne diese Grenze wartet die Navigation stumm, bis der Server fertig ist —
|
||||
* Ohne diese Grenze wartet die Navigation stumm, bis der Server fertig ist -
|
||||
* man klickt und es passiert scheinbar nichts. Siehe docs/09-performance-und-ux.md.
|
||||
*/
|
||||
export default function Loading() {
|
||||
|
||||
@@ -82,7 +82,7 @@ export default async function CaseListPage({
|
||||
</Link>
|
||||
{/* Alle sieben Zustände, nicht fünf: „Entwurf" und „Versiegelt" fehlten,
|
||||
und das waren ausgerechnet die beiden, die in der Liste am häufigsten
|
||||
standen — man konnte nach dem filtern, was man sah, gerade nicht.
|
||||
standen - man konnte nach dem filtern, was man sah, gerade nicht.
|
||||
Versiegelt nur für den, der Versiegeltes überhaupt lesen darf. */}
|
||||
{CASE_STATUSES.filter(
|
||||
(value) =>
|
||||
|
||||
Reference in New Issue
Block a user