diff --git a/config/webVersion.ts b/config/webVersion.ts index 8a45321..c69fba8 100644 --- a/config/webVersion.ts +++ b/config/webVersion.ts @@ -6,5 +6,5 @@ 2: Patch oder Hotfix (Bugfixes oder kleine Änderungen). */ -const webVersion = "1.6.54"; +const webVersion = "1.6.55"; export default webVersion; diff --git a/hooks/useLoadDigitalOutputs.ts b/hooks/useLoadDigitalOutputs.ts deleted file mode 100644 index 037eb02..0000000 --- a/hooks/useLoadDigitalOutputs.ts +++ /dev/null @@ -1,17 +0,0 @@ -// hokks/useLoadDigitalOutputs.ts -import { useEffect, useState } from "react"; - -export function useLoadDigitalOutputs() { - const [digitalOutputs, setDigitalOutputs] = useState([]); - - useEffect(() => { - fetch("/CPLmockData/digitaleausgaengeMockData.json") - .then((response) => response.json()) - .then((data) => setDigitalOutputs(data)) - .catch((error) => - console.error("Fehler beim Laden der digitalen Ausgänge:", error) - ); - }, []); - - return { digitalOutputs, setDigitalOutputs }; -} diff --git a/pages/einausgaenge.tsx b/pages/einausgaenge.tsx index 2ceed28..a3f65d3 100644 --- a/pages/einausgaenge.tsx +++ b/pages/einausgaenge.tsx @@ -1,30 +1,63 @@ -"use client"; // pages/einausgaenge.tsx -import React, { useState } from "react"; +"use client"; +import React, { useState, useEffect } from "react"; import DigitalOutputs from "../components/main/einausgaenge/DigitalOutputs"; import DigitalInputs from "../components/main/einausgaenge/DigitalInputs"; -import { useDigitalInputData } from "../hooks/einausgaenge/useDigitalInputData"; import InputModal from "../components/main/einausgaenge/modals/InputModal"; import OutputModal from "../components/main/einausgaenge/modals/OutputModal"; +import { useDigitalInputData } from "../hooks/einausgaenge/useDigitalInputData"; function EinAusgaenge() { - // Digitale Ausgänge (Hooks müssen immer initialisiert werden) - const [digitalOutputs, setDigitalOutputs] = useState([ - { id: 1, description: "Ausgang1", toggle: true }, - { id: 2, description: "Ausgang2", toggle: false }, - { id: 3, description: "Ausgang3", toggle: true }, - { id: 4, description: "Ausgang4", toggle: false }, - ]); + // Zustand für digitale Ausgänge + const [digitalOutputs, setDigitalOutputs] = useState([]); + const [isLoadingOutputs, setIsLoadingOutputs] = useState(true); - // Modal-Zustände + // Zustand für Modale const [selectedInput, setSelectedInput] = useState(null); const [selectedOutput, setSelectedOutput] = useState(null); const [isInputModalOpen, setIsInputModalOpen] = useState(false); const [isOutputModalOpen, setIsOutputModalOpen] = useState(false); - // Daten laden - const { mockData, isLoading } = useDigitalInputData(); + // Laden der digitalen Eingänge + const { mockData, isLoading: isLoadingInputs } = useDigitalInputData(); - // Funktionen zum Umschalten von Ausgängen + // Laden der digitalen Ausgänge + useEffect(() => { + const script = document.createElement("script"); + script.src = "/CPLmockData/SERVICE/da.js"; + script.async = true; + + script.onload = () => { + const da = window.win_da_state; + const bezeichnungen = window.win_da_bezeichnung; + console.log("da : ", da); + console.log("bezeichnungen : ", bezeichnungen); + + if (da && bezeichnungen) { + const outputs = da.map((status, index) => ({ + id: index + 1, + description: bezeichnungen[index] || `Ausgang${index + 1}`, + toggle: status === 1, + })); + setDigitalOutputs(outputs); + } else { + console.error("Daten konnten nicht geladen werden."); + } + setIsLoadingOutputs(false); + }; + + script.onerror = () => { + console.error("Fehler beim Laden der da.js-Datei."); + setIsLoadingOutputs(false); + }; + + document.body.appendChild(script); + + return () => { + document.body.removeChild(script); + }; + }, []); + + // Funktion zum Umschalten des Ausgangs const toggleSwitch = (id) => { setDigitalOutputs((prevOutputs) => prevOutputs.map((output) => @@ -33,21 +66,22 @@ function EinAusgaenge() { ); }; - // Modal-Funktionen für Eingänge + // Funktionen zum Öffnen und Schließen der Modale const openInputModal = (input) => { setSelectedInput(input); setIsInputModalOpen(true); }; + const closeInputModal = () => { setSelectedInput(null); setIsInputModalOpen(false); }; - // Modal-Funktionen für Ausgänge const openOutputModal = (output) => { setSelectedOutput(output); setIsOutputModalOpen(true); }; + const closeOutputModal = () => { setSelectedOutput(null); setIsOutputModalOpen(false); @@ -75,26 +109,27 @@ function EinAusgaenge() { openInputModal={openInputModal} /> {/* Digitale Ausgänge */} - + {!isLoadingOutputs && ( + + )} {/* Eingangs-Modal */} - + {isInputModalOpen && selectedInput && ( + + )} {/* Ausgangs-Modal */} - + {isOutputModalOpen && selectedOutput && ( + + )} ); } diff --git a/public/CPLmockData/SERVICE/da.js b/public/CPLmockData/SERVICE/da.js new file mode 100644 index 0000000..33075d3 --- /dev/null +++ b/public/CPLmockData/SERVICE/da.js @@ -0,0 +1,3 @@ +// public/CPLmockData/SERVICE/da.js +win_da_state = [1, 0, 1, 0]; +win_da_bezeichnung = ["Ausgang1", "Ausgang2", "Ausgang3", "Ausgang4"]; diff --git a/utils/loadWindowVariables.ts b/utils/loadWindowVariables.ts index 056aff6..f3a5df8 100644 --- a/utils/loadWindowVariables.ts +++ b/utils/loadWindowVariables.ts @@ -57,6 +57,8 @@ export async function loadWindowVariables(): Promise { "win_opcUaZustand", "win_opcUaActiveClientCount", "win_opcUaNodesetName", + "win_da_state", + "win_da_bezeichnung", ]; const loadScript = (src: string): Promise => { @@ -75,6 +77,7 @@ export async function loadWindowVariables(): Promise { }; const scripts: string[] = [ + "da.js", "de.js", "ae.js", "kueData.js",