50 lines
1.3 KiB
JavaScript

import { IS_USER_LOGGED_IN, USER_LOGIN_PENDING, USER_LOGIN_FULFILLED, USER_LOGOUT } from '../actions/actionCreators'
import jwtDecode from 'jwt-decode'
const defaultState = {
userLoading: false,
username: "",
isAdmin: false,
isLogged: false,
};
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.status === "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)
case USER_LOGOUT:
return logoutUser(state)
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,
})
}