// 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[]; } interface HandleSaveParams { ids: string[]; isolationsgrenzwerte: number[]; verzoegerung: number[]; untereSchleifenGrenzwerte: number[]; obereSchleifenGrenzwerte: number[]; schleifenintervall: number[]; speicherintervall: number[]; originalValues: OriginalValues; slot: number; dispatch: (action: any) => void; onModulNameChange: (id: string) => void; 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, isolationsgrenzwerte, verzoegerung, untereSchleifenGrenzwerte, obereSchleifenGrenzwerte, schleifenintervall, speicherintervall, originalValues, slot, dispatch, onModulNameChange, onClose, }: HandleSaveParams): Promise => { const changesForFile: Record = {}; 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) { for (const [key, value] of Object.entries(changesForFile)) { const params = new URLSearchParams({ key: `win_kue${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; } } alert("✅ Daten erfolgreich gespeichert!"); } 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], }) ); } else { alert("ℹ️ Keine Änderungen vorgenommen."); } onClose(); }; export default handleSave;