// /utils/poiUtils.js import L from "leaflet"; import { toast } from "react-toastify"; import circleIcon from "../components/gisPolylines/icons/CircleIcon.js"; import { redrawPolyline } from "./polylines/redrawPolyline.js"; import { store } from "../redux/store"; import { updatePolylineCoordinatesThunk } from "../redux/thunks/database/polylines/updatePolylineCoordinatesThunk"; import { cleanupMarkers } from "@/utils/common/cleanupMarkers"; // 🧠 Zentrale Redux-Dispatch-Hilfsfunktion const savePolylineRedux = lineData => { return store .dispatch( updatePolylineCoordinatesThunk({ idModul: lineData.idModul, idLD: lineData.idLD, newCoordinates: lineData.coordinates, }) ) .unwrap() .catch(error => { console.error("Fehler beim Speichern der Linienkoordinaten:", error.message); }); }; export const insertNewPOI = (closestPoints, newPoint, lineData, map) => { const newMarker = L.marker(newPoint, { icon: circleIcon, draggable: true, }).addTo(map); // Stützpunkt in Koordinatenliste einfügen lineData.coordinates.splice(closestPoints[2], 0, [newPoint.lat, newPoint.lng]); // Redux: Speichern der neuen Koordinaten savePolylineRedux(lineData); redrawPolyline(lineData); newMarker.on("dragend", () => { const newCoords = newMarker.getLatLng(); const newCoordinates = [...lineData.coordinates]; newCoordinates[closestPoints[2]] = [newCoords.lat, newCoords.lng]; lineData.coordinates = newCoordinates; redrawPolyline(lineData); updateMarkerPosition(newCoords, lineData, newMarker); savePolylineRedux(lineData); }); }; export const removePOI = (marker, lineData, currentZoom, currentCenter) => { const index = lineData.coordinates.findIndex(coord => L.latLng(coord[0], coord[1]).equals(marker.getLatLng()) ); if (index !== -1) { lineData.coordinates.splice(index, 1); redrawPolyline(lineData); cleanupMarkers([marker]); savePolylineRedux(lineData); window.location.reload(); } }; export const updateMarkerPosition = (newCoords, lineData, marker) => { if (!marker) return; marker.setLatLng([newCoords.lat, newCoords.lng]); };