@@ -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