Files
CPLv4.0/components/main/kabelueberwachung/kue705FO/handlers/handleSave.ts
ISA 7637606ffd feat(dev): API zum Schreiben von KUE-Mockdaten eingebunden – Entwicklung ohne CPL-Hardware möglich
- Endpunkt /api/cpl/updateKueSettingsDataAPIHandler erstellt
- Änderungen werden direkt in apiMockData/SERVICE/kabelueberwachungMockData.js geschrieben
- Strings werden korrekt in Anführungszeichen gespeichert
- Komma- und Formatierungsfehler im JS-Array beseitigt
- Entwicklungsumgebung kann KUE-Einstellungen ohne Embedded-System testen
2025-04-30 12:22:04 +02:00

189 lines
5.0 KiB
TypeScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// components/modales/kueModal/handlers/handleSave.ts
import { setKueData } from "../../../../../redux/slices/kueDataSlice";
export interface OriginalValues {
kueID: string[];
isolationsgrenzwerte: number[];
verzoegerung: number[];
untereSchleifenGrenzwerte: number[];
obereSchleifenGrenzwerte: number[];
schleifenintervall: number[];
speicherintervall: number[];
}
export interface HandleSaveParams {
ids: string[];
isolationsgrenzwerte: number[];
verzoegerung: number[];
untereSchleifenGrenzwerte: number[];
obereSchleifenGrenzwerte: number[];
schleifenintervall: number[];
speicherintervall: number[];
originalValues: {
kueID: string[];
isolationsgrenzwerte: number[];
verzoegerung: number[];
untereSchleifenGrenzwerte: number[];
obereSchleifenGrenzwerte: number[];
schleifenintervall: number[];
speicherintervall: number[];
};
slot: number;
dispatch: any;
onModulNameChange: (id: string) => void;
onClose: () => void;
onFormUpdate?: (updated: any) => void; // Added this property
}
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,
isolationsgrenzwerte,
verzoegerung,
untereSchleifenGrenzwerte,
obereSchleifenGrenzwerte,
schleifenintervall,
speicherintervall,
originalValues,
slot,
dispatch,
onModulNameChange,
onClose,
}: HandleSaveParams): Promise<void> => {
const changesForFile: Record<string, any> = {};
if (isDifferent(ids[slot], originalValues.kueID[slot])) {
changesForFile.KID = ids[slot];
}
if (
isDifferent(
isolationsgrenzwerte[slot],
originalValues.isolationsgrenzwerte[slot]
)
) {
changesForFile.KL_ = isolationsgrenzwerte[slot];
}
if (isDifferent(verzoegerung[slot], originalValues.verzoegerung[slot])) {
changesForFile.KD_ = verzoegerung[slot];
}
if (
isDifferent(
untereSchleifenGrenzwerte[slot],
originalValues.untereSchleifenGrenzwerte[slot]
)
) {
changesForFile.KR_ = untereSchleifenGrenzwerte[slot];
}
if (
isDifferent(
obereSchleifenGrenzwerte[slot],
originalValues.obereSchleifenGrenzwerte[slot]
)
) {
changesForFile.KRO_ = obereSchleifenGrenzwerte[slot];
}
if (
isDifferent(
schleifenintervall[slot],
originalValues.schleifenintervall[slot]
)
) {
changesForFile.KRI = schleifenintervall[slot];
}
if (
isDifferent(speicherintervall[slot], originalValues.speicherintervall[slot])
) {
changesForFile.KLO = speicherintervall[slot];
}
if (Object.keys(changesForFile).length > 0) {
const isDev = window.location.hostname === "localhost";
const isProd = !isDev;
if (isDev) {
const keyMap: Record<string, string> = {
KID: "win_kueID",
KL_: "win_kueLimit1",
KD_: "win_kueDelay1",
KR_: "win_kueLimit2Low",
KRO_: "win_kueLimit2High",
KRI: "win_kueLoopInterval",
KLO: "win_memoryInterval",
};
for (const [key, value] of Object.entries(changesForFile)) {
const mappedKey = keyMap[key] ?? key;
const params = new URLSearchParams({
key: mappedKey,
value: String(value),
slot: String(slot),
});
const response = await fetch(
`/api/cpl/updateKueSettingsDataAPIHandler?${params.toString()}`
);
if (!response.ok) {
console.error("DEV fetch error:", await response.text());
}
}
}
if (isProd) {
try {
for (const [key, value] of Object.entries(changesForFile)) {
const singleParam = `${key}${slot}=${encodeURIComponent(value)}`;
const url = `/CPL?/kabelueberwachung.html&${singleParam}`;
console.log("📡 Sende an CPL (CGI) →", url);
const response = await fetch(url);
if (!response.ok) {
alert(`❌ Fehler beim Senden an die CPL-Hardware: ${key}`);
return;
}
}
alert("✅ Alle Daten erfolgreich an die CPL-Hardware gesendet!");
} catch (error) {
console.error("❌ Netzwerkfehler beim CPL-Aufruf:", error);
alert("❌ Netzwerkfehler beim Senden an die CPL-Hardware");
return;
}
}
onModulNameChange(ids[slot]);
dispatch(
setKueData({
kueID: [...ids],
isolationsgrenzwerte: [...isolationsgrenzwerte],
verzoegerung: [...verzoegerung],
untereSchleifenGrenzwerte: [...untereSchleifenGrenzwerte],
obereSchleifenGrenzwerte: [...obereSchleifenGrenzwerte],
schleifenintervall: [...schleifenintervall],
memoryInterval: [...speicherintervall],
})
);
// 🚀 Modal erst schließen, wenn UI aktualisiert ist
setTimeout(() => {
onClose();
}, 0);
} else {
alert(" Keine Änderungen vorgenommen.");
}
onClose();
};
export default handleSave;