import { useNavigate, useParams } from "react-router-dom"; import { NachfuellDialog } from "./kontrolle/NachfuellDialog"; import { PositionCard } from "./kontrolle/PositionCard"; import { useKontrolle } from "./kontrolle/useKontrolle"; import { gruppiereNachFach, OHNE_FACH } from "../utils/fachGruppierung"; export function KontrollPage() { const { objektId } = useParams<{ objektId: string }>(); const navigate = useNavigate(); const { online, objekt, sperre, positionen, startFehler, wirdAbgeschlossen, abschlussFehler, alleUebertragen, nachfuellDialog, starteKontrolle, eingabeAendern, positionSenden, fehlerErneutVersuchen, abschliessen, abbrechen, jetztNachfuellen, nachfuellDialogSchliessen, } = useKontrolle(objektId); const fachGruppen = gruppiereNachFach(positionen, (zustand) => zustand.fach); const nurOhneFach = fachGruppen.length === 1 && fachGruppen[0][0] === OHNE_FACH; async function handleAbschliessen() { if (await abschliessen()) { navigate("/objekte"); } } async function handleAbbrechen() { const grund = window.prompt("Grund für den Abbruch (optional):") ?? undefined; await abbrechen(grund); navigate("/objekte"); } if (sperre) { return (

Objekt gesperrt

Wird gerade kontrolliert von {sperre.benutzer ?? "unbekannt"}, seit {sperre.seit}.

); } if (startFehler) { return (
{startFehler}
); } return (

{objekt?.name ?? "Kontrolle"}

{positionen.length > 0 && (
{positionen.filter((p) => p.status === "gespeichert").length} von {positionen.length} Positionen bestätigt
p.status === "gespeichert").length / positionen.length) * 100 )}%`, }} />
)} {!online && (
Kein Netz – Eingaben werden lokal gespeichert und automatisch übertragen, sobald wieder Verbindung besteht.
)} {fachGruppen.map(([fach, gruppenPositionen]) => (
{!nurOhneFach &&

{fach}

}
    {gruppenPositionen.map((zustand) => (
  • {nachfuellDialog?.materialId === zustand.position.material_id && ( jetztNachfuellen(nachfuellDialog.fehlbestandId, menge)} onSchliessen={nachfuellDialogSchliessen} /> )}
  • ))}
))} {abschlussFehler &&
{abschlussFehler}
}
); }