@ -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 } >
@ -62,7 +86,7 @@ const MapFormScreen = (props) => {
resizeMode = "contain"
resizeMode = "contain"
source = { require ( "../assets/map-marker.png" ) }
source = { require ( "../assets/map-marker.png" ) }
/ >
/ >
< / V i e w >
< / V i e w >
< View style = { styles . submit_btn } >
< View style = { styles . submit_btn } >
< TouchableOpacity onPress = { ( ) => setLocation ( ) } >
< TouchableOpacity onPress = { ( ) => setLocation ( ) } >
@ -90,7 +114,7 @@ const styles = StyleSheet.create({
} ,
} ,
mapStyle : {
mapStyle : {
position : "absolute" ,
position : "absolute" ,
alignSelf : "center" ,
alignSelf : "center" ,
top : 0 ,
top : 0 ,
left : 0 ,
left : 0 ,
right : 0 ,
right : 0 ,
@ -113,8 +137,8 @@ const styles = StyleSheet.create({
alignSelf : "center" ,
alignSelf : "center" ,
justifyContent : "center" ,
justifyContent : "center" ,
position : "absolute" ,
position : "absolute" ,
flexDirection : "row" ,
alignItems : "flex-start" ,
flexDirection : "row" ,
alignItems : "flex-start" ,
// bottom: "50%",
// bottom: "50%",
// top: "50%",
// top: "50%",
height : "13%" ,
height : "13%" ,
@ -129,7 +153,7 @@ const styles = StyleSheet.create({
} ,
} ,
marker : {
marker : {
height : "50%" ,
height : "50%" ,
// alignSelf:"flex-end",
// alignSelf:"flex-end",
width : 40 ,
width : 40 ,
} ,
} ,
callback : {
callback : {