Skip to content

Commit fb1e149

Browse files
committed
Store back
1 parent a2724eb commit fb1e149

File tree

1 file changed

+206
-0
lines changed
  • services/static-webserver/client/source/class/osparc/store

1 file changed

+206
-0
lines changed

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

Lines changed: 206 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,26 @@ qx.Class.define("osparc.store.Store", {
174174
check: "Array",
175175
init: []
176176
},
177+
organizations: {
178+
check: "Object",
179+
init: {}
180+
},
181+
organizationMembers: {
182+
check: "Object",
183+
init: {}
184+
},
185+
reachableMembers: {
186+
check: "Object",
187+
init: {}
188+
},
189+
everyoneProductGroup: {
190+
check: "Object",
191+
init: {}
192+
},
193+
everyoneGroup: {
194+
check: "Object",
195+
init: {}
196+
},
177197
clusters: {
178198
check: "Array",
179199
init: [],
@@ -436,6 +456,192 @@ qx.Class.define("osparc.store.Store", {
436456
});
437457
});
438458
},
459+
__getGroups: function(group) {
460+
return new Promise(resolve => {
461+
osparc.data.Resources.get("organizations")
462+
.then(groups => {
463+
resolve(groups[group]);
464+
})
465+
.catch(err => console.error(err));
466+
});
467+
},
468+
469+
getGroupsMe: function() {
470+
return this.__getGroups("me");
471+
},
472+
473+
getGroupsOrganizations: function() {
474+
return this.__getGroups("organizations");
475+
},
476+
477+
getProductEveryone: function() {
478+
return this.__getGroups("product");
479+
},
480+
481+
getGroupEveryone: function() {
482+
return this.__getGroups("all");
483+
},
484+
485+
__getAllGroups: function() {
486+
return new Promise(resolve => {
487+
const promises = [];
488+
promises.push(this.getGroupsMe());
489+
promises.push(this.getReachableMembers());
490+
promises.push(this.getGroupsOrganizations());
491+
promises.push(this.getProductEveryone());
492+
promises.push(this.getGroupEveryone());
493+
Promise.all(promises)
494+
.then(values => {
495+
const groups = [];
496+
const groupMe = values[0];
497+
groupMe["collabType"] = 2;
498+
groups.push(groupMe);
499+
const orgMembers = values[1];
500+
for (const gid of Object.keys(orgMembers)) {
501+
orgMembers[gid]["collabType"] = 2;
502+
groups.push(orgMembers[gid]);
503+
}
504+
values[2].forEach(org => {
505+
org["collabType"] = 1;
506+
groups.push(org);
507+
});
508+
const groupProductEveryone = values[3];
509+
if (groupProductEveryone) {
510+
groupProductEveryone["collabType"] = 0;
511+
groups.push(groupProductEveryone);
512+
}
513+
const groupEveryone = values[4];
514+
if (groupEveryone) {
515+
groupEveryone["collabType"] = 0;
516+
groups.push(groupEveryone);
517+
}
518+
resolve(groups);
519+
});
520+
});
521+
},
522+
523+
getOrganizationOrUser: function(orgId) {
524+
return new Promise(resolve => {
525+
this.__getAllGroups()
526+
.then(orgs => {
527+
const idx = orgs.findIndex(org => org.gid === parseInt(orgId));
528+
if (idx > -1) {
529+
resolve(orgs[idx]);
530+
}
531+
resolve(null);
532+
});
533+
});
534+
},
535+
536+
getAllGroupsAndMembers: function() {
537+
return new Promise(resolve => {
538+
osparc.data.Resources.get("organizations")
539+
.then(resp => {
540+
this.setEveryoneGroup(resp["all"]);
541+
this.setEveryoneProductGroup(resp["product"]);
542+
const orgMembersPromises = [];
543+
const orgs = resp["organizations"];
544+
orgs.forEach(org => {
545+
const params = {
546+
url: {
547+
"gid": org["gid"]
548+
}
549+
};
550+
orgMembersPromises.push(osparc.data.Resources.get("organizationMembers", params));
551+
});
552+
Promise.all(orgMembersPromises)
553+
.then(orgMemberss => {
554+
const reachableMembers = this.getReachableMembers();
555+
orgMemberss.forEach(orgMembers => {
556+
orgMembers.forEach(orgMember => {
557+
orgMember["label"] = osparc.utils.Utils.firstsUp(
558+
`${"first_name" in orgMember && orgMember["first_name"] != null ? orgMember["first_name"] : orgMember["login"]}`,
559+
`${orgMember["last_name"] ? orgMember["last_name"] : ""}`
560+
);
561+
reachableMembers[orgMember["gid"]] = orgMember;
562+
});
563+
});
564+
resolve();
565+
});
566+
});
567+
});
568+
},
569+
570+
getPotentialCollaborators: function(includeMe = false, includeProductEveryone = false) {
571+
return new Promise((resolve, reject) => {
572+
const promises = [];
573+
promises.push(this.getGroupsOrganizations());
574+
promises.push(this.getReachableMembers());
575+
promises.push(this.getEveryoneProductGroup());
576+
Promise.all(promises)
577+
.then(values => {
578+
const orgs = values[0]; // array
579+
const members = values[1]; // object
580+
const productEveryone = values[2]; // entry
581+
const potentialCollaborators = {};
582+
orgs.forEach(org => {
583+
if (org["accessRights"]["read"]) {
584+
// maybe because of migration script, some users have access to the product everyone group
585+
// rely on the includeProductEveryone argument to exclude it if necessary
586+
if (org["gid"] === productEveryone["gid"] && !includeProductEveryone) {
587+
return;
588+
}
589+
org["collabType"] = 1;
590+
potentialCollaborators[org["gid"]] = org;
591+
}
592+
});
593+
for (const gid of Object.keys(members)) {
594+
members[gid]["collabType"] = 2;
595+
potentialCollaborators[gid] = members[gid];
596+
}
597+
if (includeMe) {
598+
const myData = osparc.auth.Data.getInstance();
599+
const myGid = myData.getGroupId();
600+
potentialCollaborators[myGid] = {
601+
"login": myData.getEmail(),
602+
"first_name": myData.getFirstName(),
603+
"last_name": myData.getLastName(),
604+
"collabType": 2
605+
};
606+
}
607+
if (includeProductEveryone && productEveryone) {
608+
productEveryone["collabType"] = 0;
609+
potentialCollaborators[productEveryone["gid"]] = productEveryone;
610+
}
611+
resolve(potentialCollaborators);
612+
})
613+
.catch(err => {
614+
console.error(err);
615+
reject(err);
616+
});
617+
});
618+
},
619+
620+
getGroup: function(gid) {
621+
return new Promise(resolve => {
622+
if (gid) {
623+
this.getPotentialCollaborators()
624+
.then(potentialCollaborators => {
625+
let group = null;
626+
if (gid in potentialCollaborators) {
627+
group = potentialCollaborators[gid];
628+
}
629+
resolve(group);
630+
})
631+
.catch(() => resolve(null));
632+
} else {
633+
resolve(null);
634+
}
635+
});
636+
},
637+
638+
getUser: function(uid) {
639+
if (uid) {
640+
const visibleMembers = this.getReachableMembers();
641+
return Object.values(visibleMembers).find(member => member.id === uid);
642+
}
643+
return null;
644+
},
439645

440646
reloadCreditPrice: function() {
441647
const store = osparc.store.Store.getInstance();

0 commit comments

Comments
 (0)