KueModal.jsx lesen von Redux store

This commit is contained in:
ISA
2024-11-05 09:33:23 +01:00
parent ac1b32f353
commit 157267b799

View File

@@ -1,64 +1,70 @@
"use client"; // components/modales/KueModal.jsx "use client"; // components/modales/KueModal.jsx
import ReactModal from "react-modal"; import ReactModal from "react-modal";
import { useState, useEffect } from "react"; import { useState, useEffect } from "react";
import { useSelector } from "react-redux";
import "bootstrap-icons/font/bootstrap-icons.css"; // Import Bootstrap Icons import "bootstrap-icons/font/bootstrap-icons.css"; // Import Bootstrap Icons
function KueModal({ showModal, onClose, slot, onModulNameChange }) { function KueModal({ showModal, onClose, slot, onModulNameChange }) {
const [ids, setIds] = useState(Array(32).fill("---")); // IDs für jedes Modul const [ids, setIds] = useState(Array(32).fill("---"));
const [bezeichnungen, setBezeichnungen] = useState(Array(32).fill("---")); const [bezeichnungen, setBezeichnungen] = useState(Array(32).fill("---"));
const [isolationsgrenzwerte, setIsolationsgrenzwerte] = useState( const [isolationsgrenzwerte, setIsolationsgrenzwerte] = useState(
Array(32).fill(10.0) Array(32).fill(10.0)
); // Default 10.0 MOhm );
const [verzoegerung, setVerzoegerung] = useState(Array(32).fill(1.0)); // Default Verzögerung 1 Sekunde const [verzoegerung, setVerzoegerung] = useState(Array(32).fill(1.0));
const [untereSchleifenGrenzwerte, setUntereSchleifenGrenzwerte] = useState( const [untereSchleifenGrenzwerte, setUntereSchleifenGrenzwerte] = useState(
Array(32).fill(0.1) Array(32).fill(0.1)
); // kOhm );
const [obereSchleifenGrenzwerte, setObereSchleifenGrenzwerte] = useState( const [obereSchleifenGrenzwerte, setObereSchleifenGrenzwerte] = useState(
Array(32).fill(1.0) Array(32).fill(1.0)
); // kOhm );
const [schleifenintervall, setSchleifenintervall] = useState( const [schleifenintervall, setSchleifenintervall] = useState(
Array(32).fill(24) 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]);
const [originalValues, setOriginalValues] = useState({});
// Werte aus dem Redux-Store abrufen
const {
kueID,
kueLimit1,
kueDelay1,
kueLimit2Low,
kueLimit2High,
kueLoopInterval,
} = useSelector((state) => state.variables);
// Initiale Werte festlegen, wenn das Modal geöffnet wird
useEffect(() => { useEffect(() => {
// Initialisierung mit Werten aus dem globalen `window`-Objekt if (showModal) {
//ID statt Name setIds(kueID ? kueID.map((id) => id.trim() || "---") : ids);
if (window.kueID && Array.isArray(window.kueID)) { setBezeichnungen(
setIds(window.kueID.map((id) => id.trim() || "---")); kueID ? kueID.map((name) => name.trim() || "---") : bezeichnungen
);
setIsolationsgrenzwerte(kueLimit1 || isolationsgrenzwerte);
setVerzoegerung(kueDelay1 || verzoegerung);
setUntereSchleifenGrenzwerte(kueLimit2Low || untereSchleifenGrenzwerte);
setObereSchleifenGrenzwerte(kueLimit2High || obereSchleifenGrenzwerte);
setSchleifenintervall(kueLoopInterval || schleifenintervall);
setOriginalValues({
ids: [...ids],
bezeichnungen: [...bezeichnungen],
isolationsgrenzwerte: [...isolationsgrenzwerte],
verzoegerung: [...verzoegerung],
untereSchleifenGrenzwerte: [...untereSchleifenGrenzwerte],
obereSchleifenGrenzwerte: [...obereSchleifenGrenzwerte],
schleifenintervall: [...schleifenintervall],
});
} }
if (window.kueID && Array.isArray(window.kueID)) { }, [
setBezeichnungen(window.kueID.map((name) => name.trim() || "---")); showModal,
} kueID,
if (window.kueLimit1 && Array.isArray(window.kueLimit1)) { kueLimit1,
setIsolationsgrenzwerte(window.kueLimit1); kueDelay1,
} kueLimit2Low,
if (window.kueDelay1 && Array.isArray(window.kueDelay1)) { kueLimit2High,
setVerzoegerung(window.kueDelay1); kueLoopInterval,
} ]);
if (window.kueLimit2Low && Array.isArray(window.kueLimit2Low)) {
setUntereSchleifenGrenzwerte(window.kueLimit2Low);
}
if (window.kueLimit2High && Array.isArray(window.kueLimit2High)) {
setObereSchleifenGrenzwerte(window.kueLimit2High);
}
if (window.kueLoopInterval && Array.isArray(window.kueLoopInterval)) {
setSchleifenintervall(window.kueLoopInterval);
}
}, []);
// Funktionen zur Änderung der Werte // Funktionen zur Änderung der Werte
const handleChange = (setter, e, slot) => { const handleChange = (setter, e, slot) => {
@@ -71,17 +77,9 @@ function KueModal({ showModal, onClose, slot, onModulNameChange }) {
}; };
const handleSave = () => { const handleSave = () => {
// Validierung: Der obere Grenzwert darf nicht kleiner als der untere sein
/* if (obereSchleifenGrenzwerte[slot] < untereSchleifenGrenzwerte[slot]) { wird nicht mehr benötigt
alert(
`Der obere Schleifengrenzwert (${obereSchleifenGrenzwerte[slot]} kOhm) darf nicht kleiner als der untere Grenzwert (${untereSchleifenGrenzwerte[slot]} kOhm) sein!`
);
return; // Speichern verhindern
}
*/
const changes = {}; const changes = {};
// Vergleich mit den Originalwerten, um Änderungen zu erkennen // Überprüfen, ob Änderungen gegenüber den Originalwerten vorliegen
if (ids[slot] !== originalValues.ids[slot]) { if (ids[slot] !== originalValues.ids[slot]) {
changes.KID = ids[slot]; changes.KID = ids[slot];
} }
@@ -112,10 +110,8 @@ function KueModal({ showModal, onClose, slot, onModulNameChange }) {
changes.KRI = schleifenintervall[slot]; changes.KRI = schleifenintervall[slot];
} }
// Falls Änderungen vorhanden sind, die fetch-Requests auslösen
if (Object.keys(changes).length > 0) { if (Object.keys(changes).length > 0) {
let url = `/cpl?/CPL/SERVICE/kueDetail.HTML&slot=${slot}`; let url = `/cpl?/CPL/SERVICE/kueDetail.HTML&slot=${slot}`;
Object.keys(changes).forEach((paramKey) => { Object.keys(changes).forEach((paramKey) => {
url += `&${paramKey}${slot}=${encodeURIComponent(changes[paramKey])}`; url += `&${paramKey}${slot}=${encodeURIComponent(changes[paramKey])}`;
}); });
@@ -124,7 +120,7 @@ function KueModal({ showModal, onClose, slot, onModulNameChange }) {
.then((response) => { .then((response) => {
if (response.ok) { if (response.ok) {
alert("Daten erfolgreich gespeichert!"); alert("Daten erfolgreich gespeichert!");
onModulNameChange(ids[slot]); // Weitergabe der Änderung onModulNameChange(ids[slot]);
} else { } else {
alert("Fehler beim Speichern der Daten!"); alert("Fehler beim Speichern der Daten!");
} }
@@ -137,7 +133,6 @@ function KueModal({ showModal, onClose, slot, onModulNameChange }) {
alert("Keine Änderungen vorgenommen."); alert("Keine Änderungen vorgenommen.");
} }
// Schließe das Modal nach dem Speichern
onClose(); onClose();
}; };
@@ -183,7 +178,6 @@ function KueModal({ showModal, onClose, slot, onModulNameChange }) {
}, },
}} }}
> >
{/* Modal Header */}
<div className="flex items-center justify-between bg-littwin-blue text-white p-1 rounded-t-lg"> <div className="flex items-center justify-between bg-littwin-blue text-white p-1 rounded-t-lg">
<h2 className="text-sm font-bold">KUE Einstellung - Slot {slot + 1}</h2> <h2 className="text-sm font-bold">KUE Einstellung - Slot {slot + 1}</h2>
<button <button
@@ -202,20 +196,7 @@ function KueModal({ showModal, onClose, slot, onModulNameChange }) {
</button> </button>
</div> </div>
{/* ID und Modulname anzeigen */}
<div className="p-2 mb-4 text-black"> <div className="p-2 mb-4 text-black">
{/*
<div className="mb-2">
<label className="font-bold">ID:</label>
<input
type="text"
className="border rounded p-1 w-full text-sm"
value={ids[slot]}
onChange={(e) => handleChange(setIds, e, slot)}
/>
</div>
*/}
<div className="mb-2 "> <div className="mb-2 ">
<label className="font-bold ">Kabelbezeichnung:</label> <label className="font-bold ">Kabelbezeichnung:</label>
<input <input
@@ -227,7 +208,6 @@ function KueModal({ showModal, onClose, slot, onModulNameChange }) {
</div> </div>
</div> </div>
{/* Modal Body */}
<div className="p-2 text-black"> <div className="p-2 text-black">
<h3 className="font-bold text-center mb-4">Isolationsmessung</h3> <h3 className="font-bold text-center mb-4">Isolationsmessung</h3>
<table className="w-full text-left border-collapse mb-4"> <table className="w-full text-left border-collapse mb-4">
@@ -248,7 +228,7 @@ function KueModal({ showModal, onClose, slot, onModulNameChange }) {
type="number" type="number"
className="w-[6rem] border rounded p-1 text-sm" className="w-[6rem] border rounded p-1 text-sm"
value={isolationsgrenzwerte[slot]} value={isolationsgrenzwerte[slot]}
step="0.1" // Schrittgröße für Nachkommastellen step="0.1"
onChange={(e) => onChange={(e) =>
handleChange(setIsolationsgrenzwerte, e, slot) handleChange(setIsolationsgrenzwerte, e, slot)
} }
@@ -259,7 +239,7 @@ function KueModal({ showModal, onClose, slot, onModulNameChange }) {
type="number" type="number"
className="w-[6rem] border rounded p-1 text-sm" className="w-[6rem] border rounded p-1 text-sm"
value={verzoegerung[slot]} value={verzoegerung[slot]}
step="0.1" // Schrittgröße für Nachkommastellen step="0.1"
onChange={(e) => handleChange(setVerzoegerung, e, slot)} onChange={(e) => handleChange(setVerzoegerung, e, slot)}
/> />
</td> </td>
@@ -274,7 +254,6 @@ function KueModal({ showModal, onClose, slot, onModulNameChange }) {
<th className="p-2 border text-sm text-center"> <th className="p-2 border text-sm text-center">
Grenzwert (kOhm) Grenzwert (kOhm)
</th> </th>
<th className="p-2 border text-sm text-center"> <th className="p-2 border text-sm text-center">
Schleifenintervall (h) Schleifenintervall (h)
</th> </th>
@@ -287,19 +266,18 @@ function KueModal({ showModal, onClose, slot, onModulNameChange }) {
type="number" type="number"
className="w-[6rem] border rounded p-1 text-sm" className="w-[6rem] border rounded p-1 text-sm"
value={untereSchleifenGrenzwerte[slot]} value={untereSchleifenGrenzwerte[slot]}
step="0.1" // Schrittgröße für Nachkommastellen step="0.1"
onChange={(e) => onChange={(e) =>
handleChange(setUntereSchleifenGrenzwerte, e, slot) handleChange(setUntereSchleifenGrenzwerte, e, slot)
} }
/> />
</td> </td>
<td className="p-2 border text-center"> <td className="p-2 border text-center">
<input <input
type="number" type="number"
className="w-[6rem] border rounded p-1 text-sm" className="w-[6rem] border rounded p-1 text-sm"
value={schleifenintervall[slot]} value={schleifenintervall[slot]}
step="1" // Schrittgröße für ganze Stunden (kein Nachkomma) step="1"
onChange={(e) => handleChange(setSchleifenintervall, e, slot)} onChange={(e) => handleChange(setSchleifenintervall, e, slot)}
/> />
</td> </td>
@@ -308,7 +286,6 @@ function KueModal({ showModal, onClose, slot, onModulNameChange }) {
</table> </table>
</div> </div>
{/* Display Einschalten Button */}
<div className="flex justify-end bg-gray-100 p-4 rounded-b-lg"> <div className="flex justify-end bg-gray-100 p-4 rounded-b-lg">
<button <button
onClick={handleDisplayEinschalten} onClick={handleDisplayEinschalten}