fix: Vergleich und Speicherung von Änderungen im KUE-Modul korrigiert
- Originalwerte werden jetzt direkt aus window.win_kueXYZ geladen - Vergleiche in handleSave.ts angepasst für stabile Zahl/String-Auswertung - Fehlerhafte Meldung „Keine Änderungen vorgenommen“ behoben - Nur geänderte Werte werden per GET-API gesendet
This commit is contained in:
@@ -3,7 +3,6 @@ import { setKueData } from "../../../../../redux/slices/kueDataSlice";
|
||||
|
||||
export interface OriginalValues {
|
||||
kueID: string[];
|
||||
kueBezeichnungen: string[];
|
||||
isolationsgrenzwerte: number[];
|
||||
verzoegerung: number[];
|
||||
untereSchleifenGrenzwerte: number[];
|
||||
@@ -13,7 +12,6 @@ export interface OriginalValues {
|
||||
|
||||
interface HandleSaveParams {
|
||||
ids: string[];
|
||||
bezeichnungen: string[];
|
||||
isolationsgrenzwerte: number[];
|
||||
verzoegerung: number[];
|
||||
untereSchleifenGrenzwerte: number[];
|
||||
@@ -26,9 +24,17 @@ interface HandleSaveParams {
|
||||
onClose: () => void;
|
||||
}
|
||||
|
||||
const isDifferent = (a: any, b: any): boolean => {
|
||||
const aNum = Number(a);
|
||||
const bNum = Number(b);
|
||||
if (!isNaN(aNum) && !isNaN(bNum)) {
|
||||
return Math.abs(aNum - bNum) > 0.0001;
|
||||
}
|
||||
return String(a).trim() !== String(b).trim();
|
||||
};
|
||||
|
||||
const handleSave = async ({
|
||||
ids,
|
||||
bezeichnungen,
|
||||
isolationsgrenzwerte,
|
||||
verzoegerung,
|
||||
untereSchleifenGrenzwerte,
|
||||
@@ -40,88 +46,73 @@ const handleSave = async ({
|
||||
onModulNameChange,
|
||||
onClose,
|
||||
}: HandleSaveParams): Promise<void> => {
|
||||
const changes: Partial<{
|
||||
KID: string;
|
||||
KIA: string;
|
||||
KL_: number;
|
||||
KD_: number;
|
||||
KR_: number;
|
||||
KRO_: number;
|
||||
KRI: number;
|
||||
}> = {};
|
||||
const changesForFile: Record<string, any> = {};
|
||||
|
||||
if (ids[slot] !== originalValues.kueID[slot]) {
|
||||
changes.KID = ids[slot];
|
||||
}
|
||||
if (bezeichnungen[slot] !== originalValues.kueBezeichnungen[slot]) {
|
||||
changes.KIA = bezeichnungen[slot];
|
||||
if (isDifferent(ids[slot], originalValues.kueID[slot])) {
|
||||
changesForFile.win_kueID = ids[slot];
|
||||
}
|
||||
if (
|
||||
isolationsgrenzwerte[slot] !== originalValues.isolationsgrenzwerte[slot]
|
||||
isDifferent(
|
||||
isolationsgrenzwerte[slot],
|
||||
originalValues.isolationsgrenzwerte[slot]
|
||||
)
|
||||
) {
|
||||
changes.KL_ = isolationsgrenzwerte[slot];
|
||||
changesForFile.win_kueLimit1 = isolationsgrenzwerte[slot];
|
||||
}
|
||||
if (verzoegerung[slot] !== originalValues.verzoegerung[slot]) {
|
||||
changes.KD_ = verzoegerung[slot];
|
||||
if (isDifferent(verzoegerung[slot], originalValues.verzoegerung[slot])) {
|
||||
changesForFile.win_kueDelay1 = verzoegerung[slot];
|
||||
}
|
||||
if (
|
||||
untereSchleifenGrenzwerte[slot] !==
|
||||
originalValues.untereSchleifenGrenzwerte[slot]
|
||||
isDifferent(
|
||||
untereSchleifenGrenzwerte[slot],
|
||||
originalValues.untereSchleifenGrenzwerte[slot]
|
||||
)
|
||||
) {
|
||||
changes.KR_ = untereSchleifenGrenzwerte[slot];
|
||||
changesForFile.win_kueLimit2Low = untereSchleifenGrenzwerte[slot];
|
||||
}
|
||||
if (
|
||||
obereSchleifenGrenzwerte[slot] !==
|
||||
originalValues.obereSchleifenGrenzwerte[slot]
|
||||
isDifferent(
|
||||
obereSchleifenGrenzwerte[slot],
|
||||
originalValues.obereSchleifenGrenzwerte[slot]
|
||||
)
|
||||
) {
|
||||
changes.KRO_ = obereSchleifenGrenzwerte[slot];
|
||||
changesForFile.win_kueLimit2High = obereSchleifenGrenzwerte[slot];
|
||||
}
|
||||
if (schleifenintervall[slot] !== originalValues.schleifenintervall[slot]) {
|
||||
changes.KRI = schleifenintervall[slot];
|
||||
if (
|
||||
isDifferent(
|
||||
schleifenintervall[slot],
|
||||
originalValues.schleifenintervall[slot]
|
||||
)
|
||||
) {
|
||||
changesForFile.win_kueLoopInterval = schleifenintervall[slot];
|
||||
}
|
||||
|
||||
if (Object.keys(changes).length > 0) {
|
||||
if (Object.keys(changesForFile).length > 0) {
|
||||
const isDev = window.location.hostname === "localhost";
|
||||
|
||||
if (isDev) {
|
||||
await fetch("/api/cpl/updateKueDataAPIHandler", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({
|
||||
slot,
|
||||
changes: {
|
||||
win_kueID: ids[slot],
|
||||
win_kueLimit1: isolationsgrenzwerte[slot],
|
||||
win_kueDelay1: verzoegerung[slot],
|
||||
win_kueLimit2Low: untereSchleifenGrenzwerte[slot],
|
||||
win_kueLimit2High: obereSchleifenGrenzwerte[slot],
|
||||
win_kueLoopInterval: schleifenintervall[slot],
|
||||
},
|
||||
}),
|
||||
});
|
||||
} else {
|
||||
let url = `/cpl?/kabelueberwachung.html&slot=${slot}`;
|
||||
Object.entries(changes).forEach(([paramKey, paramValue]) => {
|
||||
if (paramValue !== undefined) {
|
||||
url += `&${paramKey}${slot}=${encodeURIComponent(paramValue)}`;
|
||||
for (const [key, value] of Object.entries(changesForFile)) {
|
||||
const params = new URLSearchParams({
|
||||
key,
|
||||
value: String(value),
|
||||
slot: String(slot),
|
||||
});
|
||||
const response = await fetch(
|
||||
`/api/cpl/updateKueDataAPIHandler?${params.toString()}`
|
||||
);
|
||||
if (!response.ok) {
|
||||
alert(`❌ Fehler beim Schreiben der Datei (${key})`);
|
||||
return;
|
||||
}
|
||||
});
|
||||
|
||||
const response = await fetch(url, { method: "GET" });
|
||||
|
||||
if (!response.ok) {
|
||||
alert("Fehler beim Speichern der Daten!");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
alert("Daten erfolgreich gespeichert!");
|
||||
alert("✅ Daten erfolgreich gespeichert!");
|
||||
onModulNameChange(ids[slot]);
|
||||
|
||||
dispatch(
|
||||
setKueData({
|
||||
kueID: [...ids],
|
||||
kueBezeichnungen: [...bezeichnungen],
|
||||
isolationsgrenzwerte: [...isolationsgrenzwerte],
|
||||
verzoegerung: [...verzoegerung],
|
||||
untereSchleifenGrenzwerte: [...untereSchleifenGrenzwerte],
|
||||
@@ -130,7 +121,7 @@ const handleSave = async ({
|
||||
})
|
||||
);
|
||||
} else {
|
||||
alert("Keine Änderungen vorgenommen.");
|
||||
alert("ℹ️ Keine Änderungen vorgenommen.");
|
||||
}
|
||||
|
||||
onClose();
|
||||
|
||||
Reference in New Issue
Block a user