import React, { useEffect, useRef, useState } from "react"; import { Marker, useMapEvents } from "react-leaflet"; import "leaflet/dist/leaflet.css"; import L from "leaflet"; import { Alert, Box, Button, Stack, Typography, Zoom } from "@mui/material"; import dynamic from "next/dynamic"; import MapLoading from "@/core/components/MapLayer/Loading"; import HereIcon from "@/assets/images/examine_marker_active.png"; const MapLayer = dynamic(() => import("@/core/components/MapLayer"), { loading: () => , ssr: false, }); const createCustomIcon = (size, iconUrl, labelText, color) => { if (labelText) { return L.divIcon({ className: "custom-marker", // Apply your custom CSS class html: `
${labelText}
`, iconSize: [50, 50], iconAnchor: [25, 50], }); } return L.icon({ iconUrl: iconUrl, iconSize: size, iconAnchor: [size[0] / 2, size[1]], popupAnchor: [0, -size[1]], }); }; const MAX_ZOOM_FOR_MARKER = 13; const MapInteraction = ({ setValue, startLat, startLng }) => { const [isMarkerLocked, setIsMarkerLocked] = useState(!!(startLat && startLng)); // وضعیت قفل مارکر const [enableSend, setEnableSend] = useState(false); const [startIconColor, setStartIconColor] = useState(startLat ? "#1CAC66" : "#003d4f"); // رنگ آیکن شروع const [markerPosition, setMarkerPosition] = useState( startLat && startLng ? { lat: startLat, lng: startLng } : null ); const markerRef = useRef(); const map = useMapEvents({ move(e) { setEnableSend(e.target.getZoom() > MAX_ZOOM_FOR_MARKER); if (!isMarkerLocked && markerRef.current) { markerRef.current.setLatLng(e.target.getCenter()); } }, zoom(e) { setEnableSend(e.target.getZoom() > MAX_ZOOM_FOR_MARKER); if (!isMarkerLocked && markerRef.current) { markerRef.current.setLatLng(e.target.getCenter()); } }, }); useEffect(() => { if (startLat && startLng) { const position = { lat: startLat, lng: startLng }; map.setView(position, 15); } }, [startLat, startLng, map]); const handleMarkerClick = () => { if (!enableSend) return; if (!isMarkerLocked) { const center = map.getCenter(); setValue("start_point", { lat: center.lat.toString(), lng: center.lng.toString() }); setMarkerPosition({ lat: center.lat, lng: center.lng }); // به‌روزرسانی موقعیت مارکر setIsMarkerLocked(true); setStartIconColor("#1CAC66"); } }; const handleUnlockMarker = () => { setValue("start_point", null); // حذف مقدار قبلی setIsMarkerLocked(false); // باز کردن قفل مارکر setMarkerPosition(null); // تنظیم مارکر به مرکز نقشه setStartIconColor("#003d4f"); }; return ( <> برای ثبت محل فعالیت، لطفاً نقشه را بیشتر زوم کنید. {isMarkerLocked && ( )} ); }; const MapInfoOneMarker = ({ setValue, errors, StartPoint = null }) => { return ( {errors.start_point && ( {errors.start_point.message} )} ); }; export default MapInfoOneMarker;