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