diff --git a/hooks/useLineData.js b/hooks/useLineData.js index 4dd0c7cc5..46c530e6d 100644 --- a/hooks/useLineData.js +++ b/hooks/useLineData.js @@ -1,4 +1,3 @@ -// /hooks/useLineData.js import { useEffect, useState } from "react"; import { SERVER_URL } from "../config/urls"; @@ -12,23 +11,43 @@ const useLineData = (webserviceGisLinesStatusUrl, setLineStatusData) => { console.log("Daten werden abgerufen..."); const response1 = await fetch(webserviceGisLinesStatusUrl); const data1 = await response1.json(); - console.log("Daten vom Webservice:", data1); const response2 = await fetch(`${SERVER_URL}:3000/api/talas_v5_DB/gisLines/readGisLines`); const data2 = await response2.json(); - console.log("GIS Linien Daten:", data2); - - // Abrufen der Namen basierend auf idLD const response3 = await fetch(`${SERVER_URL}:3000/api/talas_v5_DB/station/getAllStationsNames`); const namesData = await response3.json(); - console.log("Namen der Linien:", namesData); const colorsByModule = {}; const newTooltipContents = {}; const valueMap = {}; + // Logik zur Gruppierung der Daten logGroupedData(data1.Statis); - data1.Statis.forEach((statis) => { + // Sortiere die Meldungen nach Level, damit die höchste Priorität (kleinster Level) zuerst kommt + const sortedStatis = [...data1.Statis].sort((a, b) => a.Level - b.Level); + console.log("Sortierte Daten:", sortedStatis); + + // Filtere Objekte mit gleichem IdLD und Modul, und Level > 0, und entferne die Objekte mit dem höchsten Level + const filteredStatis = []; + const seenKeys = new Set(); + + sortedStatis.forEach((statis) => { + const key = `${statis.IdLD}-${statis.Modul}`; + + if (statis.Level > 0) { + if (!seenKeys.has(key)) { + seenKeys.add(key); + filteredStatis.push(statis); // Behalte das Objekt mit dem niedrigsten Level (höchste Priorität) + } + } else { + // Für Level -1 oder nicht relevante Meldungen einfach hinzufügen + filteredStatis.push(statis); + } + }); + + console.log("Gefilterte Daten (Objekte mit höchstem Level entfernt):", filteredStatis); + + filteredStatis.forEach((statis) => { const key = `${statis.IdLD}-${statis.Modul}`; if (!valueMap[key]) { valueMap[key] = { @@ -37,6 +56,8 @@ const useLineData = (webserviceGisLinesStatusUrl, setLineStatusData) => { schleifenwert: undefined, }; } + + // Sammle Messwert und Schleifenwert if (statis.DpName.endsWith("_Messwert") && statis.Value !== "True" && !valueMap[key].messwert) { valueMap[key].messwert = statis.Value; } @@ -48,22 +69,26 @@ const useLineData = (webserviceGisLinesStatusUrl, setLineStatusData) => { } }); - data1.Statis.reverse().forEach((statis) => { + // Jetzt durch alle Prioritätslevel gehen und die Farben sowie Meldungen korrekt setzen + filteredStatis.forEach((statis) => { + const key = `${statis.IdLD}-${statis.Modul}`; const matchingLine = data2.find((item) => item.idLD === statis.IdLD && item.idModul === statis.Modul); + if (matchingLine) { const prioColor = statis.PrioColor === "#ffffff" ? "green" : statis.PrioColor; - const key = `${matchingLine.idLD}-${matchingLine.idModul}`; // Sicherstellen, dass der Key eindeutig ist const values = valueMap[key]; if (!values) { - console.error(`No values found for key: ${key}`); // Debug: Überprüfe, ob Werte existieren + console.error(`Keine Werte gefunden für Key: ${key}`); return; } + // Nachrichtenanzeige const messageDisplay = values.messages.map((msg) => (msg ? `${msg}
` : "")).join(""); const prioNameDisplay = statis.PrioName && statis.PrioName !== "?" ? `(${statis.PrioName})` : ""; - colorsByModule[key] = prioColor; // Stelle sicher, dass der Key richtig verwendet wird + // Setze die Farbe und Tooltip für jede Linie (für alle Prioritätslevel) + colorsByModule[key] = prioColor; newTooltipContents[key] = `
${statis.ModulName || "Unknown"} @@ -72,7 +97,7 @@ const useLineData = (webserviceGisLinesStatusUrl, setLineStatusData) => {
Slot: ${statis.Modul || "N/A"}
- Station: ${namesData[matchingLine.idLD] || "N/A"} + Station: ${namesData[matchingLine.idLD] || "N/A"}
@@ -87,6 +112,7 @@ const useLineData = (webserviceGisLinesStatusUrl, setLineStatusData) => { } }); + // Setze die Farben und Tooltip-Inhalte setLineColors(colorsByModule); setTooltipContents(newTooltipContents); setLineStatusData(data1.Statis); @@ -96,11 +122,18 @@ const useLineData = (webserviceGisLinesStatusUrl, setLineStatusData) => { }; fetchData(); + + // Setze ein Intervall, um die Daten alle 20 Sekunden erneut abzurufen + //const intervalId = setInterval(fetchData, 20000); + + // Räumt das Intervall auf, wenn die Komponente entladen wird + //return () => clearInterval(intervalId); }, [webserviceGisLinesStatusUrl, setLineStatusData]); return { lineColors, tooltipContents }; }; +// Funktion zur Gruppierung der Daten function logGroupedData(statisList) { const grouped = statisList.reduce((acc, item) => { const { IdLD, Modul, Level, PrioColor, PrioName, ModulName, ModulTyp, Message, DpName, Value } = item; diff --git a/utils/mapFeatures.js b/utils/mapFeatures.js index e877098e3..859f2f8c0 100644 --- a/utils/mapFeatures.js +++ b/utils/mapFeatures.js @@ -135,8 +135,8 @@ export const setupPolylines = (map, linePositions, lineColors, tooltipContents, const checkMouseOverMenu = () => { if (!isMouseOverMenuItem) { - showContextMenuItemByIndex(map, 0); - showContextMenuItemByIndex(map, 1); + //showContextMenuItemByIndex(map, 0); + //showContextMenuItemByIndex(map, 1); closeContextMenu(); // Kontextmenü schließen, wenn die Maus nicht mehr darüber ist } }; @@ -300,8 +300,8 @@ export const setupPolylines = (map, linePositions, lineColors, tooltipContents, polyline.on("mouseover", (e) => { polyline.setStyle({ weight: 20 }); - hideContextMenuItemByIndex(map, 0); - hideContextMenuItemByIndex(map, 1); + //hideContextMenuItemByIndex(map, 0); + //hideContextMenuItemByIndex(map, 1); }); polyline.on("mousedown", (e) => {