"use client"; // /components/main/digitalOutputs/DigitalOutputsModal.tsx import React, { useState, useEffect } from "react"; import { useSelector } from "react-redux"; import { RootState } from "@/redux/store"; import type { DigitalOutput } from "@/types/digitalOutput"; export default function DigitalOutputsModal({ selectedOutput, closeOutputModal, isOpen, }: { selectedOutput: DigitalOutput | null; closeOutputModal: () => void; isOpen: boolean; }) { const allOutputs = useSelector( (state: RootState) => state.digitalOutputsSlice.outputs ); const [label, setLabel] = useState(""); const [status, setStatus] = useState(false); const [isSaving, setIsSaving] = useState(false); const [errorMsg, setErrorMsg] = useState(""); // ✅ Zustand neu setzen, wenn Modal geöffnet oder anderer Ausgang ausgewählt wird useEffect(() => { if (isOpen && selectedOutput) { setLabel(selectedOutput.label || ""); setStatus(selectedOutput.status || false); setErrorMsg(""); } }, [isOpen, selectedOutput]); if (!isOpen || !selectedOutput) return null; const handleSave = async () => { setIsSaving(true); setErrorMsg(""); const updatedOutputs = allOutputs.map((output) => output.id === selectedOutput.id ? { ...output, label: label.trim(), status } : output ); const isCPL = process.env.NEXT_PUBLIC_NODE_ENV === "production"; try { if (isCPL) { // ✅ Name speichern (DANx=...) const nameEncoded = encodeURIComponent(label.trim()); const nameUrl = `/CPL?digitalOutputs.html&DAN0${selectedOutput.id}=${nameEncoded}`; // ✅ Status speichern (DASx=...) const statusUrl = `/CPL?digitalOutputs.html&DAS0${selectedOutput.id}=${ status ? 1 : 0 }`; // 🟢 Beide nacheinander senden (wichtig bei älteren CPL-Versionen) window.location.href = nameUrl; // Name zuerst (ggf. durch Refresh überschrieben) setTimeout(() => { window.location.href = statusUrl; }, 300); // kleine Verzögerung (optional) // 💡 Modal wird nicht automatisch geschlossen — da Seite neu lädt. } else { // 🧪 Lokaler Entwicklungsmodus const res = await fetch("/api/cpl/updateDigitalOutputsHandler", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ outputs: updatedOutputs }), }); if (!res.ok) { const err = await res.json(); setErrorMsg(err?.error || "Fehler beim Speichern."); } else { console.log( "✅ Status & Label gespeichert für Ausgang", selectedOutput.id ); closeOutputModal(); } } } catch (err) { console.error("Fehler beim Speichern:", err); setErrorMsg("❌ Fehler beim Speichern."); } finally { setIsSaving(false); } }; return (
{errorMsg}
}