import jwtDecode from 'jwt-decode' const defaultState = { userLoading: false, username: "", isAdmin: false, isLogged: false, polochonToken: "", polochonUrl: "", }; 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) case 'GET_USER_FULFILLED': return Object.assign({}, state, { polochonToken: action.payload.data.token, polochonUrl: action.payload.data.url, }) 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, }) }