edited
This commit is contained in:
		
							
								
								
									
										125
									
								
								app/containers/Account/account.js
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										125
									
								
								app/containers/Account/account.js
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,125 @@ | ||||
| import React, { Component } from "react"; | ||||
| import { | ||||
|   Platform, | ||||
|   StyleSheet, | ||||
|   Text, | ||||
|   View, | ||||
|   Alert, | ||||
|   SafeAreaView | ||||
| } from "react-native"; | ||||
| import { observable } from "mobx"; | ||||
| import { observer, inject } from "mobx-react/native"; | ||||
| import ScrollableTabView from "react-native-scrollable-tab-view"; | ||||
| //component | ||||
| import DrawerNavigationHeader from "../../components/Public/drawerNavigationHeader"; | ||||
| import AccountSettings from "./accountSettings"; | ||||
| import Login from "../Login/login"; | ||||
| import Payment from "./payment"; | ||||
| import Header from '../../components/Public/signInUpHeader' | ||||
| // function | ||||
| import { width, height } from "../../config/screen"; | ||||
| import Log from '../../config/log' | ||||
| import theme from "../../config/colors"; | ||||
| import {Fonts} from '../../config/fonts' | ||||
| import AsyncStorageHelper from "../../config/asyncStorageHelper"; | ||||
| import language from "../../config/language"; | ||||
| const asyncStorageHelper = new AsyncStorageHelper(); | ||||
| const log = new Log() | ||||
| @inject(["menuStore"], ["userStore"]) | ||||
| @observer | ||||
| export default class Account extends Component { | ||||
|  | ||||
|   constructor(props) { | ||||
|     super(props); | ||||
|     this.store = this.props.userStore; | ||||
|     this.menuStore = this.props.menuStore; | ||||
|   } | ||||
|  | ||||
|   @observable | ||||
|   static navigationOptions = { | ||||
|     drawerLabel: "Account", | ||||
|     swipeEnabled: false, | ||||
|     tabBarLabel: language.en.profile, | ||||
|   }; | ||||
|  | ||||
|  | ||||
|   componentWillMount() { | ||||
|    this.init(); | ||||
|   } | ||||
|  | ||||
|   init() { | ||||
|     console.log(this.store.logined) | ||||
|     if (!this.store.logined) { | ||||
|    //   this.props.navigation.navigate("Login"); | ||||
|     } else { | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   changeIndex(index) { | ||||
|     this.tabMap.index = index; | ||||
|   } | ||||
|  | ||||
|   logoutAlert() { | ||||
|     Alert.alert( | ||||
|       "Logout", | ||||
|       "Are you sure to Logout?", | ||||
|       [ | ||||
|         { | ||||
|           text: "Cancel", | ||||
|           onPress: () => console.log("Cancel Pressed"), | ||||
|           style: "cancel" | ||||
|         }, | ||||
|         { text: "Sure", onPress: () => this.logoutAction() } | ||||
|       ], | ||||
|       { cancelable: false } | ||||
|     ); | ||||
|   } | ||||
|  | ||||
|   logoutAction() { | ||||
|     this.store.logoutPost(this); | ||||
|   } | ||||
|   navigatieAction(page) { | ||||
|     this.props.navigation.navigate(page); | ||||
|   } | ||||
|  | ||||
|   render() { | ||||
|     log.firebaseClass('profile') | ||||
|       return ( | ||||
|         <SafeAreaView style={{ backgroundColor: theme.mainColor, flex: 1 }}> | ||||
|           <View style={styles.container}> | ||||
|            <Header navigation = {this.props.navigation}/> | ||||
|             <ScrollableTabView | ||||
|            style={{marginTop: 20, }} | ||||
|             tabBarTextStyle = {{fontFamily:Fonts.century,fontWeight:'bold'}} | ||||
|              tabBarActiveTextColor={theme.mainColor} | ||||
|              tabBarUnderlineStyle={{ backgroundColor: "white", height: 1 }} | ||||
|              tabBarBackgroundColor={"white"}> | ||||
|               <AccountSettings | ||||
|                 tabLabel="My Information" | ||||
|                 navigation={this.props.navigation} | ||||
|               /> | ||||
|               <Payment tabLabel="Credit card details" navigation={this.props.navigation} /> | ||||
|             </ScrollableTabView> | ||||
|           </View> | ||||
|         </SafeAreaView> | ||||
|       ); | ||||
|   } | ||||
| } | ||||
|  | ||||
| const styles = StyleSheet.create({ | ||||
|   container: { | ||||
|     flex: 1, | ||||
|     height: height, | ||||
|     width: width | ||||
|   }, | ||||
|   welcome: { | ||||
|     fontSize: 20, | ||||
|     textAlign: "center", | ||||
|     margin: 10 | ||||
|   }, | ||||
|   instructions: { | ||||
|     textAlign: "center", | ||||
|     color: "#333333", | ||||
|     marginBottom: 5 | ||||
|   } | ||||
| }); | ||||
							
								
								
									
										336
									
								
								app/containers/Account/accountSettings.js
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										336
									
								
								app/containers/Account/accountSettings.js
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,336 @@ | ||||
| import React, { Component } from "react"; | ||||
| import { | ||||
|   Platform, | ||||
|   StyleSheet, | ||||
|   View, | ||||
|   TextInput, | ||||
|   TouchableOpacity | ||||
| } from "react-native"; | ||||
| import { observable } from "mobx"; | ||||
| import { observer, inject } from "mobx-react/native"; | ||||
| import Text from "react-native-text"; | ||||
| import { scale, verticalScale, moderateScale } from "react-native-size-matters"; | ||||
| import { Dropdown } from "react-native-material-dropdown"; | ||||
| import { Button } from "react-native-elements"; | ||||
| import firebase from "react-native-firebase"; | ||||
| import Toast, { DURATION } from "react-native-easy-toast"; | ||||
| //component | ||||
| import DrawerNavigationHeader from "../../components/Public/drawerNavigationHeader"; | ||||
| import theme from "../../config/colors"; | ||||
| import { Fonts } from "../../config/fonts"; | ||||
| import Size from "../../config/size"; | ||||
| import Countdown, { CountdownStatus } from "rn-countdown"; | ||||
| // function | ||||
| import { width, height } from "../../config/screen"; | ||||
| import AsyncStorageHelper from "../../config/asyncStorageHelper"; | ||||
| import Loader from "../../components/Public/loader"; | ||||
|  | ||||
| const asyncStorageHelper = new AsyncStorageHelper(); | ||||
| const size = new Size(); | ||||
|  | ||||
| @inject(["menuStore"], ["userStore"]) | ||||
| @observer | ||||
| export default class AccountSettings extends Component { | ||||
|   @observable pickupPointIndexExist = false; | ||||
|   password = ""; | ||||
|   pickupPoint = []; | ||||
|   @observable index = 1; | ||||
|   @observable | ||||
|   code = 0; | ||||
|   @observable | ||||
|   password = ""; | ||||
|   @observable | ||||
|   verificationCode = ""; | ||||
|   static navigationOptions = { | ||||
|     drawerLabel: "Account" | ||||
|   }; | ||||
|  | ||||
|   constructor(props) { | ||||
|     super(props); | ||||
|     this.store = this.props.userStore; | ||||
|     this.menuStore = this.props.menuStore; | ||||
|   } | ||||
|   navigatieAction(page, Param) { | ||||
|     this.props.navigation.navigate(page, Param); | ||||
|   } | ||||
|   checking() { | ||||
|     asyncStorageHelper.getData("pickupPointId", pickupPointId => { | ||||
|       if (pickupPointId != null) { | ||||
|         console.log("index: " + pickupPointId); | ||||
|         this.pickupPointIndexExist = true; | ||||
|         this.index = this.getIndex(pickupPointId); | ||||
|       } | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   changeIndex(index) { | ||||
|     this.tabMap.index = index; | ||||
|   } | ||||
|  | ||||
|   positionValue() { | ||||
|     if (this.pickupPointIndexExist) { | ||||
|       return this.store.pickupPointLabel[this.pickupPointIndex].value; | ||||
|     } else { | ||||
|       return null; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   positionChange(id) { | ||||
|     asyncStorageHelper.saveData("pickupPointId", id); | ||||
|     this.menuStore.getMenuItem(); | ||||
|   } | ||||
|  | ||||
|   handleNetworkFailed = () => alert("network failed"); | ||||
|  | ||||
|   handleStopCountdown = () => this.countdown && this.countdown.stopCountdown(); | ||||
|  | ||||
|   handleClickCountdown = () => { | ||||
|     var bodyFormData = new FormData(); | ||||
|  | ||||
|     bodyFormData.append("country_code", "852"); | ||||
|     bodyFormData.append( | ||||
|       "phone_number", | ||||
|       this.store.userData.data.member.mobile.toString() | ||||
|     ); | ||||
|  | ||||
|     this.store.sendsmsVerify(bodyFormData, this); | ||||
|   }; | ||||
|  | ||||
|   getIndex(id) { | ||||
|     var index = this.store.pickupPointLabel.findIndex(function(item, i) { | ||||
|       return item.id == parseInt(id); | ||||
|     }); | ||||
|     return index; | ||||
|   } | ||||
|  | ||||
|   startToCountDown = () => { | ||||
|     this.countdown && this.countdown.startCountdown(); | ||||
|   }; | ||||
|  | ||||
|   resetPassword() { | ||||
|     // this.store.signupPost(api.signup, this.signInData, this); | ||||
|     if (this.verificationCode != null || this.verificationCode != "") { | ||||
|       if (this.password != null || this.password != "") { | ||||
|         if (this.password.length >= 8) { | ||||
|           var data = { | ||||
|             verificationCode: this.verificationCode, | ||||
|             mobile: this.store.userData.data.member.mobile.toString(), | ||||
|             countryCode: "852", | ||||
|             password: this.password | ||||
|           }; | ||||
|           this.store.forgotPassword(data, this); | ||||
|         } else { | ||||
|           this.refs.toast.show("your password must be at least 8 characters"); | ||||
|         } | ||||
|       } else { | ||||
|         this.refs.toast.show("Please enter reset password"); | ||||
|       } | ||||
|     } else { | ||||
|       this.refs.toast.show("Please enter verification number"); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   countDownButton() { | ||||
|     return ( | ||||
|       <View style={{ flex: 1 }}> | ||||
|         <Countdown | ||||
|           ref={r => (this.countdown = r)} | ||||
|           time={60} | ||||
|           onPress={this.handleClickCountdown} | ||||
|           onNetworkFailed={this.handleNetworkFailed} | ||||
|           onDidFinishCountdown={this.handleCountdownOver} | ||||
|         > | ||||
|           {({ status, time }) => { | ||||
|             let title, containerStyle, titleStyle; | ||||
|             switch (status) { | ||||
|               case CountdownStatus.Idle: | ||||
|                 title = "send"; | ||||
|                 containerStyle = styles.countdown; | ||||
|                 titleStyle = styles.countdownTitle; | ||||
|                 break; | ||||
|               case CountdownStatus.Counting: | ||||
|                 title = `sent(${time})`; | ||||
|                 containerStyle = styles.countdown; | ||||
|                 titleStyle = styles.countdownTitle; | ||||
|                 break; | ||||
|               case CountdownStatus.Over: | ||||
|                 title = "send"; | ||||
|                 containerStyle = styles.countdown; | ||||
|                 titleStyle = styles.countdownTitle; | ||||
|                 break; | ||||
|             } | ||||
|             return ( | ||||
|               <View style={containerStyle}> | ||||
|                 <Text style={titleStyle}>{title}</Text> | ||||
|               </View> | ||||
|             ); | ||||
|           }} | ||||
|         </Countdown> | ||||
|       </View> | ||||
|     ); | ||||
|   } | ||||
|  | ||||
|   render() { | ||||
|     if (this.store.logined) { | ||||
|       this.checking(); | ||||
|       return ( | ||||
|         <View style={styles.container}> | ||||
|           <Loader loading={this.store.loading} /> | ||||
|           <View style={{ flex: 1 }}> | ||||
|             <View style={styles.TextContainer}> | ||||
|               <Text | ||||
|                 style={styles.TextView} | ||||
|                 underlineColorAndroid="rgba(0,0,0,0)" | ||||
|               > | ||||
|                 {this.store.userData.data.member.name} | ||||
|               </Text> | ||||
|             </View> | ||||
|             <View style={styles.TextContainer}> | ||||
|               <Text style={styles.TextView}> | ||||
|                 {this.store.userData.data.member.email} | ||||
|               </Text> | ||||
|             </View> | ||||
|             <View style={styles.TextContainer}> | ||||
|               <Text style={styles.TextView}> | ||||
|                 +{this.store.userData.data.member.countryCode}{" "} | ||||
|                 {this.store.userData.data.member.mobile} | ||||
|               </Text> | ||||
|             </View> | ||||
|  | ||||
|             <View style={styles.TextContainer}> | ||||
|               <TextInput | ||||
|                 style={styles.TextView} | ||||
|                 placeholder={"Reset Password(at least 8 characters)"} | ||||
|                 secureTextEntry={true} | ||||
|                 underlineColorAndroid="rgba(0,0,0,0)" | ||||
|                 value={this.password} | ||||
|                 onChangeText={value => (this.password = value)} | ||||
|               /> | ||||
|             </View> | ||||
|             <View | ||||
|               style={{ | ||||
|                 marginLeft: 20, | ||||
|                 marginRight: 20, | ||||
|                 marginTop: 20, | ||||
|                 flexDirection: "row", | ||||
|                 justifyContent: "space-between" | ||||
|               }} | ||||
|             > | ||||
|               {this.countDownButton()} | ||||
|  | ||||
|               <View | ||||
|                 style={{ | ||||
|                   backgroundColor: theme.inputBgc, | ||||
|                   marginLeft: 10, | ||||
|                   alignSelf: 'stretch', | ||||
|                   justifyContent: "center", | ||||
|                   height: verticalScale(40), | ||||
|                   borderRadius: 5, | ||||
|                   flex: 1 | ||||
|                 }} | ||||
|               > | ||||
|                 <TextInput | ||||
|                   style={{ | ||||
|                     // backgroundColor:theme.inputBgc, | ||||
|                     color: theme.foodNameColor, | ||||
|                     fontSize: size.getSize(12), | ||||
|                     paddingRight: 30, | ||||
|                     paddingLeft: 40, | ||||
|                     fontFamily: Fonts.century, | ||||
|                     paddingVertical: 0, | ||||
|                     alignSelf: 'stretch' | ||||
|                   }} | ||||
|                   underlineColorAndroid="rgba(0,0,0,0)" | ||||
|                   placeholder="verification no." | ||||
|                   keyboardType={"numeric"} | ||||
|                   placeholderStyle={{ | ||||
|                     fontWeight: "bold", | ||||
|                     fontFamily: Fonts.century, | ||||
|                     fontSize: size.getSize(10), | ||||
|                     paddingVertical: 0 | ||||
|                   }} | ||||
|                   value={this.verificationCode} | ||||
|                   onChangeText={text => (this.verificationCode = text)} | ||||
|                   placeholderTextColor={theme.foodNameColor} | ||||
|                 /> | ||||
|               </View> | ||||
|             </View> | ||||
|           </View> | ||||
|           <Button | ||||
|             title="Reset" | ||||
|             fontWeight="bold" | ||||
|             fontSize={size.getSize(18)} | ||||
|             fontFamily={Fonts.century} | ||||
|             titleStyle={{ | ||||
|               color: "white", | ||||
|               fontFamily: Fonts.century, | ||||
|               fontWeight: "bold", | ||||
|               fontSize: 50 | ||||
|             }} | ||||
|             onPress={() => this.resetPassword()} | ||||
|             // loading={false} | ||||
|             loadingProps={{ size: "large", color: "rgba(111, 202, 186, 1)" }} | ||||
|             buttonStyle={styles.signupButton} | ||||
|           /> | ||||
|           <Toast ref="toast" position={"center"} /> | ||||
|         </View> | ||||
|       ); | ||||
|     } else { | ||||
|       return null; | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| const styles = StyleSheet.create({ | ||||
|   container: { | ||||
|     flex: 1, | ||||
|     alignItems: "center", | ||||
|     backgroundColor: "white", | ||||
|     width: width | ||||
|   }, | ||||
|   welcome: { | ||||
|     fontSize: 20, | ||||
|     textAlign: "center", | ||||
|     margin: 10 | ||||
|   }, | ||||
|   instructions: { | ||||
|     textAlign: "center", | ||||
|     color: "#333333", | ||||
|     marginBottom: 5 | ||||
|   }, | ||||
|   TextView: { | ||||
|     color: theme.coolGrey, | ||||
|     fontSize: size.getSize(15), | ||||
|     paddingRight: 20, | ||||
|     paddingLeft: 20, | ||||
|     fontWeight: "bold", | ||||
|     fontFamily: Fonts.century | ||||
|   }, | ||||
|   TextContainer: { | ||||
|     backgroundColor: theme.inputBgc, | ||||
|     marginTop: 20, | ||||
|     marginLeft: 20, | ||||
|     marginRight: 20, | ||||
|     width: width - 40, | ||||
|     height: verticalScale(40), | ||||
|     borderRadius: 5, | ||||
|     justifyContent: "center" | ||||
|   }, | ||||
|   signupButton: { | ||||
|     width: width, | ||||
|     height: verticalScale(60), | ||||
|     backgroundColor: theme.mainColor | ||||
|   }, | ||||
|   countdown: { | ||||
|     borderRadius: 5, | ||||
|     borderWidth: 2, | ||||
|     borderColor: theme.coolGrey, | ||||
|     height: verticalScale(40), | ||||
|     justifyContent: "center", | ||||
|     alignItems: "center" | ||||
|   }, | ||||
|   countdownTitle: { | ||||
|     color: theme.coolGrey, | ||||
|     fontSize: 12 | ||||
|   } | ||||
| }); | ||||
							
								
								
									
										177
									
								
								app/containers/Account/addCard.js
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										177
									
								
								app/containers/Account/addCard.js
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,177 @@ | ||||
| import React, { Component } from "react"; | ||||
| import { | ||||
|   Platform, | ||||
|   StyleSheet, | ||||
|   View, | ||||
|   TouchableOpacity, | ||||
|   ScrollView, | ||||
|   Switch, | ||||
|   SafeAreaView, | ||||
| } from "react-native"; | ||||
| import { observable, action } from "mobx"; | ||||
| import Text from "react-native-text"; | ||||
| import { observer, inject } from "mobx-react/native"; | ||||
| import { scale, verticalScale, moderateScale } from "react-native-size-matters"; | ||||
| import Icon from "react-native-vector-icons/dist/Ionicons"; | ||||
| import Toast, { DURATION } from "react-native-easy-toast"; | ||||
| import { | ||||
|   CreditCardInput, | ||||
|   LiteCreditCardInput | ||||
| } from "react-native-credit-card-input"; | ||||
|  | ||||
| import DrawerNavigationHeader from "../../components/Public/drawerNavigationHeader"; | ||||
| import Loader from "../../components/Public/loader" | ||||
| import { width, height } from "../../config/screen"; | ||||
| import theme from '../../config/colors' | ||||
| import {Fonts} from '../../config/fonts' | ||||
| import Size from "../../config/size"; | ||||
| const size = new Size(); | ||||
|  | ||||
| @inject(["userStore"]) | ||||
| @observer | ||||
| export default class AddCard extends Component { | ||||
|   constructor(props) { | ||||
|     super(props); | ||||
|     this.store = this.props.userStore; | ||||
|   } | ||||
|  | ||||
|   cardData = null; | ||||
|  | ||||
|   //_onFocus = field => console.log("focusing", field); | ||||
|  | ||||
|   addCardAction() { | ||||
|     var BreakException = {}; | ||||
|     if (this.cardData != null) { | ||||
|       if (this.cardData.valid) { | ||||
|         let data = { | ||||
|           num: this.cardData.values.number.replace(/\s/g, ""), | ||||
|           expiry: this.cardData.values.expiry.replace("/", ""), | ||||
|           cvc: this.cardData.values.cvc | ||||
|         }; | ||||
|  | ||||
|         console.log(this.cardData); | ||||
|         this.store.postCreditCard(this.props.navigation,data); | ||||
|       } else { | ||||
|         try { | ||||
|           Object.keys(this.cardData.status).forEach(e => { | ||||
|             console.log(e + " - " + this.cardData.status[e]); | ||||
|             if ( | ||||
|               this.cardData.status[e] == "incomplete" || | ||||
|               this.cardData.status[e] == "invalid" | ||||
|             ) { | ||||
|               this.refs.toast.show(e + " " + this.cardData.status[e]); | ||||
|               throw BreakException; | ||||
|             } | ||||
|           }); | ||||
|         } catch (e) { | ||||
|           if (e !== BreakException) throw e; | ||||
|         } | ||||
|       } | ||||
|     } else { | ||||
|       this.refs.toast.show("please insert card number"); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   render() { | ||||
|     return ( | ||||
|       <SafeAreaView style={{ flex: 1, backgroundColor: theme.mainColor }}> | ||||
|       <View style={styles.container}> | ||||
|       <Loader | ||||
|       loading = {this.store.loading}/> | ||||
|         <View | ||||
|           style={{ | ||||
|             width: width, | ||||
|             height: "10%", | ||||
|             alignItems: "center", | ||||
|             justifyContent: "center", | ||||
|             marginTop: 20, | ||||
|             flexDirection: "row" | ||||
|           }} | ||||
|         > | ||||
|           <View | ||||
|             style={{ | ||||
|               width: "30%", | ||||
|               height: "100%", | ||||
|               justifyContent: "center", | ||||
|               paddingLeft: 5 | ||||
|             }} | ||||
|           > | ||||
|             <Icon | ||||
|               name="ios-arrow-back" | ||||
|               size={size.getSize(50)} | ||||
|               color="black" | ||||
|               onPress={() => { | ||||
|                 this.props.navigation.goBack(); | ||||
|               }} | ||||
|             /> | ||||
|           </View> | ||||
|  | ||||
|           <View | ||||
|             style={{ | ||||
|               width: "40%", | ||||
|               height: "100%", | ||||
|               justifyContent: "center", | ||||
|               alignItems: "center" | ||||
|             }} | ||||
|           > | ||||
|             <Text style={{ fontSize: 22, fontFamily: Fonts.century, }}>Add a Card</Text> | ||||
|           </View> | ||||
|  | ||||
|           <View | ||||
|             style={{ | ||||
|               width: "30%", | ||||
|               paddingRight: 5, | ||||
|               height: "100%", | ||||
|               flexDirection: "row", | ||||
|               justifyContent: "flex-end", | ||||
|               alignItems: "center" | ||||
|             }} | ||||
|           > | ||||
|             <Icon | ||||
|               name="md-add" | ||||
|               size={size.getSize(50)} | ||||
|               color="black" | ||||
|               onPress={() => this.addCardAction()} | ||||
|             /> | ||||
|           </View> | ||||
|         </View> | ||||
|         <LiteCreditCardInput | ||||
|           autoFocus | ||||
|           requiresName | ||||
|           requiresCVC | ||||
|           labelStyle={styles.label} | ||||
|           inputStyle={styles.input} | ||||
|           validColor={"black"} | ||||
|           invalidColor={"red"} | ||||
|           placeholderColor={"darkgray"} | ||||
|           onChange={form => (this.cardData = form)} | ||||
|         /> | ||||
|  | ||||
|          | ||||
|       </View> | ||||
|       <Toast ref="toast" /> | ||||
|       </SafeAreaView> | ||||
|     ); | ||||
|   } | ||||
| } | ||||
|  | ||||
| const styles = StyleSheet.create({ | ||||
|   container: { | ||||
|     flex: 1, | ||||
|     backgroundColor: "#F5FCFF" | ||||
|   }, | ||||
|   switch: { | ||||
|     alignSelf: "center", | ||||
|     marginTop: 20, | ||||
|     marginBottom: 20 | ||||
|   }, | ||||
|  | ||||
|   label: { | ||||
|     color: "black", | ||||
|     fontSize: 12 | ||||
|   }, | ||||
|   input: { | ||||
|     fontSize: 16, | ||||
|     color: "black" | ||||
|   } | ||||
| }); | ||||
							
								
								
									
										374
									
								
								app/containers/Account/payment.js
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										374
									
								
								app/containers/Account/payment.js
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,374 @@ | ||||
| import React, { Component } from "react"; | ||||
| import { | ||||
|   Platform, | ||||
|   StyleSheet, | ||||
|   View, | ||||
|   TouchableOpacity, | ||||
|   Alert, | ||||
|   SafeAreaView | ||||
| } from "react-native"; | ||||
| import { observable, action, transaction } from "mobx"; | ||||
| import Text from "react-native-text"; | ||||
| import { Button } from "react-native-elements"; | ||||
| import { observer, inject } from "mobx-react/native"; | ||||
| import { scale, verticalScale, moderateScale } from "react-native-size-matters"; | ||||
| import Icon from "react-native-vector-icons/dist/Ionicons"; | ||||
| import Icon2 from "react-native-vector-icons/dist/MaterialCommunityIcons"; | ||||
| import Toast, { DURATION } from "react-native-easy-toast"; | ||||
| import Log from '../../config/log' | ||||
| import { | ||||
|   CreditCardInput, | ||||
|   LiteCreditCardInput | ||||
| } from "react-native-credit-card-input"; | ||||
| //component | ||||
| import DrawerNavigationHeader from "../../components/Public/drawerNavigationHeader"; | ||||
| // function | ||||
| import theme from "../../config/colors"; | ||||
| import { Fonts } from "../../config/fonts"; | ||||
| import { width, height } from "../../config/screen"; | ||||
| import Loader from "../../components/Public/loader"; | ||||
| import Size from "../../config/size"; | ||||
| const size = new Size(); | ||||
| const log = new Log() | ||||
|  | ||||
| @inject(["userStore"]) | ||||
| @observer | ||||
| export default class Payment extends Component { | ||||
|   @observable | ||||
|   menu = false; | ||||
|   @observable | ||||
|   addCard = false; | ||||
|   cardData = null; | ||||
|  | ||||
|   static navigationOptions = { | ||||
|     drawerLabel: "Account" | ||||
|   }; | ||||
|  | ||||
|   constructor(props) { | ||||
|     super(props); | ||||
|     this.store = this.props.userStore; | ||||
|   } | ||||
|  | ||||
|   changeIndex(index) { | ||||
|     this.tabMap.index = index; | ||||
|   } | ||||
|  | ||||
|   addCardAction() { | ||||
|     var BreakException = {}; | ||||
|     if (this.cardData != null) { | ||||
|       if (this.cardData.valid) { | ||||
|         let data = { | ||||
|           num: this.cardData.values.number.replace(/\s/g, ""), | ||||
|           expiry: this.cardData.values.expiry.replace("/", ""), | ||||
|           cvc: this.cardData.values.cvc | ||||
|         }; | ||||
|  | ||||
|         console.log(this.cardData); | ||||
|         log.firebaseLog('press_add_button_on_creditCard_progress',{}) | ||||
|         this.store.postCreditCard(this, data); | ||||
|       } else { | ||||
|         try { | ||||
|           Object.keys(this.cardData.status).forEach(e => { | ||||
|             console.log(e + " - " + this.cardData.status[e]); | ||||
|             if ( | ||||
|               this.cardData.status[e] == "incomplete" || | ||||
|               this.cardData.status[e] == "invalid" | ||||
|             ) { | ||||
|               this.refs.toast.show(e + " " + this.cardData.status[e]); | ||||
|               throw BreakException; | ||||
|             } | ||||
|           }); | ||||
|         } catch (e) { | ||||
|           if (e !== BreakException) throw e; | ||||
|         } | ||||
|       } | ||||
|     } else { | ||||
|       console.log("error"); | ||||
|       this.refs.toast.show("please insert card number"); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   testing(token, data) { | ||||
|     Alert.alert(token, data, { text: "ok", onPress: () => console.log("ok") }); | ||||
|   } | ||||
|   @action | ||||
|   removeCard() { | ||||
|     Alert.alert("", "Are you sure? ", [ | ||||
|       { text: "Cancel", onPress: () => console.log("Cancel") }, | ||||
|       { | ||||
|         text: "Sure", | ||||
|         onPress: () => this.store.deleCreditCard(this) | ||||
|       } | ||||
|     ]); | ||||
|   } | ||||
|  | ||||
|   updateCard() { | ||||
|     //this.removeCard(); | ||||
|     this.props.navigation.navigate("AddCard"); | ||||
|   } | ||||
|  | ||||
|   render() { | ||||
|     return ( | ||||
|       <SafeAreaView style={{ flex: 1, backgroundColor: theme.mainColor }}> | ||||
|         <View style={styles.container}> | ||||
|           <Loader loading={this.store.loading} /> | ||||
|           {!this.store.addedCard ? ( | ||||
|             <View> | ||||
|               <View | ||||
|                 style={{ | ||||
|                   alignItems: "center", | ||||
|                   marginTop: 20, | ||||
|                   marginRight: 30, | ||||
|                   marginLeft: 30, | ||||
|                   flexDirection: "row" | ||||
|                 }} | ||||
|               > | ||||
|                 <View style={{ width: "25%", alignItems: "flex-start" }}> | ||||
|                   <Icon | ||||
|                     name="ios-card" | ||||
|                     size={size.getSize(45)} | ||||
|                     color={theme.coolGrey} | ||||
|                   /> | ||||
|                 </View> | ||||
|                 <TouchableOpacity | ||||
|                   style={{ | ||||
|                     width: "75%", | ||||
|                     height: verticalScale(40), | ||||
|                     alignItems: "center", | ||||
|                     borderWidth: 2, | ||||
|                     borderColor: theme.coolGrey, | ||||
|                     borderRadius: 5, | ||||
|                     justifyContent: "center" | ||||
|                   }} | ||||
|                   onPress={() => { | ||||
|                     this.addCard = true; | ||||
|                     log.firebaseLog('press_add_creditCard_button',{}) | ||||
|                   }} | ||||
|                 > | ||||
|                   <Text | ||||
|                     style={{ | ||||
|                       fontSize: 15, | ||||
|                       fontFamily: Fonts.century, | ||||
|                       color: theme.coolGrey, | ||||
|                       fontWeight: "bold" | ||||
|                     }} | ||||
|                   > | ||||
|                     Add credit card | ||||
|                   </Text> | ||||
|                 </TouchableOpacity> | ||||
|               </View> | ||||
|               {this.addCard ? ( | ||||
|                 <View> | ||||
|                   <LiteCreditCardInput | ||||
|                     autoFocus | ||||
|                     labelStyle={styles.label} | ||||
|                     inputStyle={styles.input} | ||||
|                     validColor={"black"} | ||||
|                     invalidColor={"red"} | ||||
|                     placeholderColor={"darkgray"} | ||||
|                     onChange={form => (this.cardData = form)} | ||||
|                   /> | ||||
|  | ||||
|                   <View | ||||
|                     style={{ | ||||
|                       justifyContent: "space-between", | ||||
|                       marginTop: 20, | ||||
|                       marginRight: 30, | ||||
|                       marginLeft: 30, | ||||
|                       flexDirection: "row" | ||||
|                     }} | ||||
|                   > | ||||
|                     <TouchableOpacity | ||||
|                       style={{ | ||||
|                         width: "45%", | ||||
|                         alignItems: "center", | ||||
|                         justifyContent: "center", | ||||
|                         borderWidth: 2, | ||||
|                         borderColor: theme.coolGrey, | ||||
|                         borderRadius: 5, | ||||
|                         height: verticalScale(40) | ||||
|                       }} | ||||
|                       onPress={() => { | ||||
|                         this.addCardAction(); | ||||
|                       }} | ||||
|                     > | ||||
|                       <Text>Add</Text> | ||||
|                     </TouchableOpacity> | ||||
|                     <TouchableOpacity | ||||
|                       style={{ | ||||
|                         width: "45%", | ||||
|                         alignItems: "center", | ||||
|                         justifyContent: "center", | ||||
|                         borderWidth: 2, | ||||
|                         borderColor: theme.coolGrey, | ||||
|                         borderRadius: 5, | ||||
|                         height: verticalScale(40) | ||||
|                       }} | ||||
|                       onPress={() => { | ||||
|                         this.addCard = false; | ||||
|                         this.cardData = null; | ||||
|                         log.firebaseLog('press_cancel_button_on_creditCard_progress',{}) | ||||
|                       }} | ||||
|                     > | ||||
|                       <Text>CANCEL</Text> | ||||
|                     </TouchableOpacity> | ||||
|                   </View> | ||||
|                 </View> | ||||
|               ) : ( | ||||
|                 <View /> | ||||
|               )} | ||||
|             </View> | ||||
|           ) : ( | ||||
|             <View | ||||
|               style={{ | ||||
|                 alignItems: "center", | ||||
|                 marginTop: 20, | ||||
|                 marginRight: 30, | ||||
|                 marginLeft: 30, | ||||
|                 flexDirection: "row" | ||||
|               }} | ||||
|             > | ||||
|               <View style={{ width: "25%", alignItems: "flex-start" }}> | ||||
|                 <Icon | ||||
|                   name="ios-card" | ||||
|                   size={size.getSize(45)} | ||||
|                   color={theme.coolGrey} | ||||
|                 /> | ||||
|               </View> | ||||
|  | ||||
|               <View | ||||
|                 style={{ | ||||
|                   width: "75%", | ||||
|                   height: verticalScale(40), | ||||
|                   alignItems: "center", | ||||
|                   flexDirection: "row", | ||||
|                   borderWidth: 2, | ||||
|                   borderColor: theme.coolGrey, | ||||
|                   borderRadius: 5, | ||||
|                   justifyContent: "space-between" | ||||
|                 }} | ||||
|                 onPress={() => { | ||||
|                   this.addCard = true; | ||||
|                 }} | ||||
|               > | ||||
|                 <Text | ||||
|                   style={{ | ||||
|                     fontSize: 15, | ||||
|                     paddingLeft: scale(20), | ||||
|                     fontFamily: Fonts.century, | ||||
|                     color: theme.coolGrey, | ||||
|                     fontWeight: "bold" | ||||
|                   }} | ||||
|                 > | ||||
|                   {this.store.creditCardinfo.num} | ||||
|                 </Text> | ||||
|                 <TouchableOpacity | ||||
|                   style={{ justifyContent: "center",alignItems:'center' }} | ||||
|                   onPress={() => (this.menu = !this.menu)} | ||||
|                 > | ||||
|                   <Icon2 | ||||
|                     name="dots-vertical" | ||||
|                     size={size.getSize(30)} | ||||
|                     color={theme.coolGrey} | ||||
|                     style={{ marginLeft: 10 }} | ||||
|                   /> | ||||
|                 </TouchableOpacity> | ||||
|               </View> | ||||
|             </View> | ||||
|           )} | ||||
|  | ||||
|           {this.menu ? ( | ||||
|             <View | ||||
|               style={{ | ||||
|                 justifyContent: "space-between", | ||||
|                 width:width, | ||||
|                 marginTop: 20, | ||||
|                 marginRight: 30, | ||||
|                 marginLeft: 30, | ||||
|                 flexDirection: "row" | ||||
|               }} | ||||
|             > | ||||
|  | ||||
|                   | ||||
|                     <TouchableOpacity | ||||
|                       style={{ | ||||
|                         width: "40%", | ||||
|                         alignItems: "center", | ||||
|                         justifyContent: "center", | ||||
|                         borderWidth: 2, | ||||
|                         marginLeft: 30, | ||||
|                         borderColor: theme.coolGrey, | ||||
|                         borderRadius: 5, | ||||
|                         height: verticalScale(40) | ||||
|                       }} | ||||
|                       onPress={() => { | ||||
|                         this.removeCard(); | ||||
|                         this.menu = !this.menu; | ||||
|                         log.firebaseLog('press_remove_card_button',{}) | ||||
|                       }} | ||||
|                     > | ||||
|                       <Text>Remove Card</Text> | ||||
|                     </TouchableOpacity> | ||||
|                     <TouchableOpacity | ||||
|                       style={{ | ||||
|                         width: "40%", | ||||
|                         alignItems: "center", | ||||
|                         justifyContent: "center", | ||||
|                         borderWidth: 2, | ||||
|                         marginRight: 30, | ||||
|                         borderColor: theme.coolGrey, | ||||
|                         borderRadius: 5, | ||||
|                         height: verticalScale(40) | ||||
|                       }} | ||||
|                       onPress={() => { | ||||
|                         this.menu = !this.menu; | ||||
|                       }} | ||||
|                     > | ||||
|                       <Text>CANCEL</Text> | ||||
|                     </TouchableOpacity> | ||||
|                   </View> | ||||
|             | ||||
|           ) : ( | ||||
|             <View /> | ||||
|           )} | ||||
|         </View> | ||||
|         <Toast ref="toast" position={"center"} /> | ||||
|       </SafeAreaView> | ||||
|     ); | ||||
|   } | ||||
| } | ||||
|  | ||||
| const styles = StyleSheet.create({ | ||||
|   container: { | ||||
|     flex: 1, | ||||
|     alignItems: "center", | ||||
|     backgroundColor: "white" | ||||
|   }, | ||||
|   welcome: { | ||||
|     fontSize: 20, | ||||
|     textAlign: "center", | ||||
|     margin: 10 | ||||
|   }, | ||||
|   instructions: { | ||||
|     textAlign: "center", | ||||
|     color: "#333333", | ||||
|     marginBottom: 5 | ||||
|   }, | ||||
|   buttonView: { | ||||
|     width: "80%", | ||||
|     height: 60, | ||||
|     marginTop: 10, | ||||
|     alignItems: "center", | ||||
|     justifyContent: "center", | ||||
|     borderColor: "black", | ||||
|     borderWidth: 1 | ||||
|   }, | ||||
|   label: { | ||||
|     color: "black", | ||||
|     fontSize: 12 | ||||
|   }, | ||||
|   input: { | ||||
|     fontSize: 16, | ||||
|     color: "black" | ||||
|   } | ||||
| }); | ||||
		Reference in New Issue
	
	Block a user