From e2f11ab8a9c481c8a05eaea3c4b4cc79212f6d7c Mon Sep 17 00:00:00 2001 From: ISA Date: Thu, 28 Nov 2024 11:50:23 +0100 Subject: [PATCH] =?UTF-8?q?fix:=20alle=20Markers/Stationen=20Icons=20aktua?= =?UTF-8?q?lisieren=20aber=20ohne=20Plus=20Icon=20f=C3=BCr=20=C3=9Cberlapp?= =?UTF-8?q?ende=20icons?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/MapComponent.js | 206 +++++++++---------------------------- 1 file changed, 48 insertions(+), 158 deletions(-) diff --git a/components/MapComponent.js b/components/MapComponent.js index 12a234b5e..9424f6619 100644 --- a/components/MapComponent.js +++ b/components/MapComponent.js @@ -753,183 +753,73 @@ await fetchGisStationsStatusDistrict(mapGisStationsStatusDistrictUrl, setGisStat const sonstigeMarkersLayerRef = useRef(null); useEffect(() => { - if (!gisSystemStaticLoaded || !map) return; // Sicherstellen, dass alle Abhängigkeiten geladen sind + if (!gisSystemStaticLoaded || !map) return; // Sicherstellen, dass die Karte und Daten geladen sind - // Initialisiere die LayerGroups, falls noch nicht vorhanden - if (!gmaLayerRef.current) { - gmaLayerRef.current = new L.LayerGroup().addTo(map); - } - if (!talasLayerRef.current) { - talasLayerRef.current = new L.LayerGroup().addTo(map); - } - if (!eciMarkersLayerRef.current) { - eciMarkersLayerRef.current = new L.LayerGroup().addTo(map); - } - if (!gsmModemMarkersLayerRef.current) { - gsmModemMarkersLayerRef.current = new L.LayerGroup().addTo(map); - } - if (!ciscoRouterMarkersLayerRef.current) { - ciscoRouterMarkersLayerRef.current = new L.LayerGroup().addTo(map); - } - if (!wagoMarkersLayerRef.current) { - wagoMarkersLayerRef.current = new L.LayerGroup().addTo(map); - } - if (!siemensMarkersLayerRef.current) { - siemensMarkersLayerRef.current = new L.LayerGroup().addTo(map); - } - if (!otdrMarkersLayerRef.current) { - otdrMarkersLayerRef.current = new L.LayerGroup().addTo(map); - } - if (!wdmMarkersLayerRef.current) { - wdmMarkersLayerRef.current = new L.LayerGroup().addTo(map); - } - if (!messstellenMarkersLayerRef.current) { - messstellenMarkersLayerRef.current = new L.LayerGroup().addTo(map); - } - if (!talasiclMarkersLayerRef.current) { - talasiclMarkersLayerRef.current = new L.LayerGroup().addTo(map); - } - if (!dauzMarkersLayerRef.current) { - dauzMarkersLayerRef.current = new L.LayerGroup().addTo(map); - } - if (!smsfunkmodemMarkersLayerRef.current) { - smsfunkmodemMarkersLayerRef.current = new L.LayerGroup().addTo(map); - } - if (!ulafMarkersLayerRef.current) { - ulafMarkersLayerRef.current = new L.LayerGroup().addTo(map); - } - if (!sonstigeMarkersLayerRef.current) { - sonstigeMarkersLayerRef.current = new L.LayerGroup().addTo(map); - } + const layerGroups = [ + { ref: gmaLayerRef, id: 11, setState: setGmaMarkers }, + { ref: talasLayerRef, id: 1, setState: setTalasMarkers }, + { ref: eciMarkersLayerRef, id: 2, setState: setEciMarkers }, + { ref: gsmModemMarkersLayerRef, id: 5, setState: setGsmModemMarkers }, + { ref: ciscoRouterMarkersLayerRef, id: 6, setState: setCiscoRouterMarkers }, + { ref: wagoMarkersLayerRef, id: 7, setState: setWagoMarkers }, + { ref: siemensMarkersLayerRef, id: 8, setState: setSiemensMarkers }, + { ref: otdrMarkersLayerRef, id: 9, setState: setOtdrMarkers }, + { ref: wdmMarkersLayerRef, id: 10, setState: setWdmMarkers }, + { ref: messstellenMarkersLayerRef, id: 13, setState: setMessstellenMarkers }, + { ref: talasiclMarkersLayerRef, id: 100, setState: setTalasiclMarkers }, + { ref: dauzMarkersLayerRef, id: 110, setState: setDauzMarkers }, + { ref: smsfunkmodemMarkersLayerRef, id: 111, setState: setSmsfunkmodemMarkers }, + { ref: ulafMarkersLayerRef, id: 0, setState: setUlafMarkers }, + { ref: sonstigeMarkersLayerRef, id: 200, setState: setSonstigeMarkers }, + ]; - const updateGmaMarkers = () => { - // Alte Marker entfernen - gmaLayerRef.current.clearLayers(); + // Initialisiere LayerGroups nur einmal + layerGroups.forEach(({ ref }) => { + if (!ref.current) { + ref.current = new L.LayerGroup().addTo(map); + } + }); - // Neue Marker für jedes System erstellen - createAndSetDevices(11, setGmaMarkers, GisSystemStatic, priorityConfig); - }; + const updateMarkers = ({ ref, id, setState }) => { + if (ref.current) { + ref.current.clearLayers(); // Entferne alte Marker + } - const updateTalasMarkers = () => { - // Alte Marker aus der LayerGroup entfernen - talasLayerRef.current.clearLayers(); - - // Neue Marker hinzufügen + // Erstelle und füge neue Marker hinzu createAndSetDevices( - 1, + id, (newMarkers) => { - setTalasMarkers(newMarkers); // Update State - newMarkers.forEach((marker) => talasLayerRef.current.addLayer(marker)); // Füge Marker zur LayerGroup hinzu - - // Überprüfe auf überlappende Marker und füge das Plus-Icon hinzu - checkOverlappingMarkers(map, newMarkers, plusRoundIcon); + setState(newMarkers); // Zustand aktualisieren + newMarkers.forEach((marker) => ref.current.addLayer(marker)); // Marker zur LayerGroup hinzufügen }, GisSystemStatic, priorityConfig ); }; - const updateEciMarkers = () => { - eciMarkersLayerRef.current.clearLayers(); - createAndSetDevices(2, setEciMarkers, GisSystemStatic, priorityConfig); + // Aktualisiere alle Marker-Gruppen + const updateAllMarkers = () => { + layerGroups.forEach(updateMarkers); }; - const updateGsmModemMarkers = () => { - gsmModemMarkersLayerRef.current.clearLayers(); - createAndSetDevices(5, setGsmModemMarkers, GisSystemStatic, priorityConfig); - }; + // Initiales Update + updateAllMarkers(); - const updateCiscoRouterMarkers = () => { - ciscoRouterMarkersLayerRef.current.clearLayers(); - createAndSetDevices(6, setCiscoRouterMarkers, GisSystemStatic, priorityConfig); - }; - - const updateWagoMarkers = () => { - wagoMarkersLayerRef.current.clearLayers(); - createAndSetDevices(7, setWagoMarkers, GisSystemStatic, priorityConfig); - }; - - const updateSiemensMarkers = () => { - siemensMarkersLayerRef.current.clearLayers(); - createAndSetDevices(8, setSiemensMarkers, GisSystemStatic, priorityConfig); - }; - - const updateOtdrMarkers = () => { - otdrMarkersLayerRef.current.clearLayers(); - createAndSetDevices(9, setOtdrMarkers, GisSystemStatic, priorityConfig); - }; - - const updateWdmMarkers = () => { - wdmMarkersLayerRef.current.clearLayers(); - createAndSetDevices(10, setWdmMarkers, GisSystemStatic, priorityConfig); - }; - - const updateMessstellenMarkers = () => { - messstellenMarkersLayerRef.current.clearLayers(); - createAndSetDevices(13, setMessstellenMarkers, GisSystemStatic, priorityConfig); - }; - - const updateTalasiclMarkers = () => { - talasiclMarkersLayerRef.current.clearLayers(); - createAndSetDevices(100, setTalasiclMarkers, GisSystemStatic, priorityConfig); - }; - - const updateDauzMarkers = () => { - dauzMarkersLayerRef.current.clearLayers(); - createAndSetDevices(110, setDauzMarkers, GisSystemStatic, priorityConfig); - }; - - const updateSmsfunkmodemMarkers = () => { - smsfunkmodemMarkersLayerRef.current.clearLayers(); - createAndSetDevices(111, setSmsfunkmodemMarkers, GisSystemStatic, priorityConfig); - }; - - const updateUlafMarkers = () => { - ulafMarkersLayerRef.current.clearLayers(); - createAndSetDevices(0, setUlafMarkers, GisSystemStatic, priorityConfig); - }; - - const updateSonstigeMarkers = () => { - sonstigeMarkersLayerRef.current.clearLayers(); - createAndSetDevices(200, setSonstigeMarkers, GisSystemStatic, priorityConfig); - }; - - // Initiales Update für beide LayerGroups - updateGmaMarkers(); - updateTalasMarkers(); - updateEciMarkers(); - updateGsmModemMarkers(); - updateCiscoRouterMarkers(); - updateWagoMarkers(); - updateSiemensMarkers(); - updateOtdrMarkers(); - updateWdmMarkers(); - updateMessstellenMarkers(); - updateTalasiclMarkers(); - updateDauzMarkers(); - updateSmsfunkmodemMarkers(); - updateUlafMarkers(); - updateSonstigeMarkers(); - - // Setze Intervalle für regelmäßige Updates - const markerIntervalId = setInterval(() => { - updateGmaMarkers(); - }, 18000); // 18 Sekunden - - const talasIntervalId = setInterval(() => { - updateTalasMarkers(); + // Setze ein Intervall für regelmäßige Updates + const intervalId = setInterval(() => { + updateAllMarkers(); }, 20000); // 20 Sekunden // Aufräumen bei Komponentenentladung return () => { - clearInterval(markerIntervalId); - clearInterval(talasIntervalId); - if (gmaLayerRef.current) { - gmaLayerRef.current.clearLayers(); - } - if (talasLayerRef.current) { - talasLayerRef.current.clearLayers(); - } + clearInterval(intervalId); // Entferne Intervall + + // LayerGroups leeren + layerGroups.forEach(({ ref }) => { + if (ref.current) { + ref.current.clearLayers(); + } + }); }; }, [gisSystemStaticLoaded, map, GisSystemStatic, priorityConfig]);