Skip to content

Commit 575eaaa

Browse files
committed
User model
1 parent 296df6f commit 575eaaa

File tree

3 files changed

+145
-69
lines changed

3 files changed

+145
-69
lines changed
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
/* ************************************************************************
2+
3+
osparc - the simcore frontend
4+
5+
https://osparc.io
6+
7+
Copyright:
8+
2024 IT'IS Foundation, https://itis.swiss
9+
10+
License:
11+
MIT: https://opensource.org/licenses/MIT
12+
13+
Authors:
14+
* Odei Maiz (odeimaiz)
15+
16+
************************************************************************ */
17+
18+
/**
19+
* Class that stores User data.
20+
*/
21+
22+
qx.Class.define("osparc.data.model.User", {
23+
extend: qx.core.Object,
24+
25+
/**
26+
* @param userData {Object} Object containing the serialized User Data
27+
*/
28+
construct: function(userData) {
29+
this.base(arguments);
30+
31+
let label = userData["login"];
32+
if ("first_name" in userData && userData["first_name"]) {
33+
label = osparc.utils.Utils.firstsUp(userData["first_name"]);
34+
if (userData["last_name"]) {
35+
label += " " + osparc.utils.Utils.firstsUp(userData["last_name"]);
36+
}
37+
}
38+
this.set({
39+
userId: userData.id,
40+
groupId: userData.gid,
41+
label: label,
42+
login: userData.login,
43+
accessRights: userData.accessRights,
44+
});
45+
},
46+
47+
properties: {
48+
userId: {
49+
check: "Number",
50+
nullable: false,
51+
init: null,
52+
event: "changeUserId",
53+
},
54+
55+
groupId: {
56+
check: "Number",
57+
nullable: false,
58+
init: null,
59+
event: "changeGroupId",
60+
},
61+
62+
label: {
63+
check: "String",
64+
nullable: false,
65+
init: null,
66+
event: "changeLabel",
67+
},
68+
69+
login: {
70+
check: "String",
71+
nullable: true,
72+
init: null,
73+
event: "changeLogin",
74+
},
75+
76+
accessRights: {
77+
check: "Object",
78+
nullable: false,
79+
init: null,
80+
event: "changeAccessRights",
81+
},
82+
}
83+
});

services/static-webserver/client/source/class/osparc/desktop/preferences/pages/ClustersPage.js

Lines changed: 28 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -277,36 +277,34 @@ qx.Class.define("osparc.desktop.preferences.pages.ClustersPage", {
277277
this.__organizationsAndMembers.reloadVisibleCollaborators(memberKeys);
278278
}
279279

280-
osparc.store.Groups.getInstance().getPotentialCollaborators()
281-
.then(potentialCollaborators => {
282-
clusterMembers.forEach(clusterMember => {
283-
const gid = clusterMember.gid;
284-
if (gid in potentialCollaborators) {
285-
const collaborator = potentialCollaborators[gid];
286-
const collabObj = {};
287-
if (collaborator["collabType"] === 1) {
288-
collabObj["thumbnail"] = collaborator["thumbnail"] || "@FontAwesome5Solid/users/24";
289-
collabObj["name"] = osparc.utils.Utils.firstsUp(collaborator["label"]);
290-
collabObj["login"] = collaborator["description"];
291-
} else if (collaborator["collabType"] === 2) {
292-
collabObj["thumbnail"] = osparc.utils.Avatar.getUrl(collaborator["login"], 32);
293-
collaborator["name"] = osparc.utils.Utils.firstsUp(
294-
`${"first_name" in collaborator && collaborator["first_name"] != null ?
295-
collaborator["first_name"] : collaborator["login"]}`,
296-
`${"last_name" in collaborator && collaborator["last_name"] ?
297-
collaborator["last_name"] : ""}`
298-
);
299-
collabObj["login"] = collaborator["login"];
300-
}
301-
if (Object.keys(collabObj).length) {
302-
collabObj["id"] = collaborator["gid"];
303-
collabObj["accessRights"] = JSON.parse(qx.util.Serializer.toJson(clusterMember));
304-
collabObj["showOptions"] = canWrite;
305-
membersArrayModel.append(qx.data.marshal.Json.createModel(collabObj));
306-
}
307-
}
308-
});
309-
});
280+
const potentialCollaborators = osparc.store.Groups.getInstance().getPotentialCollaborators();
281+
clusterMembers.forEach(clusterMember => {
282+
const gid = "gid" in clusterMember ? clusterMember["gid"] : clusterMember.getGroupId();
283+
if (gid in potentialCollaborators) {
284+
const collaborator = potentialCollaborators[gid];
285+
const collabObj = {};
286+
if (collaborator["collabType"] === 1) {
287+
collabObj["thumbnail"] = collaborator["thumbnail"] || "@FontAwesome5Solid/users/24";
288+
collabObj["name"] = osparc.utils.Utils.firstsUp(collaborator["label"]);
289+
collabObj["login"] = collaborator["description"];
290+
} else if (collaborator["collabType"] === 2) {
291+
collabObj["thumbnail"] = osparc.utils.Avatar.getUrl(collaborator["login"], 32);
292+
collaborator["name"] = osparc.utils.Utils.firstsUp(
293+
`${"first_name" in collaborator && collaborator["first_name"] != null ?
294+
collaborator["first_name"] : collaborator["login"]}`,
295+
`${"last_name" in collaborator && collaborator["last_name"] ?
296+
collaborator["last_name"] : ""}`
297+
);
298+
collabObj["login"] = collaborator["login"];
299+
}
300+
if (Object.keys(collabObj).length) {
301+
collabObj["id"] = collaborator["gid"];
302+
collabObj["accessRights"] = JSON.parse(qx.util.Serializer.toJson(clusterMember));
303+
collabObj["showOptions"] = canWrite;
304+
membersArrayModel.append(qx.data.marshal.Json.createModel(collabObj));
305+
}
306+
}
307+
});
310308
},
311309

