import { useState } from "react" import { useQueryClient } from "@tanstack/react-query" import { cn } from "cn" import { Button } from "@/components/ui/button" import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from "@/components/ui/sheet" import { type Dienst, useDienste, useProtokoll } from "@/lib/abfragen" import { fehlerText } from "@/lib/anzeige" import { post } from "@/lib/api" import { melden } from "@/lib/meldungen" import type { AktionsErgebnis } from "@/lib/typen" /** Das Protokoll eines Dienstes, direkt unter seiner Zeile — am Handy sonst weit unten außer Sicht. */ function Protokoll({ unit }: { unit: string }) { const protokoll = useProtokoll(unit) let text: string if (protokoll.isPending) text = "Wird gelesen …" else if (protokoll.isError) text = `Das Protokoll lässt sich gerade nicht lesen: ${protokoll.error.message}` else if (protokoll.data.ok === false) text = protokoll.data.err || protokoll.data.text || "Das Protokoll lässt sich nicht lesen." else text = protokoll.data.text?.trim() || "Noch keine Einträge." return (
      {text}
    
) } /** Dienste der Box mit Protokoll und Neustart — die „Log-Ansicht der Dienste“. */ export function Dienste({ offen, onSchliessen }: { offen: boolean; onSchliessen: () => void }) { const qc = useQueryClient() const dienste = useDienste() const [gewaehlt, setGewaehlt] = useState(null) const [bestaetigen, setBestaetigen] = useState(null) const [startet, setStartet] = useState(null) async function neustarten(d: Dienst) { if (startet) return setBestaetigen(null) setStartet(d.unit) try { const e = await post("/api/maintenance/restart", { service: d.unit }) if (e.ok) melden("erfolg", `${d.name} ${d.schlaeft ? "wird geweckt" : "startet neu"}.`) else melden("fehler", `${d.name} ließ sich nicht starten: ${fehlerText(e)}`) qc.invalidateQueries({ queryKey: ["dienste"] }) } catch (f) { melden("fehler", (f as Error).message) } finally { setStartet(null) } } let inhalt if (dienste.isPending) { inhalt =

Dienste werden gelesen …

} else if (dienste.isError && !dienste.data) { inhalt =

Die Dienste lassen sich gerade nicht lesen: {dienste.error.message}

} else if (!dienste.data?.services.length) { inhalt =

Keine Dienste gefunden.

} else { inhalt = (
    {dienste.data.services.map((d) => (
  • {d.name} {d.unit} · {d.ok ? "läuft" : d.schlaeft ? "schläft (abgeschaltet)" : "antwortet nicht"} {bestaetigen === d.unit ? ( <> ) : ( )} {gewaehlt === d.unit && }
  • ))}
) } return ( !o && onSchliessen()}> Dienste und Protokolle Welcher Dienst läuft, was er zuletzt geschrieben hat. {inhalt} ) }