"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) { const nameEncoded = encodeURIComponent(label.trim()); const nameUrl = `/CPL?digitalOutputs.html&DAN0${selectedOutput.id}=${nameEncoded}`; const statusUrl = `/CPL?digitalOutputs.html&DAS0${selectedOutput.id}=${ status ? 1 : 0 }`; try { await fetch(nameUrl, { method: "GET" }); await new Promise((res) => setTimeout(res, 300)); await fetch(statusUrl, { method: "GET" }); closeOutputModal(); // Seite bleibt erhalten } catch (err) { console.error("❌ Fehler bei fetch:", err); setErrorMsg("❌ Fehler beim Speichern."); } } 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}
}