"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 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 [last20Messages, setLast20Messages] = useState([]); const [kueOnline, setkueOnline] = useState([]); const [kueVersion, setKueVersion] = 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(""); const [kueAlarm1, setKueAlarm1] = useState([]); const [kueAlarm2, setKueAlarm2] = useState([]); const [kueGroundFault, setKueGroundFault] = useState([]); const router = useRouter(); const parseMessages = (messages) => { messages = messages .replace(//g, "\n") .replace(/<\/?td>/g, "") .replace(/<\/tr>/g, "") .trim(); const rows = messages.split("\n"); return rows.map((row) => [ row.substring(0, 5), row.substring(5, 10), row.substring(10, 29), row.substring(33, row.length - 1), row.substring(row.length - 1), ]); }; //------------------------------------------------------------------ //--------- Direkte Implementierung von `getFromIndexedDB` , um Importprobleme zu vermeiden in Produktionsumgebung ----- async function getFromIndexedDB(key) { return new Promise((resolve, reject) => { const request = indexedDB.open("CPLDatabase", 1); request.onsuccess = () => { const db = request.result; const transaction = db.transaction("cplVariables", "readonly"); const store = transaction.objectStore("cplVariables"); const getRequest = store.get(key); getRequest.onsuccess = () => resolve(getRequest.result); getRequest.onerror = () => reject(getRequest.error); }; request.onerror = () => reject(request.error); }); } //------------------------------------------------------------------ useEffect(() => { const loadDataOnce = async () => { try { // Daten aus IndexedDB laden const last20MessagesData = await getFromIndexedDB("last20Messages"); const ipData = await getFromIndexedDB("ip"); const subnetData = await getFromIndexedDB("subnet"); const gatewayData = await getFromIndexedDB("gateway"); const appVersionData = await getFromIndexedDB("appVersion"); const kueCableBreakData = await getFromIndexedDB("kueCableBreak"); const kueOnlineData = await getFromIndexedDB("kueOnline"); const kueVersionData = await getFromIndexedDB("kueVersion"); const kueAlarm1Data = await getFromIndexedDB("kueAlarm1"); const kueAlarm2Data = await getFromIndexedDB("kueAlarm2"); const kueGroundFaultData = await getFromIndexedDB("kueGroundFault"); // Setze die States mit den geladenen Daten setLast20Messages(parseMessages(last20MessagesData || "")); setIp(ipData || ""); setSubnet(subnetData || ""); setGateway(gatewayData || ""); setAppVersion(appVersionData || ""); setKueCableBreak( Array.isArray(kueCableBreakData) ? kueCableBreakData.map(Number) : [] ); setkueOnline( Array.isArray(kueOnlineData) ? kueOnlineData.map(Number) : [] ); setKueVersion(Array.isArray(kueVersionData) ? kueVersionData : []); setKueAlarm1( Array.isArray(kueAlarm1Data) ? kueAlarm1Data.map(Number) : [] ); setKueAlarm2( Array.isArray(kueAlarm2Data) ? kueAlarm2Data.map(Number) : [] ); setKueGroundFault( Array.isArray(kueGroundFaultData) ? kueGroundFaultData.map(Number) : [] ); setLoading(false); } catch (error) { console.error("Fehler beim Laden der Daten aus IndexedDB:", error); setError(error); setLoading(false); } }; loadDataOnce(); const intervalId = setInterval(loadDataOnce, 10000); return () => clearInterval(intervalId); }, []); //------------------------------------------------------------------ const handleModuleClick = (rackNumber) => { 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 isSlotOnline = kueOnline[slotNumber - 1] === 1; const moduleVersion = kueVersion[slotNumber - 1] || version; // Verwende kueVersion return (
handleModuleClick(i + 1)} >
); })}
); } return baugruppen; }; return (

Letzten 20 Meldungen

{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.

Versionsinformationen

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

Webserverversion: 1.0.0

{loading ? (

Lädt...

) : error ? (

{error.toString()}

) : ( renderBaugruppentraeger() )}
IP Address

IP-Adresse

{ip}

subnet mask

Subnet-Maske

{subnet}

gateway

Gateway

{gateway}

); } export default Dashboard;