Hangry/app/containers/Login/login.js

285 lines
7.9 KiB
JavaScript
Executable File

import React, { Component } from "react";
import {
Platform,
StyleSheet,
View,
TextInput,
TouchableOpacity,
SafeAreaView,
Keyboard,
ScrollView,
TouchableWithoutFeedback
} from "react-native";
import { observable } from "mobx";
import { KeyboardAccessoryNavigation } from "react-native-keyboard-accessory";
import { observer, inject } from "mobx-react/native";
import Text from "react-native-text";
import Header from "../../components/Public/signInUpHeader";
import { scale, verticalScale, moderateScale } from "react-native-size-matters";
import Size from "../../config/size";
import theme from "../../config/colors";
import { Fonts } from "../../config/fonts";
import Log from '../../config/log'
import { width, height } from "../../config/screen";
import { Button } from "react-native-elements";
import CommonTextInput from "../../components/Public/commonTextInput";
import api from "../../stores/api";
const size = new Size();
import Toast, { DURATION } from "react-native-easy-toast";
import SignUpInformation from "../signUp/signUpInformation";
import Loader from "../../components/Public/loader";
let log = new Log()
let inputs = [
{
//value: this.account,
// onChangeText: this.loginData.pwd,
placeholder: "Email/Mobile",
secureTextEntry: false
// componentRef: this.first
},
{
//value: this.password,
//onChangeText: this.loginData.pwd,
placeholder: "Password",
secureTextEntry: true
// componentRef: this.secound
}
];
@inject(["userStore"])
@observer
export default class Login extends Component {
loginData = {
id: "",
pwd: ""
};
data = [
{
value: this.account,
onChangeText: this.loginData.pwd,
componentRef: this.first
},
{
value: this.password,
onChangeText: this.loginData.pwd,
componentRef: this.secound
}
];
constructor(props) {
super(props);
this.store = this.props.userStore;
inputs = inputs.map((input, index) => ({
componentRef: React.createRef(),
value: this.data[index].value,
onChangeText: this.data[index].onChangeText,
...input
}));
this.state = {
activeInputIndex: 0,
nextFocusDisabled: false,
previousFocusDisabled: false,
buttonsDisabled: false,
buttonsHidden: false
};
}
handleFocus = index => () => {
this.setState({
nextFocusDisabled: index === inputs.length - 1,
previousFocusDisabled: index === 0,
activeInputIndex: index
});
};
handleFocusNext = () => {
const { nextFocusDisabled, activeInputIndex } = this.state;
if (nextFocusDisabled) {
return;
}
// this.inputs[activeInputIndex + 1].componentRef.focus();
inputs[1].componentRef.current.focus();
};
handleFocusPrevious = () => {
const { previousFocusDisabled, activeInputIndex } = this.state;
if (previousFocusDisabled) {
return;
}
inputs[activeInputIndex - 1].componentRef.current.focus();
};
navigatieAction(page) {
this.props.navigation.navigate(page);
}
componentWillMount() {
console.log("login componentWillMount");
}
loginAction() {
this.store.loginPost(this.loginData, this, true);
log.firebaseLog('press_login_button',{})
}
testing() {
var bodyFormData = new FormData();
bodyFormData.append("country_code", "852");
bodyFormData.append("phone_number", "97726727");
this.store.sendsmsVerify(bodyFormData, this);
}
render() {
console.log("state: ", this.props.navigation.state);
log.firebaseClass('Login')
return (
<SafeAreaView style={{ flex: 1, backgroundColor: theme.mainColor }}>
<Loader loading={this.store.loading} />
<TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>
<View style={styles.container}>
<View>
<Header navigation={this.props.navigation} back={true} />
<View style={styles.mainContainer}>
<View style={{ width: width }}>
<ScrollView>
<CommonTextInput
value={this.account}
onChangeText={account => (this.loginData.id = account)}
placeholder="Email"
secureTextEntry={false}
returnKeyType={"next"}
onSubmitEditing={event => {
this.passTextInput.focus();
}}
/>
<CommonTextInput
value={this.password}
onChangeText={password => (this.loginData.pwd = password)}
placeholder="Password"
inputRef={input => {
this.passTextInput = input;
}}
returnKeyType={"done"}
secureTextEntry={true}
onSubmitEditing={event => {
Keyboard.dismiss()
}}
/>
</ScrollView>
<TouchableOpacity
style={{ alignItems: "flex-end" }}
onPress={() => {
this.navigatieAction("ForgetPassword");
}}
>
<Text
style={{
color: theme.forgetTextColor,
fontFamily: Fonts.century,
fontWeight: "bold",
marginRight: 30,
marginTop: 5,
textDecorationLine: "underline"
}}
>
Forget Password ? Go Reset
</Text>
</TouchableOpacity>
</View>
</View>
<TouchableOpacity
style={{ alignItems: "center", marginBottom: 15 }}
onPress={() => this.navigatieAction("SignUpInformation")}
// onPress = {()=>this.testing()}
>
<Text
style={{
color: theme.forgetTextColor,
fontFamily: Fonts.century,
fontWeight: "bold",
marginTop: 5,
textDecorationLine: "underline"
}}
>
No Account ? Go Register
</Text>
</TouchableOpacity>
<Button
title="Login"
fontWeight="bold"
fontSize={size.getSize(18)}
fontFamily={Fonts.century}
titleStyle={{
color: "white",
fontFamily: Fonts.century,
fontWeight: "bold",
fontSize: 50
}}
loadingProps={{
size: "large",
color: "rgba(111, 202, 186, 1)"
}}
buttonStyle={styles.signupButton}
onPress={() => this.loginAction()}
/>
<Toast ref="toast" />
</View>
</View>
</TouchableWithoutFeedback>
</SafeAreaView>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: "center",
backgroundColor: "white"
},
TextViewContainer: {
backgroundColor: theme.inputBgc,
marginLeft: 20,
marginRight: 20,
marginTop: 30,
height: verticalScale(40),
borderRadius: 5
},
TextView: {
color: theme.foodNameColor,
height: verticalScale(35),
marginBottom: moderateScale(30),
paddingBottom: 0,
fontSize: size.getSize(15),
paddingRight: 20,
paddingLeft: 20,
fontFamily: Fonts.century
},
mainContainer: {
flex: 1,
alignItems: "center",
marginTop: 10
},
loginButton: {
width: scale(200),
height: verticalScale(50),
marginTop: moderateScale(60)
},
signupButton: {
width: width,
height: verticalScale(60),
backgroundColor: theme.mainColor
}
});