import { useState, useEffect } from "react" import { MapContainer, TileLayer, Marker, useMapEvents } from 'react-leaflet' import LocationRepository from '../../../repository/LocationRepository' const NZ_BOUNDS = [ [-47.204642, 165.344238], [-34.307144, 179.824219] ] function LocationMarker(props) { const [position, setPosition] = useState(null) const map = useMapEvents({ click(e) { const newPosition = e.latlng; setPosition(newPosition); props.updateFilterState({ "coordinates": newPosition }); props.setNextDisabled(false); } }) map.whenReady(() => { const savedCoordinates = props.filters["coordinates"]; if (!position && savedCoordinates) { setPosition(savedCoordinates); props.setNextDisabled(false); map.flyTo(savedCoordinates, 9) } }) return position === null ? null : ( ) } const fitNZBounds = (map) => { map.fitBounds(NZ_BOUNDS); } function LocationDetailsDisplay(props) { const [locationDetails, setLocationDetails] = useState({}) useEffect(() => { if (props.filters["coordinates"]) { LocationRepository.getLocationData(props.filters).then(result => { setLocationDetails(result); }) } }, [props.filters, props.filters.coordinates] ); const savedCoordinates = props.filters["coordinates"]; if (savedCoordinates) { const soilString = `${locationDetails.soil_name} (${locationDetails.soil_code})` return (
Latitude: {savedCoordinates.lat}
Longitude: {savedCoordinates.lng}
Address: {locationDetails.full_address}
Ecological Region: {locationDetails.ecological_region}
Ecological District: {locationDetails.ecological_district}
Soil Order: {locationDetails.soil_name ? soilString : ""}
) } return null } export default function Map(props) { return (
) }