fix: Sichtbarkeitsprobleme von Markern und Plus-Icons behoben
- Initiales Laden der Marker entsprechend der lokalen Speicherwerte (localStorage) korrigiert. - Plus-Icons wird nun dynamisch aktualisiert, wenn Checkboxen geändert werden. - Event-Listener für Sichtbarkeitsänderungen hinzugefügt, um Marker und Plus-Icons ohne Neuladen zu aktualisieren. - Allgemeine Konsistenz zwischen `mapLayersVisibility` und tatsächlicher Sichtbarkeit der Layer verbessert.
This commit is contained in:
@@ -96,6 +96,12 @@ function DataSheet() {
|
|||||||
localStorage.setItem("mapLayersVisibility", JSON.stringify(newState));
|
localStorage.setItem("mapLayersVisibility", JSON.stringify(newState));
|
||||||
return newState;
|
return newState;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Manuell die Überprüfung der Marker aktualisieren
|
||||||
|
setTimeout(() => {
|
||||||
|
const event = new Event("visibilityChanged");
|
||||||
|
window.dispatchEvent(event);
|
||||||
|
}, 0);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handlePoiCheckboxChange = (event) => {
|
const handlePoiCheckboxChange = (event) => {
|
||||||
|
|||||||
@@ -378,52 +378,44 @@ const MapComponent = ({ locations, onLocationUpdate, lineCoordinates }) => {
|
|||||||
}
|
}
|
||||||
}, [map, zoomTrigger]);
|
}, [map, zoomTrigger]);
|
||||||
//--------------------------------------------
|
//--------------------------------------------
|
||||||
|
const allMarkers = [
|
||||||
|
...talasMarkers,
|
||||||
|
...eciMarkers,
|
||||||
|
...gsmModemMarkers,
|
||||||
|
...ciscoRouterMarkers,
|
||||||
|
...wagoMarkers,
|
||||||
|
...siemensMarkers,
|
||||||
|
...otdrMarkers,
|
||||||
|
...wdmMarkers,
|
||||||
|
...gmaMarkers,
|
||||||
|
...messstellenMarkers,
|
||||||
|
...talasiclMarkers,
|
||||||
|
...dauzMarkers,
|
||||||
|
...smsfunkmodemMarkers,
|
||||||
|
...sonstigeMarkers,
|
||||||
|
...tkComponentsMarkers,
|
||||||
|
...ulafMarkers,
|
||||||
|
];
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (map) {
|
if (map) {
|
||||||
// Sammle alle Marker in einer einzigen Liste
|
// 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 editMode = localStorage.getItem("editMode") === "true"; // EditMode prüfen
|
||||||
const mapLayersVisibility = JSON.parse(localStorage.getItem("mapLayersVisibility")) || {};
|
const visibility = mapLayersVisibility || {}; // Sichtbarkeitsstatus aus Recoil
|
||||||
|
|
||||||
allMarkers.forEach((marker) => {
|
allMarkers.forEach((marker) => {
|
||||||
// Prüfe, ob der Marker einer sichtbaren Layer-Gruppe zugeordnet ist
|
const layerKey = marker.options?.layerKey; // Layer-Key aus den Marker-Optionen
|
||||||
const layerKey = marker.options?.layerKey; // Layer-Key aus den Optionen des Markers
|
const isVisible = visibility[layerKey]; // Sichtbarkeitsstatus prüfen
|
||||||
const isVisible = mapLayersVisibility[layerKey];
|
|
||||||
|
|
||||||
if (!layerKey || isVisible === undefined) {
|
if (!layerKey || isVisible === undefined) return;
|
||||||
console.warn(`Marker ohne gültigen layerKey oder keine Sichtbarkeitsdaten: ${marker}`);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (editMode || !isVisible) {
|
if (editMode || !isVisible) {
|
||||||
// Entferne Marker, wenn EditMode aktiv ist oder Layer unsichtbar
|
// Entferne Marker, wenn EditMode aktiv ist oder Layer unsichtbar
|
||||||
if (map.hasLayer(marker)) {
|
if (map.hasLayer(marker)) map.removeLayer(marker);
|
||||||
map.removeLayer(marker);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// Füge Marker hinzu, wenn EditMode deaktiviert ist und Layer sichtbar
|
// Füge Marker hinzu, wenn EditMode deaktiviert ist und Layer sichtbar
|
||||||
if (!map.hasLayer(marker)) {
|
if (!map.hasLayer(marker)) marker.addTo(map);
|
||||||
marker.addTo(map);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -448,6 +440,7 @@ const MapComponent = ({ locations, onLocationUpdate, lineCoordinates }) => {
|
|||||||
sonstigeMarkers,
|
sonstigeMarkers,
|
||||||
tkComponentsMarkers,
|
tkComponentsMarkers,
|
||||||
ulafMarkers,
|
ulafMarkers,
|
||||||
|
mapLayersVisibility, // Neu: Abhängigkeit für Sichtbarkeitsstatus
|
||||||
]);
|
]);
|
||||||
|
|
||||||
//--------------------------------------------
|
//--------------------------------------------
|
||||||
@@ -797,6 +790,18 @@ const MapComponent = ({ locations, onLocationUpdate, lineCoordinates }) => {
|
|||||||
}, [map, oms, bereicheMarkers]);
|
}, [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]);
|
||||||
|
|
||||||
//---------------------------------------
|
//---------------------------------------
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user