import { IS_USER_LOGGED_IN } from '../actions/actionCreators' import jwtDecode from 'jwt-decode' const defaultState = { userLoading: false, username: "", isAdmin: false, isLogged: false, }; // This actions are generated from the promise middleware export default function userStore(state = defaultState, action) { switch (action.type) { case 'USER_LOGIN_PENDING': return Object.assign({}, state, { userLoading: true, }) case 'USER_LOGIN_FULFILLED': if (action.payload.data.type === "error") { return logoutUser(state) } return updateFromToken(state, action.payload.data.token) case IS_USER_LOGGED_IN: let localToken = localStorage.getItem('token'); if (!localToken || localToken === "") { return state; } return updateFromToken(state, localToken) default: return state; } } function logoutUser(state) { localStorage.removeItem('token'); return Object.assign({}, state, defaultState) } function updateFromToken(state, token) { const decodedToken = jwtDecode(token); localStorage.setItem('token', token); return Object.assign({}, state, { userLoading: false, isLogged: true, isAdmin: decodedToken.isAdmin, username: decodedToken.username, }) }