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; } }