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