"use client"; import "./ReportForm.scss"; import "leaflet/dist/leaflet.css"; import Image from "next/image"; import { MapContainer, Marker, Popup, TileLayer, useMapEvents, } from "react-leaflet"; import clip from "./icons/clip.svg"; import arrow_right from "./icons/arrow-right.svg"; import pin_image from "./icons/pin-image.svg"; import { ChangeEventHandler, useState } from "react"; import { Icon } from "leaflet"; import pin_icon from "./icons/pin_icon.svg"; import axios from "axios"; import { apiInstance } from "@/shared/config/apiConfig"; import { useSession } from "next-auth/react"; interface ILatLng { lat: number; lng: number; } const ReportForm = () => { const session = useSession(); const [latLng, setLatLng] = useState([]); const [displayLatLng, setDisplayLatLng] = useState([]); const [images, setImages] = useState([]); const position = { lat: 42.8746, lng: 74.606, }; const customIcon = new Icon({ iconUrl: pin_icon.src, iconSize: [32, 32], }); const handleImages: ChangeEventHandler = (e) => { if (e.target.files) { const getArrayFromObject = Array.from(e.target.files); setImages(getArrayFromObject); } }; const deleteImage = (name: string) => { setImages((prev) => prev.filter((img) => img.name !== name)); }; const createReport: React.MouseEventHandler< HTMLFormElement > = async (e) => { e.preventDefault(); const Authorization = `Bearer ${session.data?.access_token}`; const config = { headers: { Authorization, }, }; const formData = new FormData(e.currentTarget); images.forEach((image) => { formData.append("image", image); }); formData.append("latitude1", latLng[0].lat.toString()); formData.append("longitude1", latLng[0].lng.toString()); formData.append("latitude2", latLng[1].lat.toString()); formData.append("longitude2", latLng[1].lng.toString()); const res = await apiInstance.post( "/report/create/", formData, config ); console.log(res.status); }; const MapPins = (e: any) => { useMapEvents({ click(e) { if (latLng.length < 2) { setLatLng([...latLng, e.latlng]); axios .get( `https://nominatim.openstreetmap.org/reverse?lat=${e.latlng.lat}&lon=${e.latlng.lng}&format=json` ) .then((res) => setDisplayLatLng([ ...displayLatLng, res.data.display_name, ]) ) .catch((error) => console.log(error)); } }, }); return latLng.map((l) => ( )); }; return (

Как отметить участок дороги?

Pin Image

Поставьте булавку и начните рисовать участок дороги{" "} (он может состоять из любого количества ломаных линий)

Чтобы удалить отрезок нажмите на точки повторно.