@@ -10,12 +10,26 @@ const userApi = new UserApi(config.api.basePath);
10
10
//------------------------------------------------------------------------------
11
11
// Constants
12
12
13
+ const LOGIN_ACTION_FAILURE = 'LOGIN_ACTION_FAILURE' ;
14
+ const LOGIN_ACTION_SUCCESS = 'LOGIN_ACTION_SUCCESS' ;
15
+
16
+ const LOGIN_REDIRECT = {
17
+ admin : '/admin' ,
18
+ consumer : '/browse-provider' ,
19
+ pilot : '/pilot' ,
20
+ provider : '/dashboard' ,
21
+ } ;
22
+
13
23
const LOGOUT_ACTION = 'LOGOUT_ACTION' ;
14
24
const USER_INFO_KEY = 'userInfo' ;
15
25
16
26
// ------------------------------------
17
27
// Actions
18
28
// ------------------------------------
29
+
30
+ // TODO: Any use of these local variables should be eliminated!
31
+ // Their current usage should be entirely replaced using the redux state,
32
+ // and action payloads!
19
33
let isLogged = false ;
20
34
let hasError = false ;
21
35
let errorText = '' ;
@@ -30,29 +44,6 @@ function loadUserInfo() {
30
44
return userInfo ;
31
45
}
32
46
33
- export const sendLoginRequest = ( values ) => new Promise ( ( resolve ) => {
34
- userApi . login ( values . email , values . password ) . then ( ( authResult ) => {
35
- isLogged = true ;
36
- hasError = false ;
37
- userInfo = authResult ;
38
- localStorage . setItem ( USER_INFO_KEY , JSON . stringify ( authResult ) ) ;
39
- if ( authResult . user . role === 'consumer' ) {
40
- browserHistory . push ( '/browse-provider' ) ;
41
- } else if ( authResult . user . role === 'provider' ) {
42
- browserHistory . push ( '/dashboard' ) ;
43
- } else if ( authResult . user . role === 'admin' ) {
44
- browserHistory . push ( '/admin' ) ;
45
- } else if ( authResult . user . role === 'pilot' ) {
46
- browserHistory . push ( '/pilot' ) ;
47
- }
48
- } ) . catch ( ( err ) => {
49
- isLogged = false ;
50
- hasError = true ;
51
- errorText = JSON . parse ( err . responseText ) ;
52
- } ) ;
53
- resolve ( ) ;
54
- } ) ;
55
-
56
47
export const sendSignupRequest = ( values ) => new Promise ( ( resolve ) => {
57
48
userApi . register ( values . firstName , values . lastName , values . email , values . password ) . then ( ( ) => {
58
49
isLogged = true ;
@@ -68,14 +59,25 @@ export const sendSignupRequest = (values) => new Promise((resolve) => {
68
59
69
60
export const toggleNotification = createAction ( 'TOGGLE_NOTIFICATION' ) ;
70
61
71
- export const loginAction = createAction ( 'LOGIN_ACTION' ) ;
62
+ export const loginAction = ( data ) => ( dispatch ) => {
63
+ userApi . login ( data . email , data . password ) . then ( ( res ) => {
64
+ localStorage . setItem ( USER_INFO_KEY , JSON . stringify ( res ) ) ;
65
+ dispatch ( { type : LOGIN_ACTION_SUCCESS } ) ;
66
+ browserHistory . push ( LOGIN_REDIRECT [ res . user . role ] ) ;
67
+ } ) . catch ( ( failure ) => {
68
+ dispatch ( {
69
+ type : LOGIN_ACTION_FAILURE ,
70
+ payload : JSON . parse ( failure . response ) . error ,
71
+ } ) ;
72
+ } ) ;
73
+ } ;
72
74
73
- export const logoutAction = ( ) => dispatch => {
75
+ export const logoutAction = ( ) => ( dispatch ) => {
74
76
browserHistory . push ( '/home' ) ;
75
77
dispatch ( {
76
- type : LOGOUT_ACTION
78
+ type : LOGOUT_ACTION ,
77
79
} ) ;
78
- }
80
+ } ;
79
81
80
82
export const signupAction = createAction ( 'SIGNUP_ACTION' ) ;
81
83
@@ -90,8 +92,19 @@ export default handleActions({
90
92
[ toggleNotification ] : ( state , action ) => ( {
91
93
...state , toggleNotif : action . payload ,
92
94
} ) ,
93
- [ loginAction ] : ( state ) => ( {
94
- ...state , loggedUser : isLogged , hasError, errorText, user : ( loadUserInfo ( ) ? loadUserInfo ( ) . user : { } ) ,
95
+ [ LOGIN_ACTION_FAILURE ] : ( state , action ) => ( {
96
+ ...state ,
97
+ loggedUser : false ,
98
+ hasError : true ,
99
+ errorText : action . payload ,
100
+ user : { } ,
101
+ } ) ,
102
+ [ LOGIN_ACTION_SUCCESS ] : ( state ) => ( {
103
+ ...state ,
104
+ loggedUser : true ,
105
+ hasError : false ,
106
+ errorText : '' ,
107
+ user : ( loadUserInfo ( ) ? loadUserInfo ( ) . user : { } ) ,
95
108
} ) ,
96
109
[ LOGOUT_ACTION ] : ( state ) => {
97
110
localStorage . removeItem ( USER_INFO_KEY ) ;
0 commit comments