1
- import React , { Component } from 'react' ;
2
- import { useForm } from "react-hook-form" ;
3
- import { useHistory } from "react-router-dom" ;
4
- import { Constants } from '../constants' ;
5
- import { connect } from 'react-redux' ;
6
-
7
- class Login extends Component {
8
-
9
- constructor ( props ) {
10
- super ( props ) ;
11
- this . state = {
12
- username : '' ,
13
- password : '' ,
14
- submitted : false ,
15
- }
16
-
17
- this . handleChange = this . handleChange . bind ( this ) ;
18
- this . handleSubmit = this . handleSubmit . bind ( this ) ;
1
+ import React , { useState , useEffect } from 'react' ;
2
+ import { BrowserRouter as Router , Switch , Route , Link , Redirect , useRouteMatch , useParams , useHistory } from "react-router-dom" ;
3
+ import { useForm } from 'react-hook-form' ;
4
+ import { useSelector , useDispatch } from 'react-redux' ;
5
+ import { Constants } from "../constants" ;
6
+
7
+ export const Login = ( ) => {
8
+ let history = useHistory ( ) ;
9
+ let dispatch = useDispatch ( ) ;
10
+ const { register, handleSubmit, watch, errors } = useForm ( ) ;
11
+
12
+ let submitData = ( data ) => {
13
+ dispatch ( {
14
+ type : Constants . LOGIN_REQUEST , payload : data
15
+ } )
16
+ history . push ( '/' ) ;
19
17
}
20
18
21
- handlechange = ( e ) => {
22
- const { name, value } = e . target ;
23
- this . setState ( { [ name ] : value } ) ;
24
- }
25
-
26
- handleSubmit ( e ) {
27
- e . preventDefault ( ) ;
28
- this . setState ( { submitted : true } ) ;
29
- const { history } = this . props ;
30
- const { username, password } = this . state ;
31
- const { dispatch } = this . props ;
32
- if ( username && password ) {
33
- dispatch ( {
34
- type : Constants . LOGIN_REQUEST , payload : { username, password }
35
- } ) ;
19
+ const onSubmit = data => {
20
+ submitData ( data ) ;
21
+ } ;
36
22
37
- history . push ( '/' ) ;
38
- }
39
- }
23
+ const userContext = useSelector ( state => {
24
+ return state . userContext ;
25
+ } ) ;
40
26
41
- render ( ) {
42
- const { loggingIn } = this . props ;
43
- const { username, password, submitted } = this . state ;
44
- return (
27
+ return ( userContext . isAuthenticated ) ? < Redirect to = { { pathname : '/' } } /> :
28
+ < >
45
29
< div className = "col-md-6 col-md-offset-3" >
46
- < div className = "alert alert-info" >
47
- Username: test< br />
48
- Password: test
49
- </ div >
50
30
< h2 > Login</ h2 >
51
- < form name = "form" onSubmit = { this . handleSubmit } >
52
- < div className = { ' form-group' + ( submitted && ! username ? ' has-error' : '' ) } >
31
+ < form name = "form" onSubmit = { handleSubmit ( onSubmit ) } >
32
+ < div className = " form-group" >
53
33
< label htmlFor = "username" > Username</ label >
54
- < input type = "text" className = "form-control" name = "username" value = { username } onChange = { this . handleChange } />
55
- { submitted && ! username &&
56
- < div className = "help-block" > Username is required</ div >
57
- }
34
+ < input type = "text" className = "form-control" name = "username" ref = { register ( { required : true } ) } />
35
+ < span > { errors . username && 'Username is required' } </ span >
58
36
</ div >
59
- < div className = { 'form-group' + ( submitted && ! password ? ' has-error' : '' ) } >
37
+ < div className = 'form-group' >
60
38
< label htmlFor = "password" > Password</ label >
61
- < input type = "password" className = "form-control" name = "password" value = { password } onChange = { this . handleChange } />
62
- { submitted && ! password &&
63
- < div className = "help-block" > Password is required</ div >
64
- }
39
+ < input type = "password" className = "form-control" name = "password" ref = { register ( { required : true } ) } />
40
+ < span > { errors . password && 'Password is required' } </ span >
65
41
</ div >
66
42
< div className = "form-group" >
67
- < button className = "btn btn-primary" > Login</ button >
68
- { loggingIn &&
69
- < img src = "data:image/gif;base64,R0lGODlhEAAQAPIAAP///wAAAMLCwkJCQgAAAGJiYoKCgpKSkiH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAADMwi63P4wyklrE2MIOggZnAdOmGYJRbExwroUmcG2LmDEwnHQLVsYOd2mBzkYDAdKa+dIAAAh+QQJCgAAACwAAAAAEAAQAAADNAi63P5OjCEgG4QMu7DmikRxQlFUYDEZIGBMRVsaqHwctXXf7WEYB4Ag1xjihkMZsiUkKhIAIfkECQoAAAAsAAAAABAAEAAAAzYIujIjK8pByJDMlFYvBoVjHA70GU7xSUJhmKtwHPAKzLO9HMaoKwJZ7Rf8AYPDDzKpZBqfvwQAIfkECQoAAAAsAAAAABAAEAAAAzMIumIlK8oyhpHsnFZfhYumCYUhDAQxRIdhHBGqRoKw0R8DYlJd8z0fMDgsGo/IpHI5TAAAIfkECQoAAAAsAAAAABAAEAAAAzIIunInK0rnZBTwGPNMgQwmdsNgXGJUlIWEuR5oWUIpz8pAEAMe6TwfwyYsGo/IpFKSAAAh+QQJCgAAACwAAAAAEAAQAAADMwi6IMKQORfjdOe82p4wGccc4CEuQradylesojEMBgsUc2G7sDX3lQGBMLAJibufbSlKAAAh+QQJCgAAACwAAAAAEAAQAAADMgi63P7wCRHZnFVdmgHu2nFwlWCI3WGc3TSWhUFGxTAUkGCbtgENBMJAEJsxgMLWzpEAACH5BAkKAAAALAAAAAAQABAAAAMyCLrc/jDKSatlQtScKdceCAjDII7HcQ4EMTCpyrCuUBjCYRgHVtqlAiB1YhiCnlsRkAAAOwAAAAAAAAAAAA==" />
70
- }
43
+ < input type = "submit" className = "btn btn-primary" />
71
44
</ div >
72
45
</ form >
73
46
</ div >
74
- ) ;
75
- }
76
-
77
- }
78
-
79
- function mapStateToProps ( state ) {
80
- const { loggingIn } = state . authentication ;
81
- return {
82
- loggingIn
83
- } ;
84
- }
85
-
86
- const connectedLoginPage = connect ( mapStateToProps ) ( Login ) ;
87
- export { connectedLoginPage as LoginObs } ;
47
+ </ > ;
48
+ } ;
0 commit comments