import React, { useRef, useEffect, useState } from "react"; // @ts-ignore // eslint-disable-next-line // import mapboxgl from "!mapbox-gl"; import mapboxgl from "mapbox-gl"; import "./App.css"; import { mapOnLoad } from "./layers"; const MAPBOX_TOKEN = "pk.eyJ1IjoiamFrZWMiLCJhIjoiY2tkaHplNGhjMDAyMDJybW4ybmRqbTBmMyJ9.AR_fnEuka8-cFb4Snp3upw"; mapboxgl.accessToken = MAPBOX_TOKEN; export function Map() { const mapContainer = React.useRef(null); const mapRef = React.useRef(null); const [lng, setLng] = useState(151.21084276742022); const [lat, setLat] = useState(-33.8720286260115); const [zoom, setZoom] = useState(17); useEffect(() => { // This is called on every pan if (mapContainer.current === null) { return; } if (mapRef.current !== null) { return; } mapRef.current = new mapboxgl.Map({ container: mapContainer.current, style: "mapbox://styles/mapbox/streets-v12", // style: "mapbox://styles/mapbox/dark-v10", center: [lng, lat], zoom: zoom, }); const map = mapRef.current; map.on("load", mapOnLoad(map)); map.addControl(new mapboxgl.NavigationControl()); map.addControl(new mapboxgl.FullscreenControl()); map.addControl( new mapboxgl.GeolocateControl({ positionOptions: { enableHighAccuracy: true, }, trackUserLocation: true, }) ); map.on("move", () => { if (!map) { return; // wait for map to initialize } const { lng, lat } = map.getCenter(); const zoom = map.getZoom(); console.log(lng, lat, zoom); setLng(map.getCenter().lng); setLat(map.getCenter().lat); setZoom(map.getZoom()); }); }); return (
); }