Platform Role Assignments take 2
[osm/UI.git] / skyquake / plugins / user_management / src / platformRoleManagement / platformRoleManagementStore.js
1 /*
2 * STANDARD_RIFT_IO_COPYRIGHT
3 */
4 import PlatformRoleManagementActions from './platformRoleManagementActions.js';
5 import PlatformRoleManagementSource from './platformRoleManagementSource.js';
6 import _ from 'lodash';
7 export default class PlatformRoleManagementStore {
8 constructor() {
9 this.actions = PlatformRoleManagementActions(this.alt);
10 this.bindActions(this.actions);
11 this.registerAsync(PlatformRoleManagementSource);
12 this.projects = [];
13 this['name'] = '';
14 this['description'] = 'Some Description';
15 this.platformUsers = [];
16 this.selectedUser = null;
17 this.selectedRole = null;
18 this.roles = ['rw-rbac-platform:platform-admin', 'rw-rbac-platform:platform-oper', 'rw-rbac-platform:super-admin'
19 // 'some_other_role', 'yet_another_role', 'operator_role', 'some_other_role', 'yet_another_role'
20 ];
21 this.users = [];
22 this.activeIndex = null;
23 this.isReadOnly = true;
24 this.projectOpen = false;
25 this.hideColumns = false;
26 this.isEdit = false;
27 // this.exportPublicMethods({})
28 }
29 /**
30 * [handleFieldUpdate description]
31 * @param {Object} data {
32 * [store_property] : [value]
33 * }
34 * @return {[type]} [description]
35 */
36 handleUpdateInput(data) {
37 this.setState(data);
38 }
39 handleAddProjectItem(item) {
40 let projectRoles = this.projectRoles;
41 projectRoles.push('');
42 this.setState({projectRoles});
43 }
44 handleRemoveProjectItem(i) {
45 let projectRoles = this.projectRoles;
46 projectRoles.splice(i, 1);
47 console.log('Removing', projectRoles)
48 this.setState({projectRoles});
49 }
50 handleUpdateProjectRole(data) {
51 let i = data[0];
52 let e = data[1];
53 let projectRoles = this.projectRoles
54 projectRoles[i] = JSON.parse(e.currentTarget.value);
55 this.setState({
56 projectRoles
57 });
58 }
59 viewProject(data) {
60 let project = data[0];
61 let projectIndex = data[1];
62
63 let ProjectUser = {
64 'name': project['name'],
65 'description': project['description'],
66 'platformUsers': project['project-config'] && project['project-config']['user'] || []
67 }
68 let state = _.merge({
69 activeIndex: projectIndex,
70 projectOpen: true,
71 isEdit: true,
72 isReadOnly: true
73 }, ProjectUser);
74 this.setState(state)
75 }
76 editProject(isEdit) {
77 this.setState({
78 isReadOnly: isEdit
79 })
80 }
81 handleCloseProjectPanel() {
82 this.setState({
83 projectOpen: false,
84 isEdit: false,
85 isReadOnly: true
86 })
87 }
88 handleHideColumns(e) {
89 if(this.projectOpen && e.currentTarget.classList.contains('hideColumns')) {
90 this.setState({
91 hideColumns: true
92 })
93 } else {
94 this.setState({
95 hideColumns: false
96 })
97 }
98 }
99 handleDisabledChange(isDisabled){
100 this.setState({
101 disabled: isDisabled
102 })
103 }
104 handlePlatformRoleUpdate(data){
105 let platform_role = data[0];
106 let checked = data[1];
107 let platformRoles = this.platformRoles;
108 platformRoles[platform_role] = checked;
109 this.setState({
110 platformRoles
111 })
112 }
113 handleSelectedUser(event) {
114 this.setState({
115 selectedUser: JSON.parse(event.currentTarget.value)
116 })
117 }
118
119 handleSelectedRole(event) {
120 this.setState({
121 selectedRole: JSON.parse(event.currentTarget.value)
122 })
123 }
124 resetProject() {
125 let name = '';
126 let description = '';
127 return {
128 'name' : name,
129 'description' : description
130 }
131 }
132 handleAddProject() {
133 this.setState(_.merge( this.resetProject() ,
134 {
135 isEdit: false,
136 projectOpen: true,
137 activeIndex: null,
138 isReadOnly: false,
139 platformUsers: []
140 }
141 ))
142 }
143
144 handleUpdateSelectedUser(user) {
145 this.setState({
146 selectedUser: JSON.parse(user)
147 });
148 }
149 handleAddUser() {
150 let u = JSON.parse(this.selectedUser);
151 let r = this.selectedRole;
152 let platformUsers = this.platformUsers;
153 let keys = ","
154 console.log('adding user')
155 platformUsers.push({
156 'user-name': u['user-name'],
157 'user-domain': u['user-domain'],
158 "role":[{
159 "role": r,
160 "keys": keys
161 }
162 ]
163 })
164 this.setState({platformUsers, selectedUser: null})
165 }
166 handleToggleUserRoleInProject(data) {
167 let self = this;
168 let {userIndex, roleIndex, checked} = data;
169 let platformUsers = this.platformUsers;
170 let selectedRole = self.roles[roleIndex];
171 let keys = ","
172 if(checked) {
173 if(!platformUsers[userIndex].role) platformUsers[userIndex].role = [];
174 platformUsers[userIndex].role.push({
175 role: selectedRole,
176 keys: keys
177 })
178 } else {
179 let role = platformUsers[userIndex].role;
180 let roleIndex = _.findIndex(role, {role:selectedRole, keys: keys})
181 platformUsers[userIndex].role.splice(roleIndex, 1)
182 }
183 self.setState({platformUsers});
184
185 }
186 handleUpdateUserRoleInProject(data) {
187 let {userIndex, roleIndex, value} = data;
188 let platformUsers = this.platformUsers;
189 platformUsers[userIndex].role[roleIndex].role = value;
190 platformUsers[userIndex].role[roleIndex]['keys'] = value;
191
192 }
193 addRoleToUserInProject(userIndex) {
194 let platformUsers = this.platformUsers;
195 if(!platformUsers[userIndex].role) {
196 platformUsers[userIndex].role = [];
197 }
198 platformUsers[userIndex].role.push({
199 'role': null,
200 //temp until we get actual keys
201 'keys' : ','
202 });
203 this.setState({
204 platformUsers
205 })
206 }
207 handleRemoveRoleFromUserInProject (data) {
208 let {userIndex, roleIndex} = data;
209 let platformUsers = this.platformUsers;
210 platformUsers[userIndex].role.splice(roleIndex, 1);
211 this.setState({
212 platformUsers
213 })
214 }
215 handleRemoveUserFromProject (userIndex) {
216 let platformUsers = this.platformUsers;
217 platformUsers.splice(userIndex, 1);
218 this.setState({
219 platformUsers
220 })
221 }
222 getProjectsSuccess(projects) {
223 this.alt.actions.global.hideScreenLoader.defer();
224 this.setState({projects: projects});
225 }
226 getPlatformSuccess(platform) {
227 this.alt.actions.global.hideScreenLoader.defer();
228 let platformUsers = platform.user
229 let state = _.merge({
230 platform: platform,
231 projectOpen: true,
232 isEdit: true,
233 isReadOnly: true,
234 platformUsers: platformUsers
235 });
236 this.setState(state)
237 }
238 getPlatformRoleUsersSuccess(users) {
239 console.log(users)
240 this.alt.actions.global.hideScreenLoader.defer();
241 this.setState({users});
242 }
243 updateProjectSuccess() {
244 this.alt.actions.global.hideScreenLoader.defer();
245 let projects = this.projects || [];
246 projects[this.activeIndex] = {
247 'name': this['name'],
248 'description': this['description']
249 }
250 this.setState({
251 projects,
252 isEdit: true,
253 isReadOnly: true
254 })
255 }
256 deleteProjectSuccess() {
257 this.alt.actions.global.hideScreenLoader.defer();
258 let projects = this.projects;
259 projects.splice(this.activeIndex, 1);
260 this.setState({projects, projectOpen: false})
261 }
262 createProjectSuccess() {
263 this.alt.actions.global.hideScreenLoader.defer();
264 let projects = this.projects || [];
265 projects.push({
266 'name': this['name'],
267 'description': this['description']
268 });
269 let newState = {
270 projects,
271 isEdit: true,
272 isReadOnly: true,
273 activeIndex: projects.length - 1
274 };
275 _.merge(newState)
276 this.setState(newState);
277 }
278 }