312310
__openEditCluster: function(clusterId) {

services/static-webserver/client/source/class/osparc/store/Groups.js

Lines changed: 34 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -110,12 +110,9 @@ qx.Class.define("osparc.store.Groups", {
110110
if (group) {
111111
group.setGroupMembers({});
112112
orgMembers.forEach(orgMember => {
113-
orgMember["label"] = osparc.utils.Utils.firstsUp(
114-
`${"first_name" in orgMember && orgMember["first_name"] != null ? orgMember["first_name"] : orgMember["login"]}`,
115-
`${orgMember["last_name"] ? orgMember["last_name"] : ""}`
116-
);
117-
group.getGroupMembers()[orgMember["gid"]] = orgMember;
118-
this.getReachableMembers()[orgMember["gid"]] = orgMember;
113+
const user = new osparc.data.model.User(orgMember)
114+
group.getGroupMembers()[orgMember["gid"]] = user;
115+
this.getReachableMembers()[orgMember["gid"]] = user;
119116
});
120117
}
121118
});
@@ -180,42 +177,40 @@ qx.Class.define("osparc.store.Groups", {
180177
},
181178

182179
getPotentialCollaborators: function(includeMe = false, includeProductEveryone = false) {
183-
return new Promise((resolve, reject) => {
184-
const potentialCollaborators = {};
185-
const orgs = this.getOrganizations();
186-
const productEveryone = this.getEveryoneProductGroup();
187-
Object.values(orgs).forEach(org => {
188-
if (org.getAccessRights()["read"]) {
189-
// maybe because of migration script, some users have access to the product everyone group
190-
// rely on the includeProductEveryone argument to exclude it if necessary
191-
if (org.getGroupId() === productEveryone.getGroupId() && !includeProductEveryone) {
192-
return;
193-
}
194-
org["collabType"] = 1;
195-
potentialCollaborators[org.getGroupId()] = org;
180+
const potentialCollaborators = {};
181+
const orgs = this.getOrganizations();
182+
const productEveryone = this.getEveryoneProductGroup();
183+
Object.values(orgs).forEach(org => {
184+
if (org.getAccessRights()["read"]) {
185+
// maybe because of migration script, some users have access to the product everyone group
186+
// rely on the includeProductEveryone argument to exclude it if necessary
187+
if (org.getGroupId() === productEveryone.getGroupId() && !includeProductEveryone) {
188+
return;
196189
}
197-
});
198-
const members = this.getReachableMembers();
199-
for (const gid of Object.keys(members)) {
200-
members[gid]["collabType"] = 2;
201-
potentialCollaborators[gid] = members[gid];
202-
}
203-
if (includeMe) {
204-
const myData = osparc.auth.Data.getInstance();
205-
const myGid = myData.getGroupId();
206-
potentialCollaborators[myGid] = {
207-
"login": myData.getEmail(),
208-
"first_name": myData.getFirstName(),
209-
"last_name": myData.getLastName(),
210-
"collabType": 2
211-
};
212-
}
213-
if (includeProductEveryone && productEveryone) {
214-
productEveryone["collabType"] = 0;
215-
potentialCollaborators[productEveryone.getGroupId()] = productEveryone;
190+
org["collabType"] = 1;
191+
potentialCollaborators[org.getGroupId()] = org;
216192
}
217-
resolve(potentialCollaborators);
218193
});
194+
const members = this.getReachableMembers();
195+
for (const gid of Object.keys(members)) {
196+
members[gid]["collabType"] = 2;
197+
potentialCollaborators[gid] = members[gid];
198+
}
199+
if (includeMe) {
200+
const myData = osparc.auth.Data.getInstance();
201+
const myGid = myData.getGroupId();
202+
potentialCollaborators[myGid] = {
203+
"login": myData.getEmail(),
204+
"first_name": myData.getFirstName(),
205+
"last_name": myData.getLastName(),
206+
"collabType": 2
207+
};
208+
}
209+
if (includeProductEveryone && productEveryone) {
210+
productEveryone["collabType"] = 0;
211+
potentialCollaborators[productEveryone.getGroupId()] = productEveryone;
212+
}
213+
return potentialCollaborators;
219214
},
220215

221216
getGroup: function(groupId = null) {

0 commit comments

Comments
 (0)