Files
CPLv4.0/hooks/einausgaenge/useDigitalOutputsData.ts
ISA c55f0e7fe5 feat: Umgebungsspezifisches Laden von Datenquellen implementiert
- 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
2025-03-27 11:03:23 +01:00

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 };
}