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