| 
									
										
										
										
											2019-06-16 13:09:54 +00:00
										 |  |  | import React,{Component} from 'react' | 
					
						
							|  |  |  | import {StyleSheet, Text, View, Alert, AsyncStorage, BackHandler, PermissionsAndroid} from 'react-native' | 
					
						
							|  |  |  | import {Fumi} from 'react-native-textinput-effects' | 
					
						
							|  |  |  | import {responsiveHeight,responsiveWidth} from 'react-native-responsive-dimensions' | 
					
						
							|  |  |  | import FontAwesome from 'react-native-vector-icons/FontAwesome' | 
					
						
							|  |  |  | import Button from  'apsl-react-native-button' | 
					
						
							|  |  |  | let theme=require('./../../utils/theme.json') | 
					
						
							|  |  |  | import {getCountryNetwork, reinitpassword} from './../../webservice/AuthApi' | 
					
						
							|  |  |  | import * as Animatable from 'react-native-animatable'; | 
					
						
							|  |  |  | import I18n from "react-native-i18n" | 
					
						
							|  |  |  | import Geolocation from "react-native-geolocation-service"; | 
					
						
							|  |  |  | import {getPositionInformation} from "../../webservice/MapService"; | 
					
						
							|  |  |  | import isEqual from 'lodash/isEqual' | 
					
						
							|  |  |  | let country=require('./../../utils/country_code.json'); | 
					
						
							|  |  |  | import Icon from 'react-native-vector-icons/MaterialIcons'; | 
					
						
							| 
									
										
										
										
											2020-12-07 13:47:35 +00:00
										 |  |  | import _ from 'lodash'; | 
					
						
							| 
									
										
										
										
											2019-06-16 13:09:54 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | const GEOLOCATION_OPTIONS= { enableHighAccuracy: true, timeout: 20000 } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const route=require("./../../route.json") | 
					
						
							|  |  |  | export default class ForgottenPassword extends Component{ | 
					
						
							|  |  |  |     static navigatorStyle = { | 
					
						
							|  |  |  |         drawUnderNavBar: true, | 
					
						
							|  |  |  |         navBarHidden:true, | 
					
						
							|  |  |  |         drawUnderStatusBar: false, | 
					
						
							|  |  |  |         statusBarHidden: true, | 
					
						
							|  |  |  |         statusBarTextColorScheme: 'light', | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     handlePasswordRef=ref=>this.state.passRef=ref; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     constructor(props){ | 
					
						
							|  |  |  |         super(props); | 
					
						
							| 
									
										
										
										
											2020-12-07 13:47:35 +00:00
										 |  |  |         console.log("RESET PASSWORD PROPS",this.props); | 
					
						
							|  |  |  |         console.warn("USER TYPE", this.props.navigation.state.params.type, typeof this.props.navigation.state.params.type); | 
					
						
							| 
									
										
										
										
											2019-06-16 13:09:54 +00:00
										 |  |  |         this.state=this.initState(); | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     initState(){ | 
					
						
							|  |  |  |         return { | 
					
						
							|  |  |  |             phone:'', | 
					
						
							|  |  |  |             passRef:null, | 
					
						
							|  |  |  |             isSending:false, | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     _retrieveData = async () => { | 
					
						
							|  |  |  |         try { | 
					
						
							|  |  |  |             const value = await AsyncStorage.getItem('position'); | 
					
						
							|  |  |  |             console.warn(value) | 
					
						
							|  |  |  |             if (value !== null) { | 
					
						
							|  |  |  |                 let re=JSON.parse(value) | 
					
						
							|  |  |  |                 re.longitudeDelta=0.04 | 
					
						
							|  |  |  |                 re.latitudeDelta=0.01 | 
					
						
							|  |  |  |                 const pos=JSON.parse(value) | 
					
						
							|  |  |  |                 this.setState({region:re,oldPosition:pos}) | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } catch (error) { | 
					
						
							|  |  |  |             console.warn(error) | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |     watchLocation(geo=null) { | 
					
						
							|  |  |  |         const options= geo==null?GEOLOCATION_OPTIONS:geo | 
					
						
							|  |  |  |         this.watchID = Geolocation.getCurrentPosition((position) => { | 
					
						
							|  |  |  |                 const myLastPosition = this.state.myPosition; | 
					
						
							|  |  |  |                 const myPosition = position.coords; | 
					
						
							|  |  |  |                 if (!isEqual(myPosition, myLastPosition)) { | 
					
						
							|  |  |  |                     console.warn(myPosition) | 
					
						
							|  |  |  |                     if(myPosition.longitude!==0 && myPosition.latitude!==0) { | 
					
						
							|  |  |  |                         this.retreiveinformationFromPosition(myPosition) | 
					
						
							|  |  |  |                     }else{ | 
					
						
							|  |  |  |                         if(!this.state.alreadyRetry) { | 
					
						
							|  |  |  |                             this.setState({alreadyRetry: true}) | 
					
						
							|  |  |  |                             let geo = {enableHighAccuracy: false, timeout: 20000, maximumAge: 1000} | 
					
						
							|  |  |  |                             this.watchLocation(geo) | 
					
						
							|  |  |  |                         }else{ | 
					
						
							|  |  |  |                             if(this.state.oldPosition){ | 
					
						
							|  |  |  |                                 this.retreiveinformationFromPosition(this.state.oldPosition) | 
					
						
							|  |  |  |                             }else{ | 
					
						
							|  |  |  |                                 Geolocation.watchPosition((position)=>{ | 
					
						
							|  |  |  |                                     if(position.longitude!==0 && position.latitude!==0) { | 
					
						
							|  |  |  |                                         this.retreiveinformationFromPosition(position) | 
					
						
							|  |  |  |                                     }else{ | 
					
						
							|  |  |  |                                         Alert.alert(I18n.t("UNABLE_GET_INFORMATION") | 
					
						
							|  |  |  |                                             ,I18n.t('UNABLE_GET_INFORMATION_TEXT'), | 
					
						
							|  |  |  |                                             [{text:I18n.t("EXIT"),onPress:()=>{BackHandler.exitApp()}}, | 
					
						
							|  |  |  |                                                 {text:I18n.t("RESTART"),onPress:()=>{this.watchLocation()}}], | 
					
						
							|  |  |  |                                             {cancelable:false} | 
					
						
							|  |  |  |                                         )}},(error)=>{ | 
					
						
							|  |  |  |                                     this.setState({loadingDialog:false}) | 
					
						
							|  |  |  |                                     Alert.alert(I18n.t("TITLE_ERROR_SURVENU"), | 
					
						
							|  |  |  |                                         I18n.t("TEXT_ERROR_START_APPLICATION"), | 
					
						
							|  |  |  |                                         [{text:"Ok",onPress:()=>{ | 
					
						
							|  |  |  |                                                 BackHandler.exitApp() | 
					
						
							|  |  |  |                                             }}], | 
					
						
							|  |  |  |                                         {cancelable:false}) | 
					
						
							|  |  |  |                                 },GEOLOCATION_OPTIONS) | 
					
						
							|  |  |  |                             } | 
					
						
							|  |  |  |                         } | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             },(positionError) => { | 
					
						
							|  |  |  |                 console.warn(positionError) | 
					
						
							|  |  |  |                 Alert.alert(I18n.t("UNABLE_GET_INFORMATION") | 
					
						
							|  |  |  |                     ,I18n.t('UNABLE_GET_INFORMATION_TEXT'), | 
					
						
							|  |  |  |                     [{text:I18n.t("EXIT"),onPress:()=>{BackHandler.exitApp()}}, | 
					
						
							|  |  |  |                         {text:I18n.t("RESTART"),onPress:()=>{this.watchLocation()}}], | 
					
						
							|  |  |  |                     {cancelable:false} | 
					
						
							|  |  |  |                 ) | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             ,options) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     retreiveinformationFromPosition(myPosition){ | 
					
						
							|  |  |  |         getPositionInformation(myPosition).then((response)=>{ | 
					
						
							|  |  |  |             console.log(response,myPosition) | 
					
						
							|  |  |  |             if(response.results!==undefined){ | 
					
						
							|  |  |  |                 if(response.results.length>0) { | 
					
						
							|  |  |  |                     let most = response.results[0] | 
					
						
							|  |  |  |                     let {address_components, formatted_address, place_id} = most | 
					
						
							|  |  |  |                     this.setState({address: address_components, textadress: formatted_address, place: place_id}) | 
					
						
							|  |  |  |                     let results=response.results; | 
					
						
							|  |  |  |                     let shortcountry; | 
					
						
							|  |  |  |                     let mcountry; | 
					
						
							|  |  |  |                     for (let i=0; i < results[0].address_components.length; i++) { | 
					
						
							|  |  |  |                         for (let j=0; j < results[0].address_components[i].types.length; j++) { | 
					
						
							|  |  |  |                             if (results[0].address_components[i].types[j] === "country") { | 
					
						
							|  |  |  |                                 mcountry = results[0].address_components[i]; | 
					
						
							|  |  |  |                                 shortcountry=mcountry.short_name; | 
					
						
							|  |  |  |                                 this.setState({shortCountry:mcountry.short_name,longCountry: mcountry.long_name}) | 
					
						
							|  |  |  |                             } | 
					
						
							|  |  |  |                         } | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                     for (let i of country) { | 
					
						
							|  |  |  |                         if(i.code=== shortcountry){ | 
					
						
							|  |  |  |                             this.setState({indicatif:i.dial_code,enterPhone:i.dial_code})}} | 
					
						
							|  |  |  |                 }else{ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 this.setState({phoneEnabled:true,loadingDialog:false}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             }else{ | 
					
						
							|  |  |  |                 console.log(myPosition,response) | 
					
						
							|  |  |  |                 this.showConnexionAlertError() | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         }).catch((e)=>{ | 
					
						
							|  |  |  |             console.log(e) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             this.setState({phoneEnabled:true,loadingDialog:false}); | 
					
						
							|  |  |  |             Alert.alert(I18n.t("TITLE_PROBLE_COME"), | 
					
						
							|  |  |  |                 I18n.t("TEXT_UNABLE_TO_GET_COUNTRY_INFO"),[{text:"Ok",onPress:()=>{ | 
					
						
							|  |  |  |                         this.watchLocation() | 
					
						
							|  |  |  |                     }}],{cancelable:false}) | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     componentDidMount(){ | 
					
						
							|  |  |  |         this.props.navigation.addListener("didFocus",payload=>{ | 
					
						
							|  |  |  |             this._retrieveData() | 
					
						
							|  |  |  |             this.requestCameraPermission() | 
					
						
							|  |  |  |         }) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     async requestCameraPermission() { | 
					
						
							|  |  |  |         try { | 
					
						
							|  |  |  |             const granted = await PermissionsAndroid.request( | 
					
						
							|  |  |  |                 PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION, | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     'title': 'Cool Photo App Camera Permission', | 
					
						
							|  |  |  |                     'message': 'Cool Photo App needs access to your camera ' + | 
					
						
							|  |  |  |                         'so you can take awesome pictures.' | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |             if (granted === PermissionsAndroid.RESULTS.GRANTED) { | 
					
						
							|  |  |  |                 this.watchLocation() | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 this.setState({loadingDialog:false}) | 
					
						
							|  |  |  |                 Alert.alert(I18n.t("TITLE_UNABLE_TO_AUTORISE"), | 
					
						
							|  |  |  |                     I18n.t("MISSING_AUTORISATION_LOCATION"), | 
					
						
							|  |  |  |                     [{text:"Ok",onPress:()=>{ | 
					
						
							|  |  |  |                             BackHandler.exitApp() | 
					
						
							|  |  |  |                         }}],                            {cancelable:false} | 
					
						
							|  |  |  |                 ) | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } catch (err) { | 
					
						
							|  |  |  |             console.warn("ee",err) | 
					
						
							|  |  |  |             this.setState({loadingDialog:false}) | 
					
						
							|  |  |  |             Alert.alert(I18n.t("TITLE_ERROR_SURVENU"), | 
					
						
							|  |  |  |                 I18n.t("TEXT_ERROR_START_APPLICATION"), | 
					
						
							|  |  |  |                 [{text:"Ok",onPress:()=>{ | 
					
						
							|  |  |  |                         BackHandler.exitApp() | 
					
						
							|  |  |  |                     }}],                            {cancelable:false} | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     render(){ | 
					
						
							|  |  |  |         return <View style={{ | 
					
						
							| 
									
										
										
										
											2020-12-07 13:47:35 +00:00
										 |  |  |             backgroundColor:this.props.navigation.state.params.type===0?theme.primary:theme.primaryDarkAdvanced, | 
					
						
							| 
									
										
										
										
											2019-06-16 13:09:54 +00:00
										 |  |  |             flex:1, | 
					
						
							| 
									
										
										
										
											2020-12-07 13:47:35 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-16 13:09:54 +00:00
										 |  |  |         }}> | 
					
						
							|  |  |  |                <View style={{flexDirection:'row',flex:1}}> | 
					
						
							|  |  |  |                 <Icon.Button name={"keyboard-backspace"} | 
					
						
							|  |  |  |                 color={"white"} | 
					
						
							|  |  |  |                 size={24} | 
					
						
							| 
									
										
										
										
											2020-12-07 13:47:35 +00:00
										 |  |  |                 backgroundColor={this.props.navigation.state.params.type===0?theme.primary:theme.primaryDarkAdvanced} | 
					
						
							| 
									
										
										
										
											2019-06-16 13:09:54 +00:00
										 |  |  |                 onPress={()=>this.props.navigation.pop()} | 
					
						
							|  |  |  |                 /> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 </View> | 
					
						
							|  |  |  |             <View style={{ flex:4, justifyContent:'center', | 
					
						
							|  |  |  |             alignItems:'center'}} > | 
					
						
							| 
									
										
										
										
											2020-12-07 13:47:35 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-16 13:09:54 +00:00
										 |  |  |             <Text | 
					
						
							|  |  |  |                 style={styles.TitlePassword} | 
					
						
							|  |  |  |             > | 
					
						
							|  |  |  |                 {I18n.t("FORGOTTEN_PASSWORD")} | 
					
						
							|  |  |  |             </Text> | 
					
						
							|  |  |  |             <Text style={styles.subtitlePassword}> | 
					
						
							|  |  |  |                 {I18n.t("TEXT_FORGOTTEN_PASSWORD")} | 
					
						
							|  |  |  |                 </Text> | 
					
						
							|  |  |  |             <Animatable.View  ref={(ref)=>{this.handlePasswordRef(ref)}}> | 
					
						
							|  |  |  |                 <View style={{flexDirection:'row',justifyContent:'center'}}> | 
					
						
							|  |  |  |                     <Fumi iconClass={FontAwesome} | 
					
						
							|  |  |  |                           iconName={'phone'} | 
					
						
							|  |  |  |                           label={"Indicatif"} | 
					
						
							|  |  |  |                           style={styles.inputCode} | 
					
						
							|  |  |  |                           value={this.state.indicatif} | 
					
						
							|  |  |  |                           iconColor={theme.accent} | 
					
						
							|  |  |  |                     /> | 
					
						
							|  |  |  |                     <Fumi iconClass={FontAwesome} | 
					
						
							|  |  |  |                           iconName={'phone'} | 
					
						
							|  |  |  |                           label={I18n.t("PHONE_NUMBER")} | 
					
						
							|  |  |  |                           style={styles.input} | 
					
						
							|  |  |  |                           onChangeText={(text) => { this.setState({phone: text})}} | 
					
						
							|  |  |  |                           iconColor={theme.accent} | 
					
						
							|  |  |  |                     /> | 
					
						
							|  |  |  |                 </View> | 
					
						
							|  |  |  |             </Animatable.View> | 
					
						
							|  |  |  |             <Button style={styles.btnsend} | 
					
						
							|  |  |  |                     isLoading={this.state.isSending} | 
					
						
							|  |  |  |                     isDisabled={this.state.isSending} | 
					
						
							|  |  |  |                     textStyle={styles.btntext} onPress={()=>{this.onRenitPassword()}}>{I18n.t("SEND")}</Button> | 
					
						
							|  |  |  |         </View> | 
					
						
							|  |  |  |         </View> | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     onRenitPassword() { | 
					
						
							|  |  |  |        if(this.state.phone.length>0){ | 
					
						
							| 
									
										
										
										
											2020-12-07 13:47:35 +00:00
										 |  |  |            if(this.props.navigation.state.params.type!==null){ | 
					
						
							|  |  |  |                let type= this.props.navigation.state.params.type === 0 ? 'user' : 'agent'; | 
					
						
							|  |  |  |                console.log("Type user send", this.props.navigation.state.params.type); | 
					
						
							|  |  |  |                this.setState({isSending:true}); | 
					
						
							| 
									
										
										
										
											2019-06-16 13:09:54 +00:00
										 |  |  |                reinitpassword(this.state.indicatif+this.state.phone,type).then((data)=>{ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                    this.setState({isSending:false}) | 
					
						
							| 
									
										
										
										
											2020-12-07 13:47:35 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-16 13:09:54 +00:00
										 |  |  |                    if(data.error){ | 
					
						
							|  |  |  |                        this.state.passRef.shake(1200); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                        Alert.alert("",data.message,[{text:"Ok"}]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                    }else if(data.success===1) { | 
					
						
							|  |  |  |                        Alert.alert("", data.message, [{text: "Ok"}]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                        setTimeout(() => { | 
					
						
							|  |  |  |                            this.props.navigation.popToTop() | 
					
						
							|  |  |  |                        },1000) | 
					
						
							|  |  |  |                    } | 
					
						
							|  |  |  |                    }) | 
					
						
							|  |  |  |            } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |        } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const styles=StyleSheet.create({ | 
					
						
							|  |  |  |    TitlePassword:{ | 
					
						
							|  |  |  |       marginLeft:20, | 
					
						
							|  |  |  |         marginRight:20, | 
					
						
							|  |  |  |         color:'white', | 
					
						
							|  |  |  |         fontWeight:'bold', | 
					
						
							|  |  |  |         fontSize:20, | 
					
						
							|  |  |  |         textAlign:'center' | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     subtitlePassword:{ | 
					
						
							|  |  |  |         margin:20, | 
					
						
							|  |  |  |         color:'white', | 
					
						
							|  |  |  |         fontSize:20, | 
					
						
							|  |  |  |         textAlign:'center' | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     btntext:{ | 
					
						
							|  |  |  |         color:'white', | 
					
						
							|  |  |  |         fontWeight:'bold', | 
					
						
							|  |  |  |         fontSize:17 | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     btnsend:{ | 
					
						
							|  |  |  |         backgroundColor:theme.accent, | 
					
						
							|  |  |  |         borderColor:'transparent', | 
					
						
							|  |  |  |         marginRight:20, | 
					
						
							|  |  |  |         marginTop:20, | 
					
						
							|  |  |  |         height:responsiveHeight(8), | 
					
						
							|  |  |  |         marginLeft:20 | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     input:{ | 
					
						
							|  |  |  |         height:54, | 
					
						
							|  |  |  |         marginLeft:3, | 
					
						
							|  |  |  |         width:responsiveWidth(60), | 
					
						
							|  |  |  |         marginRight:20, | 
					
						
							|  |  |  |         borderRadius:10, | 
					
						
							|  |  |  |         justifyContent:'center', | 
					
						
							|  |  |  |         textAlign:'center' | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     inputCode:{ | 
					
						
							|  |  |  |         height:54, | 
					
						
							|  |  |  |         width:responsiveWidth(30), | 
					
						
							|  |  |  |         marginRight:10, | 
					
						
							|  |  |  |         borderRadius:10, | 
					
						
							|  |  |  |         justifyContent:'center', | 
					
						
							|  |  |  |         textAlign:'center' | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | }) |