import React, {Component} from 'react';
import MapView, {Marker, MarkerAnimated} from 'react-native-maps';
import PropTypes from 'prop-types';
import {StyleSheet, View, Image, Text, Alert} from 'react-native';
const theme = require('../../utils/theme');
import {
responsiveHeight,
responsiveWidth,
} from 'react-native-responsive-dimensions';
import IMarker from './IMarker';
import I18n from 'react-native-i18n';
import MapViewDirections from 'react-native-maps-directions';
import {IlinkEmitter} from "./../../utils/events";
const API_KEY = 'AIzaSyCQY0rwMM9Pn9XWt5F6YLhGoez_bU1IGtc';
const mnetwork = require('./../../datas/img/png/home_network.png');
const othernetwork = require('./../../datas/img/png/other_net.png');
import {copilot, CopilotStep} from 'react-native-copilot';
//import {IlinkEmitter} from './../../utils/events';
import DeviceInfo from 'react-native-device-info';
class IMap extends Component {
static propTypes = {
markers: PropTypes.array,
map: PropTypes.object,
network: PropTypes.object,
myNetwork: PropTypes.object,
selectedMarker: PropTypes.object,
myPosition: PropTypes.object,
onMarkerClick: PropTypes.func,
initialRegion: PropTypes.object,
typeMap: PropTypes.string,
needRoad: PropTypes.bool,
isNeedUserFocus: PropTypes.bool,
onNeedRoadReady: PropTypes.func,
onNeedRoadError: PropTypes.func,
onMapReady: PropTypes.func,
onLayout: PropTypes.func,
};
static defaultProps = {
isNeedUserFocus: false,
};
constructor(props) {
super(props);
this.state = {
markers: [],
roadReady: false,
isNeedUserFocus: false,
positionMarkerText: I18n.t('YOUR_THERE'),
};
IlinkEmitter.on('langueChange', this.updateLangue.bind(this));
}
getPositionMarkerText() {
let currentLanguage = I18n.currentLocale();
let myPositionMarkerText = null;
switch (currentLanguage) {
case 'fr':
myPositionMarkerText = 'Vous ĂȘtes ici';
break;
case 'en':
myPositionMarkerText = 'You are here';
break;
default:
myPositionMarkerText = I18n.t('YOUR_THERE');
break;
}
return myPositionMarkerText;
}
updateLangue() {
//Alert.alert("Langue", I18n.currentLocale(), [{ text: "Ok", onPress: () => { } }]);
this.setState({positionMarkerText: this.getPositionMarkerText()});
}
mapRef = ref => {
this.mapview = ref;
};
componentDidUpdate(prevProps, prevState) {
if (prevState.positionMarkerText !== this.state.positionMarkerText) {
this.forceUpdate();
}
}
getMapRef = () => this.mapview;
componentWillReceiveProps(nextProps, nextContext) {
const markers = this.state.markers;
const newmarkers = nextProps.markers;
if (markers.length <= 0) {
this.setState({markers: newmarkers});
} else if (markers.length !== newmarkers) {
this.setState({markers: newmarkers});
}
this.setState({isNeedUserFocus: nextProps.isNeedUserFocus});
}
render() {
const {
markers,
initialRegion,
myPosition,
myNetwork,
typeMap,
selectedMarker,
} = this.props;
if (initialRegion !== null && myNetwork !== null) {
return (
(this.mapview = re)}
onMapReady={this.props.onMapReady}
onLayout={this.props.onLayout}
onRegionChangeComplete={re => {
this.onRegionChangeOver(re);
}}>
{this.state.markers.map((item, index) => {
return (
this.props.onMarkerClick(e, marker)}
network={myNetwork}
/>
);
})}
{this.renderMyPosition()}
{this.makeDirection()}
);
} else {
return ;
}
}
focusToUser() {
this.setState({isNeedUserFocus: true});
}
closeUserFocus() {
this.setState({isNeedUserFocus: false});
}
onRegionChangeOver(region) {}
makeDirection() {
let {myPosition, selectedMarker, needRoad} = this.props;
if (
myPosition !== null &&
selectedMarker !== null &&
selectedMarker !== undefined &&
myPosition !== undefined &&
needRoad
) {
setTimeout(() => {
if (!this.state.roadReady) {
this.setState({roadReady: true});
this.props.onNeedRoadError();
}
}, 10000);
return (
{
this.setState({roadReady: true});
this.props.onNeedRoadReady(data);
}}
onError={() => {
this.setState({roadReady: true});
this.props.onNeedRoadError();
}}
strokeColor={theme.primary}
/>
);
}
}
renderMyPosition() {
const {myPosition, myNetwork} = this.props;
if (myPosition != null) {
return (
);
}
}
}
export default IMap;
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#FFF',
},
myClusterTextStyle: {
color: 'white',
},
myClusterStyle: {
backgroundColor: theme.accent,
height: 32,
justifyContent: 'center',
alignItems: 'center',
width: 32,
borderRadius: 16,
},
rowContainer: {
height: 52,
flex: 1,
flexDirection: 'row',
justifyContent: 'flex-start',
alignItems: 'center',
},
iconContainer: {
marginRight: 16,
},
mapmarker: {
width: 52,
height: 52,
},
slidingup: {
backgroundColor: 'transparent',
position: 'absolute',
height: 300,
bottom: 0,
right: 35,
zIndex: 1,
},
panel: {
flex: 1,
backgroundColor: 'white',
position: 'relative',
},
panelHeader: {
height: 120,
backgroundColor: '#b197fc',
alignItems: 'center',
justifyContent: 'center',
},
favoriteIcon: {
left: responsiveWidth(75),
backgroundColor: theme.primary,
width: 64,
justifyContent: 'center',
alignContent: 'center',
bottom: -64,
position: 'absolute',
height: 64,
padding: 8,
zIndex: 1,
borderRadius: 32,
},
hambuger: {},
topBar: {
position: 'absolute',
alignSelf: 'center',
justifyContent: 'center',
alignItems: 'center',
marginTop: responsiveHeight(4),
width: responsiveWidth(95),
},
searchInput: {
width: responsiveWidth(70),
fontSize: 14,
},
search: {
width: responsiveWidth(70),
height: responsiveHeight(10),
backgroundColor: '#00000000',
},
map: {
width: responsiveWidth(100),
height: responsiveHeight(100),
},
backgroundd_drawer: {
backgroundColor: '#000',
},
cardsearch: {
width: responsiveWidth(90),
height: responsiveHeight(10),
position: 'absolute',
alignSelf: 'center',
marginTop: 5,
},
actionButtonIcon: {
fontSize: 20,
height: 22,
color: 'white',
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
},
instructions: {
textAlign: 'center',
color: '#333333',
marginBottom: 5,
},
});