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