Files
CPLv4.0/utils/loadWindowVariables.ts
Ismail Ali 025470defb refactor: loadWindowVariables final auf API-Handler in Development umgestellt
- Scripts in Dev-Umgebung werden jetzt über /api/cpl/* geladen
- Production lädt weiterhin Embedded-System JavaScript Dateien
- Einheitliches Handling für system.js, de.js, ae.js, kueData.js, opcua.js usw.
- Flexibles Konzept für zukünftige Erweiterungen
2025-04-15 17:03:54 +02:00

71 lines
2.5 KiB
TypeScript

// /utils/loadWindowVariables.ts
// ✅ Interface für `window`-Objekt zur TypeScript-Sicherheit
interface CustomWindow extends Window {
[key: string]: any;
}
// ✅ Hauptfunktion zum Laden von `window`-Variablen
export async function loadWindowVariables(): Promise<Record<string, any>> {
return new Promise((resolve, reject) => {
const requiredVars: string[] = ["win_deviceName"];
const isDev = window.location.hostname === "localhost";
// ✅ Skripte, die geladen werden müssen
const scripts: string[] = [
isDev ? "analogeEingaengeAPIHandler" : "ae.js",
isDev ? "digitaleEingaengeAPIHandler" : "de.js",
//isDev ? "digitalOutputsAPIHandler" : "da.js", // das wird Momentan nicht gebraucht
isDev ? "kabelueberwachungAPIHandler" : "kueData.js",
isDev ? "last20MessagesAPIHandler" : "start.js",
isDev ? "opcuaAPIHandler" : "opcua.js",
//isDev ? "slotDataAPIHandler" : "slotData.js", // das wird Momentan nicht gebraucht
isDev ? "systemAPIHandler" : "system.js",
//isDev ? "tdmDataAPIHandler" : "tdmData.js", // das wird Momentan nicht gebraucht
//isDev ? "tdrDataAPIHandler" : "tdrData.js", // das wird Momentan nicht gebraucht
];
// ✅ Erkenne Umgebung anhand von `window.location.hostname`
const loadScript = (src: string): Promise<void> => {
return new Promise((resolve, reject) => {
const script = document.createElement("script");
script.src = isDev
? `/api/cpl/${src}` // Entwicklungsumgebung
: `/CPL?/CPL/SERVICE/${src}`; // Produktionsumgebung
script.async = true;
script.onload = () => resolve();
script.onerror = () => reject(new Error(`Script load error: ${src}`));
document.head.appendChild(script);
});
};
// ✅ Lade alle Skripte nacheinander
scripts
.reduce(
(promise, script) => promise.then(() => loadScript(script)),
Promise.resolve()
)
.then(() => {
const win = window as unknown as CustomWindow;
// ✅ Erstelle ein Objekt mit allen geladenen Variablen
const variablesObj: Record<string, any> = requiredVars.reduce(
(acc, variable) => {
if (win[variable] !== undefined) {
acc[variable.replace("win_", "")] = win[variable];
}
return acc;
},
{}
);
resolve(variablesObj);
})
.catch((error) => {
console.error("❌ Fehler beim Laden eines Skripts:", error);
reject(error);
});
});
}