import { OrderedMap, Map, fromJS } from 'immutable' import jwtDecode from 'jwt-decode' import Cookies from 'universal-cookie' const defaultState = Map({ loading: false, username: "", isAdmin: false, isLogged: false, polochonToken: "", polochonUrl: "", }); export default function userStore(state = defaultState, action) { switch (action.type) { case 'USER_LOGIN_PENDING': return state.set('loading', true); case 'USER_LOGIN_FULFILLED': if (action.payload.response.status === "error") { return logoutUser() } return updateFromToken(state, action.payload.response.data.token) case 'USER_SET_TOKEN': return updateFromToken(state, action.payload.token) case 'USER_LOGOUT': return logoutUser() case 'GET_USER_FULFILLED': return state.merge(Map({ polochonToken: action.payload.response.data.token, polochonUrl: action.payload.response.data.url, })) default: return state; } } function logoutUser() { localStorage.removeItem('token'); const cookies = new Cookies(); cookies.remove('token'); return defaultState } function updateFromToken(state, token) { const decodedToken = jwtDecode(token); localStorage.setItem('token', token); const cookies = new Cookies(); cookies.set('token', token); return state.merge(Map({ userLoading: false, isLogged: true, isAdmin: decodedToken.isAdmin, username: decodedToken.username, })) }