"use client"; // app/dashboard/page.jsx import React, { useEffect, useState } from "react"; import { useRouter } from "next/navigation"; import "tailwindcss/tailwind.css"; import "@fontsource/roboto"; import "bootstrap-icons/font/bootstrap-icons.css"; import { loadWindowVariables } from "../utils/loadWindowVariables"; import CPLStatus from "../components/modulesStatus/CPLStatus"; import Access1Status from "../components/modulesStatus/Access1Status"; import Access2Status from "../components/modulesStatus/Access2Status"; import KabelModulStatus from "../components/modulesStatus/KabelModulStatus"; import XioPM1Status from "../components/modulesStatus/XioPM1Status"; import XioPM2Status from "../components/modulesStatus/XioPM2Status"; import { Icon } from "@iconify/react"; function Dashboard() { const [isClient, setIsClient] = useState(false); const router = useRouter(); // Router instanzieren const [last20Messages, setLast20Messages] = useState([]); const [kueOnline, setkueOnline] = useState([]); const [ip, setIp] = useState(""); const [subnet, setSubnet] = useState(""); const [gateway, setGateway] = useState(""); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [kueCableBreak, setKueCableBreak] = useState([]); const [appVersion, setAppVersion] = useState(""); /* useEffect(() => { if (typeof window !== "undefined") { loadWindowVariables() .then(() => { if (window.last20Messages) { const parsedMessages = parseMessages(window.last20Messages); setLast20Messages(parsedMessages); setIp(window.ip); setSubnet(window.subnet); setGateway(window.gateway); setAppVersion(window.appVersion); } else { console.error("Konnte last20Messages nicht finden."); setError("Konnte last20Messages nicht finden."); } setLoading(false); }) .catch((error) => { console.error("Fehler beim Laden des Skripts:", error); setError(error); setLoading(false); }); } }, []); */ /* useEffect(() => { loadWindowVariables() .then(() => { if (window.kueCableBreak && Array.isArray(window.kueCableBreak)) { // Prüfe, ob window.kueCableBreak ein Array ist const cableBreakArray = window.kueCableBreak.map(Number); setKueCableBreak(cableBreakArray); // Array für kueCableBreak } else if (typeof window.kueCableBreak === "string") { // Falls es ein String ist, splitte den String und mappe ihn in ein Array const cableBreakArray = window.kueCableBreak.split(",").map(Number); setKueCableBreak(cableBreakArray); } else { console.error( "Konnte kueCableBreak nicht finden oder es ist kein gültiges Array/String." ); setError( "Konnte kueCableBreak nicht finden oder es ist kein gültiges Array/String." ); } setLoading(false); }) .catch((error) => { console.error("Fehler beim Laden des Skripts:", error); setError(error); setLoading(false); }); }, []); */ const parseMessages = (messages) => { messages = messages .replace(//g, "\n") .replace(/<\/?td>/g, "") .replace(/<\/tr>/g, "") .trim(); const rows = messages.split("\n"); return rows.map((row) => { const columns = [ row.substring(0, 5), // ID row.substring(5, 10), // Wert (z.B. Modulnummer) row.substring(10, 29), // Zeitstempel, Millisekunden entfernt :000 row.substring(33, row.length - 1), // Meldung (ohne letztes Zeichen) row.substring(row.length - 1), // Status (letztes Zeichen) ]; return columns; }); }; /* useEffect(() => { loadWindowVariables() .then(() => { // console.log("kueOnline Data: ", window.kueOnline); // Debug: Ausgabe von kueOnline if (window.kueOnline) { if (Array.isArray(window.kueOnline)) { const versionArray = window.kueOnline.map(Number); setkueOnline(versionArray); } else { console.error("kueOnline ist kein Array:", window.kueOnline); setError("Konnte kueOnline nicht als Array verarbeiten."); } } else { console.error("Konnte kueOnline nicht finden."); setError("Konnte kueOnline nicht finden."); } setLoading(false); }) .catch((error) => { console.error("Fehler beim Laden des Skripts:", error); setError(error); setLoading(false); }); }, []); */ useEffect(() => { // Funktion zur Wiederholten Überprüfung der Variablen const checkVariablesLoaded = () => { return new Promise((resolve, reject) => { const intervalId = setInterval(() => { if ( window.kueAlarm1 && Array.isArray(window.kueAlarm1) && window.kueAlarm2 && Array.isArray(window.kueAlarm2) ) { clearInterval(intervalId); resolve(); } else { console.log("Warten auf die Variablen kueAlarm1 und kueAlarm2..."); } }, 500); // Überprüfung alle 500ms // Timeout, falls die Variablen nach einer bestimmten Zeit nicht geladen sind setTimeout(() => { clearInterval(intervalId); reject( new Error( "Die Variablen kueAlarm1 und kueAlarm2 wurden nicht innerhalb der erwarteten Zeit geladen." ) ); }, 10000); // Timeout nach 10 Sekunden }); }; loadWindowVariables() .then(() => checkVariablesLoaded()) .then(() => { // Variablen sind jetzt verfügbar /* console.log("kueAlarm1 und kueAlarm2 sind geladen:", { kueAlarm1: window.kueAlarm1, kueAlarm2: window.kueAlarm2, }); */ }) .catch((error) => { console.error("Fehler beim Laden der Variablen oder Timeout:", error); setError("Konnte die Variablen nicht laden: " + error.message); }); }, []); useEffect(() => { if (typeof window !== "undefined") { const updateData = () => { loadWindowVariables() .then(() => { //console.log("Updating last20Messages:", window.last20Messages); setLast20Messages(parseMessages(window.last20Messages || "")); setIp(window.ip || ""); setSubnet(window.subnet || ""); setGateway(window.gateway || ""); setAppVersion(window.appVersion || ""); const cableBreakArray = Array.isArray(window.kueCableBreak) ? window.kueCableBreak.map(Number) : (window.kueCableBreak || "").split(",").map(Number); setKueCableBreak(cableBreakArray); const onlineArray = Array.isArray(window.kueOnline) ? window.kueOnline.map(Number) : []; setkueOnline(onlineArray); setLoading(false); }) .catch((error) => { console.error("Error loading script:", error); setError(error); setLoading(false); }); }; updateData(); const intervalId = setInterval(updateData, 5000); return () => clearInterval(intervalId); } }, []); const handleModuleClick = (rackNumber) => { // Navigiere zu /kabelueberwachung und übermittle den rackNumber als Parameter router.push(`/kabelueberwachung?rack=${rackNumber}`); }; const renderBaugruppentraeger = () => { const baugruppen = []; const numBaugruppen = Math.ceil(kueOnline.length / 8); for (let i = 0; i < numBaugruppen; i++) { const slots = kueOnline.slice(i * 8, (i + 1) * 8); baugruppen.push(
{slots.map((version, index) => { const slotNumber = i * 8 + index + 1; const moduleVersion = window.kueVersion ? window.kueVersion[slotNumber - 1] : version; const hasAlarm1 = kueAlarm1.includes(slotNumber); const hasAlarm2 = kueAlarm2.includes(slotNumber); const hasCableBreak = kueCableBreak.includes(slotNumber); const alarmClass = hasAlarm1 || hasAlarm2 || hasCableBreak ? "bg-red-500" : "bg-white"; return (
handleModuleClick(i + 1)} // Bei Klick navigieren >
); })}
); } return baugruppen; }; return (
{/* Letzte Meldungen - Titel und Icon Bereich */}

Letzten 20 Meldungen

{/* */}
{/* Meldungen Liste */}
{last20Messages.length > 0 ? ( last20Messages.map((columns, index) => ( )) ) : ( )}
ID Modul Zeitstempel Meldung Status
{columns[0]} {columns[1]}
{columns[2].split(" ")[0]} {columns[2].split(" ")[1]}
{columns[3]} {columns[4]}
Keine Meldungen verfügbar.
{/* Sidebar mit Informationen */}
{/* Versionsinformationen */}

Versionsinformationen

Applikationsversion:{" "} {appVersion}{" "}

Webserverversion: 1.0.0

{/* Beispiel für Geräteanzeige */}
{/* */}
{loading ? (

Lädt...

) : error ? (

{error.toString()}

) : ( renderBaugruppentraeger() )}
{/* Die Box für XIOPM1 und XIOPM2, jeweils unter CPL und Access 1 */}
{/* */} {/* Unter CPL */}
{/* */} {/* Unter Access 1 */}
{/* IP, Subnet und Gateway Informationen */}
IP Address

IP-Adresse

{ip}

subnet mask

Subnet-Maske

{subnet}

gateway

Gateway

{gateway}

); } export default Dashboard;