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