- Alle fetch-Services (TDM, TDR, analoge/digitale Eingänge/Ausgänge, SystemSettings usw.) angepasst, um `NEXT_PUBLIC_NODE_ENV` zu verwenden. - Entwicklungsumgebung lädt Daten aus /CPLmockData/... - Produktionsumgebung verwendet echte Endpunkte mit /CPL?/CPL/... - .env.production und .env.development korrekt berücksichtigt - loadWindowVariables, WindowVariablesInitializer und verwandte Dateien bereinigt - Mockdaten erscheinen nicht mehr versehentlich in Produktionsumgebung
67 lines
1.8 KiB
TypeScript
67 lines
1.8 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(() => {
|
|
const isDev = window.location.hostname === "localhost";
|
|
|
|
const script = document.createElement("script");
|
|
script.src = isDev ? "/CPLmockData/SERVICE/da.js" : "/CPL/SERVICE/da.js";
|
|
script.async = true;
|
|
|
|
script.onload = () => {
|
|
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,
|
|
})
|
|
);
|
|
|
|
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 };
|
|
}
|