diff --git a/components/mainComponent/MapComponent.js b/components/mainComponent/MapComponent.js index 4707ef8b1..b08512363 100644 --- a/components/mainComponent/MapComponent.js +++ b/components/mainComponent/MapComponent.js @@ -488,14 +488,14 @@ const MapComponent = ({ locations, onLocationUpdate, lineCoordinates }) => { }, [areaMarkers, map]); //---------------------------------- - const { markerStates, layerRefs } = useDynamicDeviceLayers(map, GisSystemStatic, mapLayersVisibility, priorityConfig); + const { markerStates, layerRefs } = useDynamicDeviceLayers(map, GisSystemStatic, mapLayersVisibility, priorityConfig, oms); useEffect(() => { const handleVisibilityChange = () => { if (!map) return; const allMarkers = Object.values(markerStates).filter(Array.isArray).flat(); - checkOverlappingMarkers(map, allMarkers, plusRoundIcon); + checkOverlappingMarkers(map, allMarkers, plusRoundIcon, oms); }; window.addEventListener("visibilityChanged", handleVisibilityChange); @@ -695,7 +695,14 @@ const MapComponent = ({ locations, onLocationUpdate, lineCoordinates }) => { checkOverlappingMarkers(map, allMarkers, plusRoundIcon); }, [map, markerStates, mapLayersVisibility]); - + //--------------------------------------------- + // 🧠 Optional für Debugging für überlappende Markers + useEffect(() => { + if (oms) { + console.log("📌 OMS ready:", oms); + window.oms = oms; // Für Debugging global + } + }, [oms]); //--------------------------------------------- //-------------------------------------------- return ( diff --git a/config/appVersion.js b/config/appVersion.js index 28cd5ae7e..1eebc77b5 100644 --- a/config/appVersion.js +++ b/config/appVersion.js @@ -1,2 +1,2 @@ // /config/appVersion -export const APP_VERSION = "1.1.202"; +export const APP_VERSION = "1.1.203"; diff --git a/hooks/layers/useDynamicDeviceLayers.js b/hooks/layers/useDynamicDeviceLayers.js index 9e271d4d6..021568a62 100644 --- a/hooks/layers/useDynamicDeviceLayers.js +++ b/hooks/layers/useDynamicDeviceLayers.js @@ -12,7 +12,7 @@ import plusRoundIcon from "../../components/icons/devices/overlapping/PlusRoundI * @param {object} priorityConfig - Konfig für Prioritäten * @returns {{ markerStates, layerRefs }} Alle Marker und Referenzen */ -const useDynamicDeviceLayers = (map, GisSystemStatic, mapLayersVisibility, priorityConfig) => { +const useDynamicDeviceLayers = (map, GisSystemStatic, mapLayersVisibility, priorityConfig, oms) => { const [markerStates, setMarkerStates] = useState({}); const layerRefs = useRef({}); @@ -29,8 +29,11 @@ const useDynamicDeviceLayers = (map, GisSystemStatic, mapLayersVisibility, prior IdSystem, (newMarkers) => { setMarkerStates((prev) => ({ ...prev, [Name]: newMarkers })); - newMarkers.forEach((m) => layerRefs.current[Name].addLayer(m)); - checkOverlappingMarkers(map, newMarkers, plusRoundIcon); + newMarkers.forEach((m) => { + layerRefs.current[Name].addLayer(m); + if (oms) oms.addMarker(m); // ✅ Marker bei OMS registrieren + }); + checkOverlappingMarkers(map, newMarkers, plusRoundIcon, oms); }, GisSystemStatic, priorityConfig diff --git a/utils/devices/createAndSetDevices.js b/utils/devices/createAndSetDevices.js index fd838a865..091ae9fa4 100644 --- a/utils/devices/createAndSetDevices.js +++ b/utils/devices/createAndSetDevices.js @@ -149,6 +149,9 @@ export const createAndSetDevices = async (systemId, setMarkersFunction, GisSyste if (map.contextmenu && contextMenuItemIds.size > 0) { contextMenuItemIds.forEach((id) => map.contextmenu.removeItem(id)); contextMenuItemIds.clear(); + if (window.oms && typeof window.oms.addMarker === "function") { + window.oms.addMarker(marker); + } } }); diff --git a/utils/mapUtils.js b/utils/mapUtils.js index ef0f51882..d96063504 100644 --- a/utils/mapUtils.js +++ b/utils/mapUtils.js @@ -21,7 +21,7 @@ export const restoreMapSettings = (map) => { // Globales Array, um Plus-Icons zu speichern let plusMarkers = []; -export const checkOverlappingMarkers = (map, markers, plusIcon) => { +export const checkOverlappingMarkers = (map, markers, plusIcon, oms) => { if (!Array.isArray(markers)) { console.warn("⚠️ checkOverlappingMarkers erwartet ein Array, aber erhielt:", markers); return; @@ -40,31 +40,24 @@ export const checkOverlappingMarkers = (map, markers, plusIcon) => { } }); - // alte PlusIcons entfernen plusMarkers.forEach((plusMarker) => map.removeLayer(plusMarker)); plusMarkers = []; - // neue PlusIcons hinzufügen for (const coords in overlappingGroups) { if (overlappingGroups[coords].length > 1) { const latLng = L.latLng(coords.match(/[-.\d]+/g).map(Number)); const plusMarker = L.marker(latLng, { icon: plusIcon }).addTo(map); plusMarkers.push(plusMarker); - plusMarker.on("click", (e) => { - const clickedLatLng = e.latlng; - const nearbyMarkers = markers.filter((marker) => map.distance(marker.getLatLng(), clickedLatLng) < 50); - if (nearbyMarkers.length > 0) { - nearbyMarkers[0].fire("click"); + plusMarker.on("click", () => { + const nearbyMarkers = overlappingGroups[coords]; + + if (oms && nearbyMarkers.length > 0) { + oms.spiderfy(nearbyMarkers); // ✅ Zeige Marker als Spider } }); } } - - if (Object.keys(overlappingGroups).length === 0) { - plusMarkers.forEach((plusMarker) => map.removeLayer(plusMarker)); - plusMarkers = []; - } }; export const handlePlusIconClick = (map, markers, oms, clickedLatLng) => {