- DigitalOutputs.tsx auf Redux umgestellt, um Werte direkt aus dem Store zu lesen - toggleSwitch-Funktion angepasst, um den Status von digitalen Ausgängen in Redux zu aktualisieren - useDigitalOutputsData.ts nutzt nun Redux zum Speichern der `win_da_state` und `win_da_bezeichnung` Werte - Entfernen von Prop `digitalOutputs` in `DigitalOutputs.tsx`, da Redux nun als Datenquelle dient - Weboberfläche zeigt nun digitale Ausgänge korrekt an und Status kann geändert werden
72 lines
2.0 KiB
TypeScript
72 lines
2.0 KiB
TypeScript
"use client";
|
|
import { useEffect } from "react";
|
|
import { useDispatch, useSelector } from "react-redux";
|
|
import { RootState } from "../../redux/store";
|
|
import { setDigitalOutputs } from "../../redux/slices/digitalOutputsSlice";
|
|
|
|
// Typ für digitale Ausgänge
|
|
interface DigitalOutput {
|
|
id: number;
|
|
label: string;
|
|
status: boolean;
|
|
}
|
|
|
|
export function useDigitalOutputs() {
|
|
const dispatch = useDispatch();
|
|
const digitalOutputs = useSelector(
|
|
(state: RootState) => state.digitalOutputs?.outputs ?? []
|
|
);
|
|
const isLoading = digitalOutputs.length === 0;
|
|
|
|
useEffect(() => {
|
|
console.log("Lade da.js für digitale Ausgänge...");
|
|
|
|
const script = document.createElement("script");
|
|
script.src = "/CPLmockData/SERVICE/da.js";
|
|
script.async = true;
|
|
|
|
script.onload = () => {
|
|
console.log("Skript geladen. Überprüfe window-Variablen:");
|
|
console.log("win_da_state:", window.win_da_state);
|
|
console.log("win_da_bezeichnung:", window.win_da_bezeichnung);
|
|
|
|
const da = window.win_da_state;
|
|
const bezeichnungen = window.win_da_bezeichnung;
|
|
|
|
if (
|
|
Array.isArray(da) &&
|
|
Array.isArray(bezeichnungen) &&
|
|
da.length === bezeichnungen.length
|
|
) {
|
|
const outputs: DigitalOutput[] = da.map(
|
|
(status: number, index: number) => ({
|
|
id: index + 1,
|
|
label: bezeichnungen[index] || `Ausgang ${index + 1}`,
|
|
status: status === 1,
|
|
})
|
|
);
|
|
|
|
console.log("Dispatching setDigitalOutputs mit Werten:", outputs);
|
|
dispatch(setDigitalOutputs(outputs));
|
|
} else {
|
|
console.error("Digitale Ausgänge konnten nicht geladen werden.", {
|
|
da_state: da,
|
|
da_bezeichnung: bezeichnungen,
|
|
});
|
|
}
|
|
};
|
|
|
|
script.onerror = () => {
|
|
console.error("Fehler beim Laden der da.js-Datei.");
|
|
};
|
|
|
|
document.body.appendChild(script);
|
|
|
|
return () => {
|
|
document.body.removeChild(script);
|
|
};
|
|
}, [dispatch]);
|
|
|
|
return { digitalOutputs, isLoading };
|
|
}
|