StudentCodingHUB

Use programming to create innovative things.
  • new post

    Tuesday, 22 October 2019

    Create Login Page Using react-native

    Login page for MOBILE application.
    REACT-NATIVE is used for creating mobile components.




    containers  =>  LoginScreen.js

    import React, { Component } from 'react'
    import {View,Text} from 'react-native'
    import {Required,MaxLength} from '../../myValidation'
    import {styles} from '../../style/jsstyle'
    import {
        Heading, Card, CardSection,InputTextBox,
        Button,LinkText,Spinner,ScrollPage,Container
    } from '../../components/common'

    class LoginForm extends React.Component {

        constructor(props){
            super(props);
            this.state = {
                username: '',
                password:'',
                errorusername: false,
                errorpassword:false,
                errorform:false
            };
            
            //validation
            this.handleOnBlurPassword=this.handleOnBlurPassword.bind(this);
            this.handleOnBlurUsername=this.handleOnBlurUsername.bind(this);
        }


        //validation
        handleOnBlurUsername(event){
            if(Required(event)|| MaxLength(event,20)){
                this.setState({errorusername: true});
            }
            else {
                this.setState({errorusername: false});
            }
        }
        handleOnBlurPassword(event){
            if(Required(event)|| MaxLength(event,20)){
                this.setState({errorpassword: true});
            }
            else {
                this.setState({errorpassword: false});
            }
        }

        render() {       
            return (
            <ScrollPage>
             <Container>
               <Card>
               <CardSection>
                   <Heading title="Login"/>
                </CardSection>
                <CardSection>
                    <InputTextBox
                        value={this.state.username}
                        placeholder="Email / Mobile / Username"
                        onBlur={()=>this.handleOnBlurUsername(this.state.username)}
                        onChangeText={(username) => this.setState({username})}
                        error={this.state.errorusername}
                        errorMsg="It is Required and Max. 20 chars allow !"
                    />
                </CardSection>
                <CardSection>
                    <InputTextBox
                        value={this.state.password}
                        placeholder="Password"
                        onBlur={()=>this.handleOnBlurPassword(this.state.password)}
                        onChangeText={(password) => this.setState({password})}
                        error={this.state.errorpassword}
                        errorMsg="password is Required!"
                        secureTextEntry={true}
                    />
                  </CardSection>
                   <View style={styles.rightEle}>
                       <CardSection >
                           <LinkText
                               onPress={() => this.props.navigation.navigate('forgetPassword')}
                               text="Forgot Your Password?"
                           />
                       </CardSection>
                   </View>
                <CardSection>
                  <Button
                      text="Login"
                      onPress={this.onApiReadAccountLogin}
                      msg={this.props.accountRequest.result}
                      isLoading={this.props.accountRequest.loadingLogin}

                  />
                </CardSection>

                <CardSection isBorder={true}>
                <LinkText
                    onPress={() => this.props.navigation.navigate('accountRegistration')}
                        text="Create New Account"
                />
                </CardSection>
            </Card>
            </Container>
            </ScrollPage>
            );
        }
    }

    export default LoginForm;


    components  =>  Heading

    import React from 'react'
    import { Text,StyleSheet } from 'react-native'

    export const Heading =(props)=> (

            <Text style={styles.HeadingStyle}>
                {props.title}
            </Text>
    )

    const styles=StyleSheet.create({

        HeadingStyle:{
            flexWrap: 'wrap',
            textAlign: 'center',
            color: '#4CAF50',
            fontWeight:'bold',
            fontSize:18,
            borderBottomWidth:1,
            borderColor:'#F2F2F2',
            shadowColor:'#000',
            shadowOffset:{width:0,height:2},
            shadowOpacity:0.1,
            padding:5
        }
    })

    /* Heading is used to give heading-text or title of something... */


    // title ====> Give the text of the heading

    components  =>  Card

    import React from 'react'
    import { View,StyleSheet } from 'react-native'

    export const Card =(props)=> (

        <View style={styles.CardStyle}>
            {props.children}
        </View>
    )

    const styles=StyleSheet.create({

        CardStyle:{
            borderWidth:1,
            borderRadius:10,
            borderColor:'#ddd',
            shadowColor:'#000',
            shadowOffset:{width:0,height:2},
            shadowOpacity:0.1,
            shadowRadius:2,
            backgroundColor: '#ffffff',
            elevation:1,
            marginLeft:5,
            marginRight:5,
            marginTop:10
        }
    })

    /* Card is the container, which hold all elements  */


    // It has both START tag and END tag


    components  =>  CardSection

    import React from 'react'
    import { View,StyleSheet } from 'react-native'

    export const CardSection =(props)=> {

        let styl= props.isBorder===true?styles.CSBorderStyle:{};
        return(
        <View style={[styles.CardSectionStyle,styl]}>
            {props.children}
        </View>
    )}

    const styles=StyleSheet.create({

        CardSectionStyle:{
            padding:5,
            marginTop:2
        },
        CSBorderStyle:{
            borderBottomWidth:1,
            borderColor:'#FFFFFF'
        }
    })

    /* CardSection is used to divide a page into many segments. */


    // isBorder ====>  True if you require Bottom-Border

    components  =>  InputTextBox

    import React from 'react'
    import { View,Text,TextInput,StyleSheet } from 'react-native'

    const InputTextBox =({value,placeholder,onBlur,onChangeText,secureTextEntry,

        label,error,errorMsg,keyboardType,autoFocus})=> (
        <View style={styles.Container}>
            <Text style={styles.label}>
                {label}
            </Text>
            <TextInput style={styles.InputText}
                       value={value}
                       placeholder={placeholder}
                       onBlur={onBlur}
                       onChangeText={onChangeText}
                       placeholderTextColor="#1b95e0"
                       autoCorrect={false}
                       secureTextEntry={secureTextEntry}
                       keyboardType={keyboardType}
                       autoFocus={autoFocus}
            />
            {error &&
            <Text style={styles.ErrorMsg}>
                {errorMsg}
            </Text>
            }
        </View>
    )

      const styles=StyleSheet.create({

            label:{
            fontSize:14,
            color:'#1b95e0'
        },
            InputText:{
            height: 40,
            borderWidth: 2,
            borderColor: "#ddd",
            borderRadius: 10,
            marginTop: 2,
            padding:10
        },
          Container:{
              marginTop: 2,
          },
          ErrorMsg:{
              color: '#b30000'
          }
        });

    export {InputTextBox}

    /*InputTextBox is a complete text-input with label text, error text and many ,
    that is used to collect user input data */

    //  label ====> Give Label text of input

    //  value ====> value of input
    //  placeholder ====> placeholder of input
    //  onBlur ====> function handle onBlur
    //  onChangeText ====> function handle onChangeText
    //  error ====> if true then show error message

    //  errorMsg ====> Show error message if it gets error

    components  =>  Button
    import React  from 'react'
    import {View, Text,TouchableOpacity,StyleSheet,ActivityIndicator } from 'react-native'
    const Button=(props)=>
    {
        if(props.isLoading)
        {
            return(
                <View style={styles.SpinnerStyle}>
                    <ActivityIndicator size="large" />
                </View>
            )
        }
        return(
        <View>
            <TouchableOpacity
                onPress={props.onPress}
                style={styles.buttonStyle}
            >
                <Text style={styles.textStyle}>
                    {props.text}
                </Text>
            </TouchableOpacity>
            <Text style={styles.MsgStyle}>{props.msg}</Text>
        </View>
    );
    };

    const styles=StyleSheet.create({

        buttonStyle:{
            flex:1,
            alignSelf:'stretch',
            backgroundColor:'#F2F2F2',
            borderRadius:20,
            borderWidth:1,
            borderColor:'#007aff',
            marginLeft:5,
            marginRight:5
        },
        textStyle:{
            alignSelf:'center',
            color: '#3498DB',
            fontSize:18,
            fontWeight:'bold',
            paddingTop:10,
            paddingBottom:10
        },
        MsgStyle:{
            color: '#b30000',
            alignSelf:'center',
            marginTop:2
        },
        SpinnerStyle:{
            flex:1,
            justifyContent: 'center',
            alignItems: 'center'
        }
    });
    export {Button};

    /*  image and a text  */

    // text ====> button text lebel
    // onPress ====> onPress function handle
    //  isLoading ===> True means Loading SMALL Spinner and False means hide.

    // msg ====> result or respond message of button press

    No comments:

    Post a Comment