comparison 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
comparison
equal deleted inserted replaced
584:8b66a10aaf8a 585:ef307bd6b5d8
1 import { HTTP } from "../application/lib/http";
2
3 const newUser = () => {
4 return {
5 user: "",
6 email: "",
7 country: null,
8 role: null,
9 isNew: true,
10 password: "",
11 roleLabel: ""
12 };
13 };
14
15 const UserManagement = {
16 namespaced: true,
17 state: {
18 users: null,
19 currentUser: null,
20 userDetailsVisible: false
21 },
22 getters: {
23 isUserDetailsVisible: state => {
24 return state.userDetailsVisible;
25 },
26 currentUser: state => {
27 return state.currentUser;
28 },
29 users: state => {
30 return state.users;
31 },
32 getUserByName: state => name => {
33 return state.users.find(user => {
34 return user.user === name;
35 });
36 }
37 },
38 mutations: {
39 setUserDetailsInvisible: state => {
40 state.userDetailsVisible = false;
41 },
42 setUserDetailsVisible: state => {
43 state.userDetailsVisible = true;
44 },
45 usersLoaded: (state, data) => {
46 const resolveLabel = x => {
47 const labels = {
48 waterway_user: "Waterway User",
49 waterway_admin: "Waterway Administrator",
50 sys_admin: "System Admininistrator"
51 };
52 return labels[x];
53 };
54 let users = data.users.map(u => {
55 u["roleLabel"] = resolveLabel(u["role"]);
56 return u;
57 });
58 state.users = users;
59 },
60 setCurrentUser: (state, data) => {
61 state.currentUser = data;
62 state.userDetailsVisible = true;
63 },
64 clearCurrentUser: state => {
65 state.currentUser = newUser();
66 }
67 },
68 actions: {
69 deleteUser({ commit }, data) {
70 const { name } = data;
71 return new Promise((resolve, reject) => {
72 HTTP.delete("/users/" + name, {
73 headers: { "X-Gemma-Auth": localStorage.getItem("token") }
74 })
75 .then(response => {
76 commit("clearCurrentUser");
77 commit("setUserDetailsInvisible");
78 resolve(response);
79 })
80 .catch(error => {
81 reject(error);
82 });
83 });
84 },
85 saveCurrentUser({ commit }, data) {
86 const { path, user } = data;
87 if (user.isNew) {
88 return new Promise((resolve, reject) => {
89 HTTP.post("/users", user, {
90 headers: { "X-Gemma-Auth": localStorage.getItem("token") }
91 })
92 .then(response => {
93 commit("setUserDetailsInvisible");
94 commit("clearCurrentUser");
95 resolve(response);
96 })
97 .catch(error => {
98 reject(error);
99 });
100 });
101 } else {
102 return new Promise((resolve, reject) => {
103 HTTP.put("/users/" + path, user, {
104 headers: { "X-Gemma-Auth": localStorage.getItem("token") }
105 })
106 .then(response => {
107 commit("setUserDetailsInvisible");
108 commit("clearCurrentUser");
109 resolve(response);
110 })
111 .catch(error => {
112 reject(error);
113 });
114 });
115 }
116 },
117 loadUsers({ commit }) {
118 return new Promise((resolve, reject) => {
119 HTTP.get("/users", {
120 headers: { "X-Gemma-Auth": localStorage.getItem("token") }
121 })
122 .then(response => {
123 commit("usersLoaded", response.data);
124 resolve(response);
125 })
126 .catch(error => {
127 reject(error);
128 });
129 });
130 }
131 }
132 };
133
134 export default UserManagement;