"use client"; // components/modales/KueModal.jsx import ReactModal from "react-modal"; import { useState, useEffect } from "react"; import "bootstrap-icons/font/bootstrap-icons.css"; // Import Bootstrap Icons function KueModal({ showModal, onClose, slot, onModulNameChange }) { const [ids, setIds] = useState(Array(32).fill("---")); // IDs für jedes Modul const [bezeichnungen, setBezeichnungen] = useState(Array(32).fill("---")); const [isolationsgrenzwerte, setIsolationsgrenzwerte] = useState( Array(32).fill(10.0) ); // Default 10.0 MOhm const [verzoegerung, setVerzoegerung] = useState(Array(32).fill(1.0)); // Default Verzögerung 1 Sekunde const [untereSchleifenGrenzwerte, setUntereSchleifenGrenzwerte] = useState( Array(32).fill(0.1) ); // kOhm const [obereSchleifenGrenzwerte, setObereSchleifenGrenzwerte] = useState( Array(32).fill(1.0) ); // kOhm const [schleifenintervall, setSchleifenintervall] = useState( Array(32).fill(24) ); // Default 24 Stunden // Originalwerte speichern const [originalValues, setOriginalValues] = useState({}); useEffect(() => { const initialValues = { ids: [...ids], bezeichnungen: [...bezeichnungen], isolationsgrenzwerte: [...isolationsgrenzwerte], verzoegerung: [...verzoegerung], untereSchleifenGrenzwerte: [...untereSchleifenGrenzwerte], obereSchleifenGrenzwerte: [...obereSchleifenGrenzwerte], schleifenintervall: [...schleifenintervall], }; setOriginalValues(initialValues); }, [showModal]); useEffect(() => { // Initialisierung mit Werten aus dem globalen `window`-Objekt //ID statt Name if (window.kueID && Array.isArray(window.kueID)) { setIds(window.kueID.map((id) => id.trim() || "---")); } if (window.kueID && Array.isArray(window.kueID)) { setBezeichnungen(window.kueID.map((name) => name.trim() || "---")); } if (window.kueLimit1 && Array.isArray(window.kueLimit1)) { setIsolationsgrenzwerte(window.kueLimit1); } if (window.kueDelay1 && Array.isArray(window.kueDelay1)) { setVerzoegerung(window.kueDelay1); } if (window.kueLowerLimit && Array.isArray(window.kueLowerLimit)) { setUntereSchleifenGrenzwerte(window.kueLowerLimit); } if (window.kueUpperLimit && Array.isArray(window.kueUpperLimit)) { setObereSchleifenGrenzwerte(window.kueUpperLimit); } if (window.kueLoopInterval && Array.isArray(window.kueLoopInterval)) { setSchleifenintervall(window.kueLoopInterval); } }, []); // Funktionen zur Änderung der Werte const handleChange = (setter, e, slot) => { const value = e.target.value; setter((prev) => { const updated = [...prev]; updated[slot] = value; return updated; }); }; const handleSave = () => { // Validierung: Der obere Grenzwert darf nicht kleiner als der untere sein if (obereSchleifenGrenzwerte[slot] < untereSchleifenGrenzwerte[slot]) { alert( `Der obere Schleifengrenzwert (${obereSchleifenGrenzwerte[slot]} kOhm) darf nicht kleiner als der untere Grenzwert (${untereSchleifenGrenzwerte[slot]} kOhm) sein!` ); return; // Speichern verhindern } const changes = {}; // Vergleich mit den Originalwerten, um Änderungen zu erkennen if (ids[slot] !== originalValues.ids[slot]) { changes.KID = ids[slot]; } if (bezeichnungen[slot] !== originalValues.bezeichnungen[slot]) { changes.KIA = bezeichnungen[slot]; } if ( isolationsgrenzwerte[slot] !== originalValues.isolationsgrenzwerte[slot] ) { changes.KL_ = isolationsgrenzwerte[slot]; } if (verzoegerung[slot] !== originalValues.verzoegerung[slot]) { changes.KD_ = verzoegerung[slot]; } if ( untereSchleifenGrenzwerte[slot] !== originalValues.untereSchleifenGrenzwerte[slot] ) { changes.KR_ = untereSchleifenGrenzwerte[slot]; } if ( obereSchleifenGrenzwerte[slot] !== originalValues.obereSchleifenGrenzwerte[slot] ) { changes.KRO_ = obereSchleifenGrenzwerte[slot]; } if (schleifenintervall[slot] !== originalValues.schleifenintervall[slot]) { changes.KRI = schleifenintervall[slot]; } // Falls Änderungen vorhanden sind, die fetch-Requests auslösen if (Object.keys(changes).length > 0) { let url = `/cpl?/CPL/SERVICE/kueDetail.HTML&slot=${slot}`; Object.keys(changes).forEach((paramKey) => { url += `&${paramKey}${slot}=${encodeURIComponent(changes[paramKey])}`; }); fetch(url, { method: "GET" }) .then((response) => { if (response.ok) { alert("Daten erfolgreich gespeichert!"); onModulNameChange(ids[slot]); // Weitergabe der Änderung } else { alert("Fehler beim Speichern der Daten!"); } }) .catch((error) => { console.error("Fehler:", error); alert("Fehler beim Senden der Daten!"); }); } else { alert("Keine Änderungen vorgenommen."); } // Schließe das Modal nach dem Speichern onClose(); }; const handleDisplayEinschalten = () => { const url = `/CPL?/CPL/Service/kueDetail.HTML&KSD${slot}=1`; fetch(url, { method: "GET" }) .then((response) => { if (response.ok) { alert(`Display für Slot ${slot + 1} erfolgreich eingeschaltet!`); } else { alert("Fehler beim Einschalten des Displays!"); } }) .catch((error) => { console.error("Fehler:", error); alert("Fehler beim Einschalten des Displays!"); }); }; return ( {/* Modal Header */}

KUE Einstellung - Slot {slot + 1}

{/* ID und Modulname anzeigen */}
{/*
handleChange(setIds, e, slot)} />
*/}
handleChange(setIds, e, slot)} />
{/* Modal Body */}

Isolationsmessung

Grenzwert (MOhm) Verzögerung (sek)
handleChange(setIsolationsgrenzwerte, e, slot) } /> handleChange(setVerzoegerung, e, slot)} />

Schleifenmessung

Unterer Grenzwert (kOhm) Oberer Grenzwert (kOhm) Schleifenintervall (h)
handleChange(setUntereSchleifenGrenzwerte, e, slot) } /> handleChange(setObereSchleifenGrenzwerte, e, slot) } /> handleChange(setSchleifenintervall, e, slot)} />
{/* Display Einschalten Button */}
); } export default KueModal;