Grégoire Delattre 4b26080193
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
Update redux state management
Use immer with native javascript objects instead of immutablejs.
2020-04-07 18:22:26 +02:00

118 lines
3.0 KiB
JavaScript

import { produce } from "immer";
import jwtDecode from "jwt-decode";
import Cookies from "universal-cookie";
const defaultState = {
error: "",
loading: false,
username: "",
isAdmin: false,
isActivated: false,
isTokenSet: false,
isLogged: false,
polochonToken: "",
polochonUrl: "",
polochonName: "",
polochonId: "",
polochonActivated: false,
tokens: [],
modules: {},
modulesLoading: false,
};
const logoutUser = () => {
localStorage.removeItem("token");
const cookies = new Cookies();
cookies.remove("token");
};
const updateFromToken = (draft, token) => {
const decodedToken = jwtDecode(token);
localStorage.setItem("token", token);
const cookies = new Cookies();
cookies.set("token", token);
draft.error = "";
draft.isLogged = true;
draft.isTokenSet = true;
draft.isAdmin = decodedToken.isAdmin;
draft.isActivated = decodedToken.isActivated;
draft.username = decodedToken.username;
};
// Initial state is the default state with the info from the current user
// token
let initialState = defaultState;
const token = localStorage.getItem("token");
if (token && token !== "") {
updateFromToken(initialState, token);
}
export default (state = initialState, action) =>
produce(state, (draft) => {
switch (action.type) {
case "USER_SIGNUP_PENDING":
case "USER_LOGIN_PENDING":
case "GET_USER_PENDING":
case "GET_USER_TOKENS_PENDING":
draft.loading = true;
break;
case "USER_LOGIN_ERROR":
logoutUser();
draft.isLogged = false;
draft.loading = false;
draft.error = action.payload.response.message;
break;
case "USER_LOGIN_FULFILLED":
draft.loading = false;
updateFromToken(draft, action.payload.response.data.token);
break;
case "USER_SIGNUP_ERROR":
draft.error = action.payload.response.message;
draft.loading = false;
break;
case "USER_SIGNUP_FULFILLED":
draft.error = "";
draft.loading = false;
break;
case "USER_SET_TOKEN":
updateFromToken(draft, action.payload.token);
break;
case "USER_LOGOUT":
logoutUser();
draft.isLogged = false;
break;
case "GET_USER_FULFILLED":
draft.polochonToken = action.payload.response.data.token;
draft.polochonUrl = action.payload.response.data.url;
draft.polochonName = action.payload.response.data.name;
draft.polochonId = action.payload.response.data.id;
draft.polochonActivated = action.payload.response.data.activated;
draft.loading = false;
break;
case "GET_USER_TOKENS_FULFILLED":
draft.tokens = action.payload.response.data;
draft.loading = false;
break;
case "GET_USER_MODULES_PENDING":
draft.modulesLoading = true;
break;
case "GET_USER_MODULES_FULFILLED":
draft.modules = action.payload.response.data;
draft.modulesLoading = false;
break;
}
});