59 lines
1.4 KiB
JavaScript
59 lines
1.4 KiB
JavaScript
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,
|
|
}))
|
|
}
|