@ -1,4 +1,4 @@
import React , { useContext , useState , useEffect } from "react" ;
import React , { useContext , useState , useEffect , memo } from "react" ;
import { StyleSheet , View , Text , Image } from "react-native" ;
import { StyleSheet , View , Text , Image } from "react-native" ;
import colors from "../config/colors" ;
import colors from "../config/colors" ;
@ -9,13 +9,14 @@ import { EventLocationContext } from "../context/EventLocationContext";
import { TouchableOpacity } from "react-native-gesture-handler" ;
import { TouchableOpacity } from "react-native-gesture-handler" ;
import { CurrentLocationContext } from "../context/CurrentLocationContext" ;
import { CurrentLocationContext } from "../context/CurrentLocationContext" ;
import OpenStreetMap from "../components/map/OpenStreetMap" ;
import OpenStreetMap from "../components/map/OpenStreetMap" ;
import { MapRefContext } from "../context/MapRefContext" ;
// NOTE: Implementação posterior: É interessante adcionar um searchBox para que o usuário busque um endereço (google places autocomplete é uma api paga)
// NOTE: Implementação posterior: É interessante adcionar um searchBox para que o usuário busque um endereço (google places autocomplete é uma api paga)
const MapFormScreen = ( props ) => {
const MapFormScreen = ( props ) => {
const context = useContext ( EventLocationContext ) ; //local do evento
const context = useContext ( EventLocationContext ) ; //local do evento
const [ position , setPosition ] = useState ( null ) ;
const [ position , setPosition ] = useState ( null ) ;
const location = useContext ( CurrentLocationContext ) . curr entCoordinates;
const location = useContext ( EventLocationContext ) . ev entCoordinates;
useEffect ( ( ) => {
useEffect ( ( ) => {
setPosition ( {
setPosition ( {
@ -25,8 +26,8 @@ const MapFormScreen = (props) => {
} ) ;
} ) ;
} , [ location ] ) ;
} , [ location ] ) ;
const [ moveEndListener , setMoveEndListener ] = useState ( "" ) ;
console . log ( moveEndListener ) ;
const [ moveEndListener , setMoveEndListener ] = useState ( null ) ;
//console.log("=====POSIÇÃO: " +position.lat);
const getAddress = async ( coordenadas ) => {
const getAddress = async ( coordenadas ) => {
Location . setGoogleApiKey ( "AIzaSyD_wuuokS3SVczc8qSASrsBq0E5qIpdyMc" ) ;
Location . setGoogleApiKey ( "AIzaSyD_wuuokS3SVczc8qSASrsBq0E5qIpdyMc" ) ;
@ -42,18 +43,41 @@ const MapFormScreen = (props) => {
context . saveNewLocation ( "Erro ao carregar endereço" , coordenadas ) ;
context . saveNewLocation ( "Erro ao carregar endereço" , coordenadas ) ;
}
}
} ;
} ;
const refContext = useContext ( MapRefContext ) ;
const setLocation = ( ) => {
const setLocation = ( ) => {
getAddress ( moveEndListener ) ;
getAddress ( moveEndListener ) ;
props . navigation . goBack ( null ) ;
props . navigation . goBack ( null ) ;
} ;
} ;
//leva o mapa pra localização escolhida pelo usuário
const aplyLocation = ( p ) => {
//setPosition(position);
setMoveEndListener ( p ) ;
if ( refContext . mapRef ) {
refContext . mapRef . injectJavaScript ( `
if ( moveend == true ) {
map . setView ( [ $ { p . latitude } , $ { p . longitude } ] , $ { 16.5 } ) ; moveend = false
} ` );
}
} ;
//inicia o mapa na região do usuário ou no ultimo valor do marker
if ( refContext . mapRef && moveEndListener == null ) {
console . log ( "IIIIIIIIIIIIIIIIIIIIF " + location . latitude )
refContext . mapRef . injectJavaScript ( `
map . setView ( [ $ { position . lat } , $ { position . long } ] , $ { 16.5 } ) ; moveend = false
` );
}
return (
return (
< View style = { styles . container } >
< View style = { styles . container } >
< OpenStreetMap
< OpenStreetMap
style = { styles . mapStyle }
style = { styles . mapStyle }
animateToPosition = { position }
animateToPosition = { position }
moveEndListener = { setMoveEndListener }
moveEndListener = { e => aplyLocation ( e ) }
/ >
/ >
< View style = { styles . markerFixed } >
< View style = { styles . markerFixed } >