Files
nodeMap/hooks/useDynamicMarkerLayers.js
ISA 5cf84fb14e fix: Gerätemarker-Sichtbarkeit an Redux-Layerzustand gekoppelt
- Hardcodiertes Zeichnen der Gerätemarker beim Initialisieren entfernt
- Sichtbarkeitssteuerung vollständig über mapLayersVisibility aus Redux umgesetzt
- Dynamische Layererzeugung aus GisSystemStatic integriert
- Marker werden nur angezeigt, wenn zugehöriger Layer aktiv ist
2025-06-04 07:08:35 +02:00

48 lines
1.4 KiB
JavaScript

import { useEffect, useRef } from "react";
import L from "leaflet";
import { createAndSetDevices } from "../utils/createAndSetDevices.js";
import { checkOverlappingMarkers } from "../utils/markerUtils";
import { plusRoundIcon } from "../components/PlusRoundIcon.js";
export const useDynamicMarkerLayers = (
map,
GisSystemStatic,
mapLayersVisibility,
priorityConfig,
setMarkerStates // Funktion wie setMarkers(z.B. map.setMarkers(prev => ({...prev, [systemName]: markers})))
) => {
const layerRefs = useRef({}); // dynamisch pro systemName
useEffect(() => {
if (!map || !Array.isArray(GisSystemStatic?.Systems)) return;
GisSystemStatic.Systems.forEach(system => {
const { id, System_Name } = system;
if (!layerRefs.current[System_Name]) {
layerRefs.current[System_Name] = new L.LayerGroup().addTo(map);
}
// Sichtbarkeit prüfen
const isVisible = mapLayersVisibility?.[System_Name] ?? false;
const layer = layerRefs.current[System_Name];
layer.clearLayers();
createAndSetDevices(
id,
markers => {
setMarkerStates(prev => ({ ...prev, [System_Name]: markers }));
if (isVisible) {
markers.forEach(marker => layer.addLayer(marker));
}
checkOverlappingMarkers(map, markers, plusRoundIcon);
},
GisSystemStatic,
priorityConfig
);
});
}, [map, GisSystemStatic, mapLayersVisibility, priorityConfig]);
};