import { Map } from "immutable" import jwtDecode from "jwt-decode" import Cookies from "universal-cookie" const defaultState = Map({ loading: false, username: "", isAdmin: false, isLogged: false, polochonToken: "", polochonUrl: "", }); const handlers = { "USER_LOGIN_PENDING": state => state.set("loading", true), "USER_LOGIN_FULFILLED": (state, action) => { if (action.payload.response.status === "error") { return logoutUser() } return updateFromToken(state, action.payload.response.data.token) }, "USER_SET_TOKEN": (state, action) => updateFromToken(state, action.payload.token), "USER_LOGOUT": () => logoutUser(), "GET_USER_FULFILLED": (state, action) => state.merge(Map({ polochonToken: action.payload.response.data.token, polochonUrl: action.payload.response.data.url, })), } 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, })) } export default (state = defaultState, action) => handlers[action.type] ? handlers[action.type](state, action) : state;