109 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
 | |
| import { setCookie } from '../Cookie.jsx';
 | |
| 
 | |
| const SET_LOGIN_PENDING = 'SET_LOGIN_PENDING';
 | |
| const SET_LOGIN_SUCCESS = 'SET_LOGIN_SUCCESS';
 | |
| const SET_LOGIN_ERROR = 'SET_LOGIN_ERROR';
 | |
| 
 | |
| export function login(email, password) {
 | |
|   return dispatch => {
 | |
|     dispatch(setLoginPending(true));
 | |
|     dispatch(setLoginSuccess(false));
 | |
|     dispatch(setLoginError(null));
 | |
| 
 | |
|     callLoginApi(email, password, error => {
 | |
|       dispatch(setLoginPending(false));
 | |
|       if (!error) {
 | |
|         dispatch(setLoginSuccess(true));
 | |
|       } else {
 | |
|         dispatch(setLoginError(error));
 | |
|       }
 | |
|     });
 | |
|   }
 | |
| }
 | |
| 
 | |
| function setLoginPending(isLoginPending) {
 | |
|   return {
 | |
|     type: SET_LOGIN_PENDING,
 | |
|     isLoginPending
 | |
|   };
 | |
| }
 | |
| 
 | |
| function setLoginSuccess(isLoginSuccess) {
 | |
|   return {
 | |
|     type: SET_LOGIN_SUCCESS,
 | |
|     isLoginSuccess
 | |
|   };
 | |
| }
 | |
| 
 | |
| function setLoginError(loginError) {
 | |
|   return {
 | |
|     type: SET_LOGIN_ERROR,
 | |
|     loginError
 | |
|   }
 | |
| }
 | |
| 
 | |
| 
 | |
| function callLoginApi(username, password, callback) {
 | |
|  
 | |
|   Promise.resolve()
 | |
|   fetch('https://apollo.kevinmidboe.com/api/v1/user/login', {
 | |
|     method: 'POST',
 | |
|     headers: {
 | |
|       'Content-type': 'application/json'
 | |
|     },
 | |
|     body: JSON.stringify({
 | |
|       username: username,
 | |
|       password: password,
 | |
|     })
 | |
|   })
 | |
|   .then(response => {   
 | |
|     switch (response.status) {
 | |
|       case 200:
 | |
|         response.json()
 | |
|         .then((data) => {
 | |
|           if (data.success === true) {
 | |
|             let token = data.token;
 | |
|             setCookie('token', token, 10);
 | |
|             setCookie('logged_in', true, 10);
 | |
|             setCookie('loggedInUser', username, 10);
 | |
| 
 | |
|             window.location.reload();
 | |
|           }
 | |
|           return callback(null);
 | |
|         })
 | |
| 
 | |
|       case 401:
 | |
|         return callback(new Error(response.statusText));
 | |
|     }
 | |
|   })
 | |
|   .catch(error => {
 | |
|       return callback(new Error('Invalid username and password'));
 | |
|   });
 | |
| }
 | |
| 
 | |
| export default function reducer(state = {
 | |
|   isLoginSuccess: false,
 | |
|   isLoginPending: false,
 | |
|   loginError: null
 | |
| }, action) {
 | |
|   switch (action.type) {
 | |
|     case SET_LOGIN_PENDING:
 | |
|       return Object.assign({}, state, {
 | |
|         isLoginPending: action.isLoginPending
 | |
|       });
 | |
| 
 | |
|     case SET_LOGIN_SUCCESS:
 | |
|       return Object.assign({}, state, {
 | |
|         isLoginSuccess: action.isLoginSuccess
 | |
|       });
 | |
| 
 | |
|     case SET_LOGIN_ERROR:
 | |
|       return Object.assign({}, state, {
 | |
|         loginError: action.loginError
 | |
|       });
 | |
| 
 | |
|     default:
 | |
|       return state;
 | |
|   }
 | |
| } |