Files
FireAdministration/src/app/kiosk/offline/wiederholen.tsx
T
Florian WildeandClaude Opus 5 e500ad6c0e Terminal haelt sich an Aussetzern nicht mehr fest
Drei Nachbesserungen aus dem Gesamtlauf der E2E-Tests:

Die Offline-Seite blieb stehen, wenn nur eine einzelne Anfrage unterwegs
abgebrochen war. Fuer ein Wandtablet ist das falsch herum gedacht: dort
tippt niemand auf "erneut versuchen". Sie versucht es jetzt selbst — sofort,
wenn der Browser wieder Netz meldet, sonst alle zehn Sekunden.

Dazu ein Wiederholungsversuch auch fuer den lokalen Testlauf. Vier
gleichzeitige Arbeiter gegen "next dev" plus bcrypt mit zwoelf Runden lassen
gelegentlich einen Test ins Zeitlimit laufen, der einzeln zuverlaessig gruen
ist — verstreut ueber alle Dateien, nicht an einer Stelle. Ein echter Fehler
faellt zweimal durch und bleibt sichtbar.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-03 19:24:14 +02:00

48 lines
1.4 KiB
TypeScript

"use client";
import * as React from "react";
/**
* Es allein noch einmal versuchen.
*
* Die Offline-Seite erscheint auch dann, wenn nur eine einzelne Anfrage
* unterwegs abgebrochen ist — ein kurzer Aussetzer des Repeaters genügt.
* Ohne diesen Baustein bliebe das Terminal danach auf dieser Seite stehen,
* bis jemand vorbeikommt und tippt. Am Hallenmonitor, den niemand bedient,
* hieße das: bis zum nächsten Dienstabend.
*
* Also versucht die Seite es selbst — sofort, wenn der Browser wieder Netz
* meldet, und sonst alle paar Sekunden.
*/
const ABSTAND_MS = 10_000;
export function ErneutVersuchen() {
const [versuche, setVersuche] = React.useState(0);
React.useEffect(() => {
const nochmal = () => {
setVersuche((wert) => wert + 1);
window.location.reload();
};
window.addEventListener("online", nochmal);
const zeitgeber = setInterval(() => {
// Ohne Netz spart der Versuch nichts — dann wartet die Seite auf das
// "online"-Ereignis darüber.
if (navigator.onLine) nochmal();
}, ABSTAND_MS);
return () => {
window.removeEventListener("online", nochmal);
clearInterval(zeitgeber);
};
}, []);
return (
<p className="text-[var(--muted-foreground)]" role="status" data-testid="offline-wiederholung">
Das Terminal versucht es alle {ABSTAND_MS / 1000} Sekunden von selbst
{versuche > 0 ? ` (${versuche}. Versuch)` : ""}.
</p>
);
}