"use client"; // components/main/kabelueberwachung/kue705FO/modals/KueEinstellung.tsx import { useState } from "react"; import { useDispatch, useSelector } from "react-redux"; import type { RootState, AppDispatch } from "@/redux/store"; import handleSave from "../handlers/handleSave"; import handleDisplayEinschalten from "@/components/main/kabelueberwachung/kue705FO/handlers/handleDisplayEinschalten"; import firmwareUpdate from "../handlers/firmwareUpdate"; import ProgressModal from "@/components/main/settingsPageComponents/modals/ProgressModal"; import { toast } from "react-toastify"; import ConfirmModal from "@/components/common/ConfirmModal"; import { openConfirmModal, closeConfirmModal, } from "@/redux/slices/confirmModalSlice"; import { startFirmwareUpdateThunk } from "@/redux/thunks/startFirmwareUpdateThunk"; import { Listbox } from "@headlessui/react"; interface Props { slot: number; showModal: boolean; onClose?: () => void; onModulNameChange?: (id: string) => void; } const memoryIntervalOptions = [ { value: 0, label: "Kein" }, { value: 1, label: "1 Minute" }, { value: 5, label: "5 Minuten" }, { value: 10, label: "10 Minuten" }, { value: 15, label: "15 Minuten" }, { value: 30, label: "30 Minuten" }, { value: 60, label: "60 Minuten" }, { value: 360, label: "6 Stunden" }, { value: 720, label: "12 Stunden" }, ]; export default function KueEinstellung({ slot, onClose = () => {}, onModulNameChange, }: Props) { const dispatch = useDispatch(); const { kueID, kueName, kueLimit1, kueDelay1, kueLimit2Low, kueLoopInterval, memoryInterval, } = useSelector((state: RootState) => state.kueDataSlice); const reduxAdmin = useSelector( (state: RootState) => state.authSlice.isAdminLoggedIn ); const [isAdminLoggedIn] = useState(() => reduxAdmin); const showConfirmModal = useSelector( (state: RootState) => state.confirmModal.open ); const isUpdating = useSelector( (state: RootState) => state.firmwareProgress.isUpdating ); const progress = useSelector( (state: RootState) => state.firmwareProgress.progress ); const [formData, setFormData] = useState(() => { if (typeof window !== "undefined") { const cache = window.__kueCache?.[`slot_${slot}`]; if (cache) return cache; } return { kueID: kueID[slot] || "", kueName: kueName[slot] || "", limit1: kueLimit1[slot]?.toString() ?? "", delay1: kueDelay1[slot]?.toString() ?? "", limit2Low: kueLimit2Low[slot]?.toString() ?? "", loopInterval: kueLoopInterval[slot]?.toString() ?? "", memoryInterval: memoryInterval[slot]?.toString() ?? "", }; }); const handleChange = (key: keyof typeof formData, value: string) => { const updated = { ...formData, [key]: value }; setFormData(updated); if (typeof window !== "undefined") { window.__kueCache = window.__kueCache || {}; window.__kueCache[`slot_${slot}`] = updated; } }; const handleSaveWrapper = async () => { const updatedKueName = [...kueName]; updatedKueName[slot] = formData.kueName; const updatedLimit1 = [...kueLimit1]; updatedLimit1[slot] = Number(formData.limit1); const updatedDelay1 = [...kueDelay1]; updatedDelay1[slot] = Number(formData.delay1); const updatedLimit2Low = [...kueLimit2Low]; updatedLimit2Low[slot] = Number(formData.limit2Low); const updatedLoopInterval = [...kueLoopInterval]; updatedLoopInterval[slot] = Number(formData.loopInterval); const updatedMemoryInterval = [...memoryInterval]; updatedMemoryInterval[slot] = Number(formData.memoryInterval); const newData = { kueID: kueID[slot], kueName: updatedKueName[slot], limit1: updatedLimit1[slot].toString(), delay1: updatedDelay1[slot].toString(), limit2Low: updatedLimit2Low[slot].toString(), loopInterval: updatedLoopInterval[slot].toString(), memoryInterval: updatedMemoryInterval[slot].toString(), }; setFormData(newData); if (typeof window !== "undefined") { window.__kueCache![`slot_${slot}`] = newData; } await handleSave({ slot, ids: kueID, kueName: updatedKueName, isolationsgrenzwerte: updatedLimit1, verzoegerung: updatedDelay1, untereSchleifenGrenzwerte: updatedLimit2Low, obereSchleifenGrenzwerte: updatedLimit2Low, schleifenintervall: updatedLoopInterval, speicherintervall: updatedMemoryInterval, originalValues: { kueID, kueName, isolationsgrenzwerte: kueLimit1, verzoegerung: kueDelay1, untereSchleifenGrenzwerte: kueLimit2Low, obereSchleifenGrenzwerte: kueLimit2Low, schleifenintervall: kueLoopInterval, speicherintervall: memoryInterval, }, dispatch, onModulNameChange: onModulNameChange ?? (() => {}), onClose, }); }; return (
{/* Kabelbezeichnung */}
{/* Kabelname */}
handleChange("kueName", e.target.value)} />
{/* Speicherintervall */}
handleChange("memoryInterval", value)} >
{memoryIntervalOptions.find( (opt) => String(opt.value) === formData.memoryInterval )?.label ?? "Speicherintervall wählen"} {memoryIntervalOptions.map((opt) => ( `px-4 py-1 cursor-pointer ${ selected ? "bg-littwin-blue text-white font-medium" : active ? "bg-gray-200" : "text-gray-900" }` } > {opt.label} ))}
{/* Isolationsmessung */}

Isolationsmessung

handleChange("limit1", e.target.value)} /> MOhm
handleChange("delay1", e.target.value)} /> Sekunden
{/* Schleifenmessung */}

Schleifenmessung

handleChange("limit2Low", e.target.value)} /> kOhm
handleChange("loopInterval", e.target.value)} /> Stunden
{isAdminLoggedIn && ( <> {/* Konfiguration sichern */} {/* Konfiguration zurücksichern */} )} {showConfirmModal && ( dispatch(closeConfirmModal())} onConfirm={async () => { dispatch(closeConfirmModal()); toast.info("Firmware-Update gestartet. Bitte warten..."); dispatch(startFirmwareUpdateThunk(slot)); // Start Redux-Prozess try { await firmwareUpdate(slot); } catch (err) { console.error("Firmware-Update-Fehler:", err); toast.error("❌ Fehler beim Firmwareupdate"); } }} /> )} {isUpdating && ( )} {" "}
); }