import React, { Component } from "react"; import { Platform, StyleSheet, View, Alert, NetInfo, Geolocation, TouchableOpacity, SafeAreaView, StatusBar, Image, TouchableHighlight } from "react-native"; import Header from "../../components/Public/header"; import Text from "react-native-text"; import { SearchBar } from "react-native-elements"; import { observer, inject } from "mobx-react/native"; import { observable, transaction } from "mobx"; import { scale, verticalScale, moderateScale } from "react-native-size-matters"; import { width, height } from "../../config/screen"; import Permissions from "react-native-permissions"; import MapView, { Polyline } from "react-native-maps"; import MapViewDirections from "react-native-maps-directions"; import AsyncStorageHelper from "../../config/asyncStorageHelper"; import { KeyboardAwareScrollView } from "react-native-keyboard-aware-scroll-view"; import theme from "../../config/colors"; import MyStatusBar from "../../components/Public/statusBar"; const asyncStorageHelper = new AsyncStorageHelper(); import { GooglePlacesAutocomplete } from "react-native-google-places-autocomplete"; const origin = { latitude: 22.320508, longitude: 114.170222 }; const destination = { latitude: 22.320568, longitude: 114.171273 }; const GOOGLE_MAPS_APIKEY = "AIzaSyB_9Wi7BcAgqMPxZvW_5DWb8UxF5W9tWz0"; @inject(["menuStore"], ["userStore"]) @observer export default class Map extends Component { @observable markerId = null; @observable region = { latitude: 22.396427, longitude: 114.109497, latitudeDelta: 1, longitudeDelta: 1 }; constructor(props) { super(props); this.store = this.props.menuStore; this.userStore = this.props.userStore; this.state = { region: { latitude: null, longitude: null, latitudeDelta: 1, longitudeDelta: 1 } }; } _requestPermission() { Permissions.request("location").then(response => { // Returns once the user has chosen to 'allow' or to 'not allow' access // Response is one of: 'authorized', 'denied', 'restricted', or 'undetermined' // this.setState({ photoPermission: response }) if ( response == "allow" || response == "restricted" || response == "authorized" ) { navigator.geolocation.getCurrentPosition( position => { console.log(position.coords.latitude); this.map.animateToRegion({ latitude: position.coords.latitude, longitude: position.coords.longitude, latitudeDelta: 0.02, longitudeDelta: 0.02 }); }, error => { console.log(error); this.region = { latitude: 22.396427, longitude: 114.109497, latitudeDelta: 1, longitudeDelta: 1 }; }, { enableHighAccuracy: false, timeout: 4000, maximumAge: 10000 } ); } else { this.region = { latitude: 22.396427, longitude: 114.109497, latitudeDelta: 1, longitudeDelta: 1 }; } }); } goPosition(data, details) { this.map.animateToRegion({ latitude: details.geometry.location.lat, longitude: details.geometry.location.lng, latitudeDelta: 0.02, longitudeDelta: 0.02 }); for (var i = 0; i < this.props.perfdefinedPlaces.length; i++) { if ( this.props.perfdefinedPlaces[i].geometry.location.lat == details.geometry.location.lat && this.props.perfdefinedPlaces[i].geometry.location.lng == details.geometry.location.lng ) { this.markerId = this.props.perfdefinedPlaces[i].id break; } } console.log(details); } clickMarkerAction(id) { this.markerId = id; this.store.pickupPointId = id; this.userStore.pickupPointId = id; } picked(id) { asyncStorageHelper.saveData("pickupPointId", id); this.store.getMenuItem(this); //this.props.navigation.navigate('menu') } confirmButton() { if (!this.markerId) { return null; } else { return ( { this.props.onPress && this.props.onPress(this.markerId); }} > {this.userStore.text.confirm} ); } } componentWillMount() { this.setUserLocation(); this._requestPermission(); if (this.props.onRef) { this.props.onRef(undefined); } } componentDidMount() { if (this.props.onRef) { this.props.onRef(this); } } setUserLocation() { console.log(this.userStore.userLocation); if (this.userStore.userLocation === null) { this.setState({ region: { latitude: 22.396427, longitude: 114.109497, latitudeDelta: 1, longitudeDelta: 1 } }); } else { this.setState({ region: { latitude: this.userStore.userLocation.coords.latitude, longitude: this.userStore.userLocation.coords.longitude, latitudeDelta: 0.02, longitudeDelta: 0.02 } }); } } render() { return ( { this.map = ref; }} style={{ width: width, flex: 1 }} showsUserLocation={true} initialRegion={this.region} > {this.userStore.pickupPointLabel.map(marker => ( this.clickMarkerAction(marker.id)} > ))} {this.confirmButton()} ); } } const styles = StyleSheet.create({ container: { flex: 1, alignItems: "center", backgroundColor: "#F5FCFF" }, welcome: { fontSize: 20, textAlign: "center", margin: 10 }, instructions: { textAlign: "center", color: "#333333", marginBottom: 5 } });