WIP: polyline Slice visiblity
This commit is contained in:
@@ -31,34 +31,26 @@ const useDynamicDeviceLayers = (map, GisSystemStatic, mapLayersVisibility, prior
|
||||
|
||||
GisSystemStatic.forEach(({ Name, IdSystem }) => {
|
||||
const key = `system-${IdSystem}`;
|
||||
// LayerGroup-Instanzierung und Bereinigung
|
||||
// LayerGroup immer komplett neu erstellen, um doppelte Marker zu verhindern
|
||||
if (layerRefs.current[key]) {
|
||||
// Entferne alte LayerGroup von der Map, falls vorhanden
|
||||
if (map.hasLayer(layerRefs.current[key])) {
|
||||
map.removeLayer(layerRefs.current[key]);
|
||||
}
|
||||
layerRefs.current[key].clearLayers();
|
||||
delete layerRefs.current[key];
|
||||
}
|
||||
// Neue oder wiederverwendete LayerGroup anlegen und zur Map hinzufügen
|
||||
if (!layerRefs.current[key]) {
|
||||
layerRefs.current[key] = new L.LayerGroup();
|
||||
}
|
||||
layerRefs.current[key] = new L.LayerGroup();
|
||||
layerRefs.current[key].addTo(map);
|
||||
// Debug-Ausgabe
|
||||
/* console.log(
|
||||
`[DeviceLayers] LayerGroup für ${key} auf Map hinzugefügt. Aktuelle LayerGroups:`,
|
||||
Object.keys(layerRefs.current)
|
||||
); */
|
||||
|
||||
createAndSetDevices(
|
||||
IdSystem,
|
||||
newMarkers => {
|
||||
// Füge neue Marker der LayerGroup hinzu (nur Geräte-Marker)
|
||||
if (layerRefs.current[key]) {
|
||||
// Entferne alle Marker aus der LayerGroup, bevor neue hinzugefügt werden
|
||||
layerRefs.current[key].clearLayers();
|
||||
newMarkers.forEach(marker => {
|
||||
// Nur LayerGroup verwenden, nicht direkt auf map
|
||||
// Nur eindeutige Marker hinzufügen
|
||||
const uniqueMarkers = Array.isArray(newMarkers) ? Array.from(new Set(newMarkers)) : [];
|
||||
uniqueMarkers.forEach(marker => {
|
||||
marker.addTo(layerRefs.current[key]);
|
||||
});
|
||||
// Debug: Anzahl Marker in LayerGroup
|
||||
@@ -83,29 +75,20 @@ const useDynamicDeviceLayers = (map, GisSystemStatic, mapLayersVisibility, prior
|
||||
if (!map) return;
|
||||
const editMode = localStorage.getItem("editMode") === "true";
|
||||
|
||||
Object.entries(markerStates).forEach(([key, markers]) => {
|
||||
const isVisible = mapLayersVisibility[key] ?? true; // undefined = true
|
||||
|
||||
markers.forEach(marker => {
|
||||
const hasLayer = map.hasLayer(marker);
|
||||
|
||||
// Logik korrigiert:
|
||||
// - Im editMode: alle Marker verstecken
|
||||
// - Nicht im editMode: nur sichtbare Marker anzeigen (isVisible === true)
|
||||
if (editMode || isVisible === false) {
|
||||
// Marker verstecken
|
||||
if (hasLayer) {
|
||||
map.removeLayer(marker);
|
||||
}
|
||||
} else if (isVisible === true) {
|
||||
// Marker anzeigen (nur wenn explizit true)
|
||||
if (!hasLayer) {
|
||||
marker.addTo(map);
|
||||
}
|
||||
Object.entries(layerRefs.current).forEach(([key, layerGroup]) => {
|
||||
const isVisible = mapLayersVisibility[key] ?? true;
|
||||
if (editMode || isVisible === false) {
|
||||
if (map.hasLayer(layerGroup)) {
|
||||
map.removeLayer(layerGroup);
|
||||
}
|
||||
});
|
||||
} else if (isVisible === true) {
|
||||
if (!map.hasLayer(layerGroup)) {
|
||||
layerGroup.addTo(map);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Overlapping-Check bleibt wie gehabt
|
||||
const allMarkers = Object.values(markerStates).filter(Array.isArray).flat();
|
||||
checkOverlappingMarkers(map, allMarkers, plusRoundIcon);
|
||||
}, [map, markerStates, mapLayersVisibility]);
|
||||
|
||||
Reference in New Issue
Block a user