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
+14 -2
View File
@@ -1,4 +1,5 @@
import { useState } from "react"
import { useEffect, useState } from "react"
import { useLocation } from "@tanstack/react-router"
import { Search } from "lucide-react"
import { Auftraege } from "@/components/cockpit/Auftraege"
import { Bestaetigen } from "@/components/cockpit/Bestaetigen"
@@ -6,7 +7,7 @@ import { Chip, type ChipArt, Zustandsfeld } from "@/components/cockpit/Chip"
import { Panel } from "@/components/cockpit/Panel"
import { Button } from "@/components/ui/button"
import {
useAufraeumen, useAufraeumenLoeschen, useModellLaden, useModelle, useNutzung, useRadar, useRadarAktion,
useAufraeumen, useAufraeumenLoeschen, useJobs, useModellLaden, useModelle, useNutzung, useRadar, useRadarAktion,
useRadarSuche, useStart,
} from "@/lib/abfragen"
import { messwert, RADAR_STATUS_TEXT, rolleVon } from "@/lib/anzeige"
@@ -365,8 +366,19 @@ function AufraeumenPanel() {
export function ModelleSeite() {
const modelle = useModelle()
const nutzung = useNutzung()
const radar = useRadar()
const jobs = useJobs()
const [suche, setSuche] = useState(false)
// „Ansehen“ im Radar-Kasten der Startseite führt nach /modelle#radar. Der Router springt beim
// Rendern selbst zum Anker — da steht hier aber noch „wird gelesen“. Also springen wir, sobald
// alles über dem Radar geladen ist und die Seite nicht mehr wächst.
const hash = useLocation({ select: (l) => l.hash })
const bereit = !!modelle.data && !nutzung.isPending && !radar.isPending && !jobs.isPending
useEffect(() => {
if (bereit && hash === "radar") document.getElementById("radar")?.scrollIntoView({ block: "start" })
}, [bereit, hash])
if (modelle.isPending) return <Zustandsfeld text="Modelle werden gelesen …" />
// Scheitert nur ein späteres Nachladen, bleibt der letzte Stand stehen.
if (!modelle.data) return <Zustandsfeld fehler text={`Die Modell-Liste fehlt: ${modelle.error?.message ?? "keine Daten"}`} />