Files
AfiS-Aktensystem/web/app/(app)/faelle/[caseNumber]/WatchToggle.tsx
T
Harlekin e0b03ea336
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
Gedankenstriche durch Bindestriche ersetzt
375 Vorkommen in 210 Dateien. Betrifft Kommentare, Oberflaechentexte und die
README; an keiner Stelle Bedeutung, nur Zeichensetzung.
2026-09-04 08:54:52 +02:00

45 lines
1.1 KiB
TypeScript

'use client'
import { useState, useTransition } from 'react'
import { watchText } from '@/lib/i18n/shell'
import { toggleWatchAction } from '../actions'
/**
* Akte beobachten.
*
* 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.
*/
export function WatchToggle({
caseNumber,
initial,
}: {
caseNumber: string
initial: boolean
}) {
const [aktiv, setAktiv] = useState(initial)
const [pending, startTransition] = useTransition()
return (
<button
type="button"
disabled={pending}
title={watchText.hint}
onClick={() =>
startTransition(async () => {
const vorher = aktiv
setAktiv(!vorher)
const ergebnis = await toggleWatchAction({ caseNumber })
if (!ergebnis.ok) setAktiv(vorher)
else setAktiv(ergebnis.watching)
})
}
aria-pressed={aktiv}
className="btn btn-sm"
>
{aktiv ? watchText.unwatch : watchText.watch}
</button>
)
}