SHARE
TWEET

Untitled

a guest Aug 26th, 2019 90 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 'use strict'
  2.  
  3. import React, {Component} from 'react';
  4. import { View, StatusBar, ActivityIndicator, Image } from 'react-native';
  5. import { Content, Button, Text, Form, Item, Input, Label, StyleProvider } from 'native-base';
  6. import { LoadingModal, FormErrorMessage, Container, Toast } from '@components';
  7. import { loading } from '@actions/AppAction';
  8. import { connect } from 'react-redux';
  9. import Reactotron from 'reactotron-react-native';
  10. import { Auth, Location, Connection } from '@services';
  11. import { PermissionsHelper, StringHelper } from '@helpers';
  12. import { fetchUser } from '@actions/UserAction';
  13. import validator from 'validator';
  14. import { Styles, Paths } from '@config';
  15. import SplashScreen from 'react-native-splash-screen';
  16.  
  17. const errorMessages = {
  18.     emptyEmail: 'Email tidak boleh kosong',
  19.     emptyPassword: 'Password tidak boleh kosong',
  20.     emailFormat: 'Format email salah',
  21. };
  22.  
  23. class ExampleScreen extends Component {
  24.     constructor(props) {
  25.         super(props);
  26.  
  27.         this.state = {
  28.             email: __DEV__ ? 'admin@mailinator.com' : null,
  29.             emailInputError: false,
  30.             emailErrorMessage: '',
  31.  
  32.             password: __DEV__ ? '123456' : null,
  33.             passwordInputError: false,
  34.             passwordErrorMessage: '',
  35.  
  36.             securePassword: true
  37.         }
  38.  
  39.         this.inputs = {};
  40.     }
  41.  
  42.     static navigationOptions = ({ navigation }) => {
  43.         const { params } = navigation.state;
  44.        
  45.         return {
  46.             title: 'Home',
  47.             // header: null
  48.         }
  49.     }
  50.  
  51.     _validation = (field, text) => {
  52.         if ( field === 'email' )
  53.         {
  54.             this.setState({ email: StringHelper.cleanSpace(text) });
  55.  
  56.             // if (validator.isEmpty(text))
  57.             //     this.setState({ emailErrorMessage: errorMessages.emptyEmail, emailInputError: true });
  58.             // else if (!validator.isEmail(text))
  59.             //     this.setState({ emailErrorMessage: errorMessages.emailFormat, emailInputError: true });
  60.             // else
  61.             //     this.setState({ emailErrorMessage: '', emailInputError: false });
  62.         }
  63.  
  64.         else if ( field === 'password' )
  65.         {
  66.             this.setState({ password: text });
  67.  
  68.             // if (validator.isEmpty(text))
  69.             //     this.setState({ passwordErrorMessage: errorMessages.emptyPassword, passwordInputError: true });
  70.             // else
  71.             //     this.setState({ passwordErrorMessage: '', passwordInputError: false });
  72.         }
  73.  
  74.  
  75.     }
  76.  
  77.     _validationSubmit = () => {
  78.         let validated = false;
  79.         let emailValidate = validator.isEmpty(this.state.email);
  80.         let passwordValidate = validator.isEmpty(this.state.password);
  81.         let emailFormatValidate = validator.isEmail(this.state.email);
  82.  
  83.         if ( !emailValidate && !passwordValidate && emailFormatValidate )
  84.         {
  85.             validated = true;
  86.         }
  87.         else
  88.         {
  89.             if (emailValidate)
  90.             {
  91.                 this.setState({ emailErrorMessage: errorMessages.emptyEmail, emailInputError: true });
  92.             }
  93.             else
  94.             {
  95.                 if ( !emailFormatValidate )
  96.                     this.setState({ emailErrorMessage: errorMessages.emailFormat, emailInputError: true });
  97.             }
  98.  
  99.             if (passwordValidate)
  100.             {
  101.                 this.setState({ passwordErrorMessage: errorMessages.emptyPassword, passwordInputError: true });
  102.             }
  103.         }
  104.  
  105.         return validated;
  106.     }
  107.  
  108.     _register = () => {
  109.  
  110.         return this.props.navigation.navigate('Register');
  111.  
  112.     }
  113.  
  114.     _login = async () => {
  115.  
  116.         if ( this._validationSubmit() )
  117.         {    
  118.             if ( await Connection.check(true) )
  119.             {
  120.                 this.props.loading();
  121.  
  122.                 let credentials = {
  123.                     email: this.state.email.trim(),
  124.                     password: this.state.password,
  125.                     accessTokenName: 'android-com.asliri.amano'
  126.                 };
  127.  
  128.                 Promise.all([
  129.  
  130.                     await Auth.attempt(credentials)
  131.  
  132.                 ]).then(async ([login]) => {
  133.  
  134.                     this.props.loading(false);
  135.  
  136.                     if ( login === true )
  137.                     {
  138.                         return this.props.navigation.navigate('AppStack');
  139.                     }
  140.                
  141.                     Toast.show(login);  
  142.  
  143.                 }).catch((e) => {
  144.  
  145.                     Reactotron.log(e);
  146.  
  147.                     this.props.loading(false);
  148.  
  149.                     Toast.show('Terjadi kesalahan dengan aplikasi');  
  150.  
  151.                 });
  152.             }
  153.         }
  154.         else
  155.         {
  156.             Toast.show('Terdapat kesalahan dalam pengisian formulir.');  
  157.         }
  158.  
  159.     }
  160.  
  161.     _focusNextField(nextField) {
  162.         this.inputs[nextField]._root.focus();
  163.     }
  164.  
  165.     async componentDidMount()
  166.     {
  167.         setTimeout(async () => {
  168.             SplashScreen.hide();
  169.  
  170.             await PermissionsHelper.location();
  171.             await PermissionsHelper.camera();
  172.             // await PermissionsHelper.readPhoneState();
  173.             await PermissionsHelper.readSms();
  174.             await PermissionsHelper.sendSms();
  175.             // await PermissionsHelper.recordAudio();
  176.  
  177.             await Location.find();
  178.             await Connection.deviceRegister();
  179.         }, 750);
  180.        
  181.         // this.inputs['email']._root.focus();
  182.  
  183.        
  184.     }
  185.    
  186.     render() {
  187.  
  188.         return (
  189.             <Container loading={this.props.app.loading}>
  190.                 <StatusBar
  191.                     backgroundColor="white"
  192.                     barStyle="dark-content"
  193.                 />
  194.  
  195.                 <Content showsVerticalScrollIndicator={false} padder>
  196.                     <View>
  197.                         <View style={{ alignItems: 'center', paddingVertical: 30 }}>
  198.                             <Image source={Paths.logoLogin} resizeMode={"contain"} style={{ width: 150, height: 150 }} fadeDuration={0} />
  199.                         </View>
  200.  
  201.                         <Form style={{ marginBottom: 30, padding: 0 }}>
  202.                             <Item style={Styles.formItem} error={this.state.emailInputError} stackedLabel>
  203.                                 <Label>E-Mail</Label>
  204.                                 <Input
  205.                                     style={Styles.formInput}
  206.                                     maxLength={200}
  207.                                     returnKeyType={"next"}
  208.                                     keyboardType={"email-address"}
  209.                                     blurOnSubmit={false}
  210.                                     onBlur={() => this._validation('email', this.state.email)}
  211.                                     onChangeText={(text) => this._validation('email', text)}
  212.                                     ref={input => {
  213.                                         this.inputs['email'] = input;
  214.                                     }}
  215.                                     disabled={this.props.app.loading}
  216.                                     autoCapitalize={"none"}
  217.                                     onSubmitEditing={(text) => this._focusNextField('password')}
  218.                                     value={this.state.email} />
  219.                             </Item>
  220.  
  221.                             {
  222.                                 this.state.emailInputError ?
  223.                                     <FormErrorMessage message={this.state.emailErrorMessage} />
  224.                                 :
  225.                                     null
  226.                             }
  227.  
  228.                             <Item style={[Styles.formItem, { marginTop: 30 }]} error={this.state.passwordInputError} stackedLabel>
  229.                                 <Label>Kata Sandi</Label>
  230.                                 <Input
  231.                                 style={Styles.formInput}
  232.                                 maxLength={200}
  233.                                 secureTextEntry={true}
  234.                                 onBlur={() => this._validation('password', this.state.password)}
  235.                                 onChangeText={(text) => this._validation('password', text)}
  236.                                 ref={input => {
  237.                                     this.inputs['password'] = input;
  238.                                 }}
  239.                                 disabled={this.props.app.loading}
  240.                                 autoCapitalize={"none"}
  241.                                 value={this.state.password} />
  242.                             </Item>
  243.  
  244.                             {
  245.                                 this.state.passwordInputError ?
  246.                                     <FormErrorMessage message={this.state.passwordErrorMessage} />
  247.                                 :
  248.                                     null
  249.                             }
  250.                         </Form>
  251.  
  252.                     </View>
  253.  
  254.                 </Content>
  255.  
  256.                 <View style={{ padding: 10 }}>
  257.                     <Button style={{ marginBottom: 10 }} disabled={this.props.app.loading} onPress={this._login} block>
  258.                         { this.props.app.loading ? <ActivityIndicator /> : <Text>Masuk</Text> }
  259.                     </Button>
  260.                    
  261.                     <Button disabled={this.props.app.loading} onPress={this._register} bordered block>
  262.                         <Text>Daftar</Text>
  263.                     </Button>
  264.                 </View>
  265.             </Container>
  266.         );
  267.     }
  268. }
  269.  
  270. const mapReduxStateToComponentProps = state => ({
  271.     app: state.app
  272. });
  273.  
  274. export default connect(mapReduxStateToComponentProps, { loading, fetchUser })(ExampleScreen);
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top