view client/src/usermanagement/store.js @ 904:e4b72a199258

New default bottleneck colors Mainly to make the stroke color one actually selectable in the ui. In addition the pink does better match the collors used on the ECDIS layer.
author Sascha Wilde <wilde@intevation.de>
date Tue, 02 Oct 2018 13:34:59 +0200
parents ef307bd6b5d8
children ca628dce90dd
line wrap: on
line source

import { HTTP } from "../application/lib/http";

const newUser = () => {
  return {
    user: "",
    email: "",
    country: null,
    role: null,
    isNew: true,
    password: "",
    roleLabel: ""
  };
};

const UserManagement = {
  namespaced: true,
  state: {
    users: null,
    currentUser: null,
    userDetailsVisible: false
  },
  getters: {
    isUserDetailsVisible: state => {
      return state.userDetailsVisible;
    },
    currentUser: state => {
      return state.currentUser;
    },
    users: state => {
      return state.users;
    },
    getUserByName: state => name => {
      return state.users.find(user => {
        return user.user === name;
      });
    }
  },
  mutations: {
    setUserDetailsInvisible: state => {
      state.userDetailsVisible = false;
    },
    setUserDetailsVisible: state => {
      state.userDetailsVisible = true;
    },
    usersLoaded: (state, data) => {
      const resolveLabel = x => {
        const labels = {
          waterway_user: "Waterway User",
          waterway_admin: "Waterway Administrator",
          sys_admin: "System Admininistrator"
        };
        return labels[x];
      };
      let users = data.users.map(u => {
        u["roleLabel"] = resolveLabel(u["role"]);
        return u;
      });
      state.users = users;
    },
    setCurrentUser: (state, data) => {
      state.currentUser = data;
      state.userDetailsVisible = true;
    },
    clearCurrentUser: state => {
      state.currentUser = newUser();
    }
  },
  actions: {
    deleteUser({ commit }, data) {
      const { name } = data;
      return new Promise((resolve, reject) => {
        HTTP.delete("/users/" + name, {
          headers: { "X-Gemma-Auth": localStorage.getItem("token") }
        })
          .then(response => {
            commit("clearCurrentUser");
            commit("setUserDetailsInvisible");
            resolve(response);
          })
          .catch(error => {
            reject(error);
          });
      });
    },
    saveCurrentUser({ commit }, data) {
      const { path, user } = data;
      if (user.isNew) {
        return new Promise((resolve, reject) => {
          HTTP.post("/users", user, {
            headers: { "X-Gemma-Auth": localStorage.getItem("token") }
          })
            .then(response => {
              commit("setUserDetailsInvisible");
              commit("clearCurrentUser");
              resolve(response);
            })
            .catch(error => {
              reject(error);
            });
        });
      } else {
        return new Promise((resolve, reject) => {
          HTTP.put("/users/" + path, user, {
            headers: { "X-Gemma-Auth": localStorage.getItem("token") }
          })
            .then(response => {
              commit("setUserDetailsInvisible");
              commit("clearCurrentUser");
              resolve(response);
            })
            .catch(error => {
              reject(error);
            });
        });
      }
    },
    loadUsers({ commit }) {
      return new Promise((resolve, reject) => {
        HTTP.get("/users", {
          headers: { "X-Gemma-Auth": localStorage.getItem("token") }
        })
          .then(response => {
            commit("usersLoaded", response.data);
            resolve(response);
          })
          .catch(error => {
            reject(error);
          });
      });
    }
  }
};

export default UserManagement;