// /utils/markerUtils.js import L from "leaflet"; import { toast } from "react-toastify"; import circleIcon from "../components/CircleIcon"; import { store } from "../redux/store"; import { updatePolylineCoordinatesThunk } from "../redux/thunks/database/polylines/updatePolylineCoordinatesThunk"; import { redrawPolyline } from "./mapUtils"; 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 insertNewMarker = (closestPoints, newPoint, lineData, map) => { const newMarker = L.marker(newPoint, { icon: circleIcon, draggable: true, }).addTo(map); lineData.coordinates.splice(closestPoints[2], 0, [newPoint.lat, newPoint.lng]); savePolylineRedux(lineData); // ✅ Nutzung der Hilfsfunktion 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(newMarker.getLatLng(), lineData, newMarker); savePolylineRedux(lineData); // ✅ Wiederverwendung }); }; export const removeMarker = (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); marker.remove(); savePolylineRedux(lineData); // ✅ Wiederverwendung window.location.reload(); } }; export const handleEditPoi = (marker, userRights, setCurrentPoiData, setShowPoiUpdateModal, fetchPoiData, toast) => { if (!Array.isArray(userRights)) { toast.error("Benutzerrechte sind ungültig.", { position: "top-center", autoClose: 5000, }); return; } if (!userRights.some((r) => r.IdRight === 56)) { toast.error("Benutzer hat keine Berechtigung zum Bearbeiten.", { position: "top-center", autoClose: 5000, }); return; } setCurrentPoiData({ idPoi: marker.options.id, name: marker.options.name, description: marker.options.description, }); fetchPoiData(marker.options.id); setShowPoiUpdateModal(true); };