- 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
48 lines
1.4 KiB
JavaScript
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]);
|
|
};
|