Update the user reducer from switch to map

This commit is contained in:
Grégoire Delattre 2017-06-02 21:12:20 +02:00
parent 99fbe22d6d
commit 255aa83453

View File

@ -1,7 +1,7 @@
import { OrderedMap, Map, fromJS } from 'immutable' import { Map } from "immutable"
import jwtDecode from 'jwt-decode' import jwtDecode from "jwt-decode"
import Cookies from 'universal-cookie' import Cookies from "universal-cookie"
const defaultState = Map({ const defaultState = Map({
loading: false, loading: false,
@ -12,42 +12,35 @@ const defaultState = Map({
polochonUrl: "", polochonUrl: "",
}); });
export default function userStore(state = defaultState, action) { const handlers = {
switch (action.type) { "USER_LOGIN_PENDING": state => state.set("loading", true),
case 'USER_LOGIN_PENDING': "USER_LOGIN_FULFILLED": (state, action) => {
return state.set('loading', true);
case 'USER_LOGIN_FULFILLED':
if (action.payload.response.status === "error") { if (action.payload.response.status === "error") {
return logoutUser() return logoutUser()
} }
return updateFromToken(state, action.payload.response.data.token) return updateFromToken(state, action.payload.response.data.token)
case 'USER_SET_TOKEN': },
return updateFromToken(state, action.payload.token) "USER_SET_TOKEN": (state, action) => updateFromToken(state, action.payload.token),
case 'USER_LOGOUT': "USER_LOGOUT": () => logoutUser(),
return logoutUser() "GET_USER_FULFILLED": (state, action) => state.merge(Map({
case 'GET_USER_FULFILLED':
return state.merge(Map({
polochonToken: action.payload.response.data.token, polochonToken: action.payload.response.data.token,
polochonUrl: action.payload.response.data.url, polochonUrl: action.payload.response.data.url,
})) })),
default:
return state;
}
} }
function logoutUser() { function logoutUser() {
localStorage.removeItem('token'); localStorage.removeItem("token");
const cookies = new Cookies(); const cookies = new Cookies();
cookies.remove('token'); cookies.remove("token");
return defaultState return defaultState
} }
function updateFromToken(state, token) { function updateFromToken(state, token) {
const decodedToken = jwtDecode(token); const decodedToken = jwtDecode(token);
localStorage.setItem('token', token); localStorage.setItem("token", token);
const cookies = new Cookies(); const cookies = new Cookies();
cookies.set('token', token); cookies.set("token", token);
return state.merge(Map({ return state.merge(Map({
userLoading: false, userLoading: false,
@ -56,3 +49,6 @@ function updateFromToken(state, token) {
username: decodedToken.username, username: decodedToken.username,
})) }))
} }
export default (state = defaultState, action) =>
handlers[action.type] ? handlers[action.type](state, action) : state;