diff --git a/components/DataSheet.js b/components/DataSheet.js index ba8472418..0c76c9371 100644 --- a/components/DataSheet.js +++ b/components/DataSheet.js @@ -96,6 +96,12 @@ function DataSheet() { localStorage.setItem("mapLayersVisibility", JSON.stringify(newState)); return newState; }); + + // Manuell die Überprüfung der Marker aktualisieren + setTimeout(() => { + const event = new Event("visibilityChanged"); + window.dispatchEvent(event); + }, 0); }; const handlePoiCheckboxChange = (event) => { diff --git a/components/MapComponent.js b/components/MapComponent.js index 4daf1021f..1a08f2e87 100644 --- a/components/MapComponent.js +++ b/components/MapComponent.js @@ -378,52 +378,44 @@ const MapComponent = ({ locations, onLocationUpdate, lineCoordinates }) => { } }, [map, zoomTrigger]); //-------------------------------------------- + const allMarkers = [ + ...talasMarkers, + ...eciMarkers, + ...gsmModemMarkers, + ...ciscoRouterMarkers, + ...wagoMarkers, + ...siemensMarkers, + ...otdrMarkers, + ...wdmMarkers, + ...gmaMarkers, + ...messstellenMarkers, + ...talasiclMarkers, + ...dauzMarkers, + ...smsfunkmodemMarkers, + ...sonstigeMarkers, + ...tkComponentsMarkers, + ...ulafMarkers, + ]; useEffect(() => { if (map) { // Sammle alle Marker in einer einzigen Liste - const allMarkers = [ - ...talasMarkers, - ...eciMarkers, - ...gsmModemMarkers, - ...ciscoRouterMarkers, - ...wagoMarkers, - ...siemensMarkers, - ...otdrMarkers, - ...wdmMarkers, - ...gmaMarkers, - ...messstellenMarkers, - ...talasiclMarkers, - ...dauzMarkers, - ...smsfunkmodemMarkers, - ...sonstigeMarkers, - ...tkComponentsMarkers, - ...ulafMarkers, - ]; const editMode = localStorage.getItem("editMode") === "true"; // EditMode prüfen - const mapLayersVisibility = JSON.parse(localStorage.getItem("mapLayersVisibility")) || {}; + const visibility = mapLayersVisibility || {}; // Sichtbarkeitsstatus aus Recoil allMarkers.forEach((marker) => { - // Prüfe, ob der Marker einer sichtbaren Layer-Gruppe zugeordnet ist - const layerKey = marker.options?.layerKey; // Layer-Key aus den Optionen des Markers - const isVisible = mapLayersVisibility[layerKey]; + const layerKey = marker.options?.layerKey; // Layer-Key aus den Marker-Optionen + const isVisible = visibility[layerKey]; // Sichtbarkeitsstatus prüfen - if (!layerKey || isVisible === undefined) { - console.warn(`Marker ohne gültigen layerKey oder keine Sichtbarkeitsdaten: ${marker}`); - return; - } + if (!layerKey || isVisible === undefined) return; if (editMode || !isVisible) { // Entferne Marker, wenn EditMode aktiv ist oder Layer unsichtbar - if (map.hasLayer(marker)) { - map.removeLayer(marker); - } + if (map.hasLayer(marker)) map.removeLayer(marker); } else { // Füge Marker hinzu, wenn EditMode deaktiviert ist und Layer sichtbar - if (!map.hasLayer(marker)) { - marker.addTo(map); - } + if (!map.hasLayer(marker)) marker.addTo(map); } }); @@ -448,6 +440,7 @@ const MapComponent = ({ locations, onLocationUpdate, lineCoordinates }) => { sonstigeMarkers, tkComponentsMarkers, ulafMarkers, + mapLayersVisibility, // Neu: Abhängigkeit für Sichtbarkeitsstatus ]); //-------------------------------------------- @@ -797,6 +790,18 @@ const MapComponent = ({ locations, onLocationUpdate, lineCoordinates }) => { }, [map, oms, bereicheMarkers]); //---------------------------------- + useEffect(() => { + const handleVisibilityChange = () => { + // Erneut die Marker-Überprüfung auslösen + checkOverlappingMarkers(map, allMarkers, plusRoundIcon); + }; + + window.addEventListener("visibilityChanged", handleVisibilityChange); + + return () => { + window.removeEventListener("visibilityChanged", handleVisibilityChange); + }; + }, [map, allMarkers]); //---------------------------------------