Mercurial > gemma
diff client/src/usermanagement/store.js @ 585:ef307bd6b5d8
refac: restructured client application
To make the application more accessible for developers, the structure was reorganized.
Instead of sticking to technical terminology, the application terminology is according to the domain:
I.e. "map" contains everything regarding map (including store).
author | Thomas Junk <thomas.junk@intevation.de> |
---|---|
date | Fri, 07 Sep 2018 11:13:56 +0200 |
parents | |
children | ca628dce90dd |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/client/src/usermanagement/store.js Fri Sep 07 11:13:56 2018 +0200 @@ -0,0 +1,134 @@ +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;