Mercurial > gemma
diff client/src/store/usermanagement.js @ 1096:aa1f5daf6fc9
refac: centralized stores
author | Thomas Junk <thomas.junk@intevation.de> |
---|---|
date | Tue, 30 Oct 2018 16:55:29 +0100 |
parents | client/src/usermanagement/store.js@ca628dce90dd |
children | 8d12056d602a |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/client/src/store/usermanagement.js Tue Oct 30 16:55:29 2018 +0100 @@ -0,0 +1,149 @@ +/* + * This is Free Software under GNU Affero General Public License v >= 3.0 + * without warranty, see README.md and license for details. + * + * SPDX-License-Identifier: AGPL-3.0-or-later + * License-Filename: LICENSES/AGPL-3.0.txt + * + * Copyright (C) 2018 by via donau + * – Österreichische Wasserstraßen-Gesellschaft mbH + * Software engineering by Intevation GmbH + * + * Author(s): + * Thomas Junk <thomas.junk@intevation.de> + */ + +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;