start: Radar-Kasten springt wirklich zum Radar, Checkliste fragt vor Neustart und Freigeben

- "Ansehen" im Radar-Kasten fuehrt nach /modelle#radar. Der Router sprang beim Rendern
  zum Anker, als dort noch "wird gelesen" stand; jetzt springt die Modelle-Seite, sobald
  alles ueber dem Radar geladen ist.
- Knoepfe der Checkliste, die einen Dienst (neu) starten, einen Job erneut laufen lassen
  oder ein Update freigeben, fragen vorher nach. Das Protokoll oeffnet weiter sofort; der
  Dialog wird erst bei Bedarf geladen und bleibt aus dem Start-Buendel.
- Scheitert nur ein spaeteres Nachladen, bleibt der letzte Stand der Startseite stehen
  statt einer Fehlerflaeche.
- Test fuer die Rueckfrage-Logik (wann gefragt wird, Checkliste erst nach "Ja",
  gesperrter Ja-Knopf, Ersatz-Hinweis beim Installieren).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-09-24 15:19:03 +02:00
co-authored by Claude Opus 5.5
parent 3c1d8bf88f
commit 739f27a7e5
5 changed files with 179 additions and 17 deletions
+48 -1
View File
@@ -1,7 +1,7 @@
// Reine Anzeige-Logik der Cockpit-Seiten — getrennt von den Komponenten, damit sie ohne
// DOM testbar bleibt und Vites Hot-Reload die Komponenten-Dateien sauber tauschen kann.
import type { AktionsErgebnis, Job, Modell, Start } from "./typen"
import type { AktionsErgebnis, Hinweis, HinweisAktion, Job, Modell, Start } from "./typen"
// --- Rundinstrument -----------------------------------------------------------------
// 240°-Bogen wie ein Zeigerinstrument, Mittelpunkt (100|95) in einer 200×150-Zeichnung.
@@ -54,6 +54,53 @@ export function hauptleuchte(z: Start["zustand"]) {
: { art: "gelb" as const, oben: "Achtung", mitte, unten: "Drücken zum Ansehen" }
}
// --- Checkliste ---------------------------------------------------------------------
export interface Rueckfrage {
titel: string
text: string
knopf: string
}
/**
* Braucht ein Knopf eines Hinweises eine Rückfrage? Ja bei allem, was etwas neu startet, erneut
* laufen lässt oder freigibt (services/waechter.fuehre_aktion_aus). Nur das Protokoll öffnet sofort.
*/
export function hinweisRueckfrage(
h: Pick<Hinweis, "id" | "titel">,
a: Pick<HinweisAktion, "id" | "label">,
): Rueckfrage | null {
const betrifft = `„${h.titel}“:`
switch (a.id) {
case "protokoll":
return null
case "neustart":
if (h.id.startsWith("timer:")) {
return { titel: `${a.label}?`, text: `${betrifft} Der Dienst läuft sofort noch einmal.`, knopf: a.label }
}
return {
titel: `${a.label}?`,
text: `${betrifft} Der Dienst wird ${/^starten/i.test(a.label) ? "gestartet" : "neu gestartet"} und ist dabei kurz nicht erreichbar.`,
knopf: a.label,
}
case "job-wiederholen":
return {
titel: "Job erneut ausführen?",
text: `${betrifft} Hermes führt den Job sofort noch einmal aus, mit allem, was er sonst auch tut — etwa Nachrichten verschicken.`,
knopf: a.label,
}
case "freigeben":
return {
titel: "Update freigeben?",
text: `${betrifft} Nach dem Freigeben versucht der nächste Sonntags-Lauf das Update wieder.`,
knopf: a.label,
}
default:
// Ein Knopf, den der Wächter neu gelernt hat: lieber einmal zu oft fragen als einmal zu wenig.
return { titel: `${a.label}?`, text: `${betrifft} ${a.label}.`, knopf: a.label }
}
}
// --- Aktionen und Aufträge (auch im Start-Bündel gebraucht) ----------------------------
/** Warum eine Aktion nicht geklappt hat — die Endpunkte legen den Grund in verschiedene Felder. */