@@ -26,22 +26,79 @@ qx.Class.define("osparc.po.UsersPending", {
2626 data : [ {
2727 name : "John Doe" ,
282829- status : "APPROVAL_PENDING" ,
3029 date : "2025-01-01 00:00:00.702394" ,
30+ status : "APPROVAL_PENDING" ,
3131 } , {
3232 name : "Jane Doe" ,
333334- status : "APPROVAL_DENIED" ,
3534 date : "2025-01-01 00:01:00.702394" ,
35+ status : "APPROVAL_DENIED" ,
3636 } , {
3737 name : "Alice Smith" ,
383839- status : "CONFIRMATION_PENDING" ,
4039 date : "2025-01-01 00:02:00.702394" ,
40+ status : "CONFIRMATION_PENDING" ,
4141 } ]
4242 } ) ;
4343 } ) ;
4444 } ,
45+
46+ createApproveButton : function ( email ) {
47+ const button = new osparc . ui . form . FetchButton ( qx . locale . Manager . tr ( "Approve" ) ) ;
48+ button . addListener ( "execute" , ( ) => {
49+ button . setFetching ( true ) ;
50+ const params = {
51+ url : {
52+ userEmail : email ,
53+ } ,
54+ } ;
55+ osparc . data . Resources . fetch ( "poUsers" , "approveUser" , params )
56+ . then ( ( ) => {
57+ osparc . FlashMessenger . logAs ( qx . locale . Manager . tr ( "User approved" ) , "INFO" ) ;
58+ } )
59+ . catch ( err => osparc . FlashMessenger . logError ( err ) )
60+ . finally ( ( ) => button . setFetching ( false ) ) ;
61+ } ) ;
62+ return button ;
63+ } ,
64+
65+ createDenyButton : function ( email ) {
66+ const button = new osparc . ui . form . FetchButton ( qx . locale . Manager . tr ( "Deny" ) ) ;
67+ button . addListener ( "execute" , ( ) => {
68+ button . setFetching ( true ) ;
69+ const params = {
70+ url : {
71+ userEmail : email ,
72+ } ,
73+ } ;
74+ osparc . data . Resources . fetch ( "poUsers" , "denyUser" , params )
75+ . then ( ( ) => {
76+ osparc . FlashMessenger . logAs ( qx . locale . Manager . tr ( "User denied" ) , "INFO" ) ;
77+ } )
78+ . catch ( err => osparc . FlashMessenger . logError ( err ) )
79+ . finally ( ( ) => button . setFetching ( false ) ) ;
80+ } ) ;
81+ return button ;
82+ } ,
83+
84+ createResendEmailButton : function ( email ) {
85+ const button = new osparc . ui . form . FetchButton ( qx . locale . Manager . tr ( "Resend Email" ) ) ;
86+ button . addListener ( "execute" , ( ) => {
87+ button . setFetching ( true ) ;
88+ const params = {
89+ url : {
90+ userEmail : email ,
91+ } ,
92+ } ;
93+ osparc . data . Resources . fetch ( "poUsers" , "resendConfirmationEmail" , params )
94+ . then ( ( ) => {
95+ osparc . FlashMessenger . logAs ( qx . locale . Manager . tr ( "Email sent" ) , "INFO" ) ;
96+ } )
97+ . catch ( err => osparc . FlashMessenger . logError ( err ) )
98+ . finally ( ( ) => button . setFetching ( false ) ) ;
99+ } ) ;
100+ return button ;
101+ } ,
45102 } ,
46103
47104 members : {
@@ -54,6 +111,12 @@ qx.Class.define("osparc.po.UsersPending", {
54111 flex : 1
55112 } ) ;
56113 break ;
114+ case "pending-users-layout" : {
115+ const grid = new qx . ui . layout . Grid ( 15 , 5 ) ;
116+ control = new qx . ui . container . Composite ( grid ) ;
117+ this . getChildControl ( "pending-users-container" ) . add ( control ) ;
118+ break ;
119+ }
57120 }
58121 return control || this . base ( arguments , id ) ;
59122 } ,
@@ -64,14 +127,103 @@ qx.Class.define("osparc.po.UsersPending", {
64127 this . __populatePendingUsersLayout ( ) ;
65128 } ,
66129
67- __populatePendingUsersLayout : function ( respData ) {
68- const pendingUsersContainer = this . getChildControl ( "pending-users-container" ) ;
69- osparc . utils . Utils . removeAllChildren ( pendingUsersContainer ) ;
130+ __addHeader : function ( ) {
131+ const pendingUsersLayout = this . getChildControl ( "pending-users-layout" ) ;
132+
133+ pendingUsersLayout . add ( new qx . ui . basic . Label ( this . tr ( "Name" ) ) . set ( {
134+ font : "text-14"
135+ } ) , {
136+ row : 0 ,
137+ column : 0 ,
138+ } ) ;
139+
140+ pendingUsersLayout . add ( new qx . ui . basic . Label ( this . tr ( "Email" ) ) . set ( {
141+ font : "text-14"
142+ } ) , {
143+ row : 0 ,
144+ column : 1 ,
145+ } ) ;
146+
147+ pendingUsersLayout . add ( new qx . ui . basic . Label ( this . tr ( "Date" ) ) . set ( {
148+ font : "text-14"
149+ } ) , {
150+ row : 0 ,
151+ column : 2 ,
152+ } ) ;
153+
154+ pendingUsersLayout . add ( new qx . ui . basic . Label ( this . tr ( "Status" ) ) . set ( {
155+ font : "text-14"
156+ } ) , {
157+ row : 0 ,
158+ column : 3 ,
159+ } ) ;
160+
161+ pendingUsersLayout . add ( new qx . ui . basic . Label ( this . tr ( "Action" ) ) . set ( {
162+ font : "text-14"
163+ } ) , {
164+ row : 0 ,
165+ column : 4 ,
166+ } ) ;
167+ } ,
168+
169+ __addRows : function ( pendingUsers ) {
170+ const pendingUsersLayout = this . getChildControl ( "pending-users-layout" ) ;
171+
172+ let row = 1 ;
173+ pendingUsers . forEach ( pendingUser => {
174+ pendingUsersLayout . add ( new qx . ui . basic . Label ( pendingUser . name ) , {
175+ row,
176+ column : 0 ,
177+ } ) ;
178+ pendingUsersLayout . add ( new qx . ui . basic . Label ( pendingUser . email ) , {
179+ row,
180+ column : 1 ,
181+ } ) ;
182+ pendingUsersLayout . add ( new qx . ui . basic . Label ( osparc . utils . Utils . formatDateAndTime ( new Date ( pendingUser . date ) ) ) , {
183+ row,
184+ column : 2 ,
185+ } ) ;
186+ pendingUsersLayout . add ( new qx . ui . basic . Label ( pendingUser . status . toLowerCase ( ) ) , {
187+ row,
188+ column : 3 ,
189+ } ) ;
190+
191+ const buttonsLayout = new qx . ui . container . Composite ( new qx . ui . layout . HBox ( 5 ) ) ;
192+ pendingUsersLayout . add ( buttonsLayout , {
193+ row,
194+ column : 4 ,
195+ } ) ;
196+ switch ( pendingUser . status ) {
197+ case "APPROVAL_PENDING" : {
198+ const approveButton = this . self ( ) . createApproveButton ( pendingUser . email ) ;
199+ buttonsLayout . add ( approveButton ) ;
200+ const denyButton = this . self ( ) . createDenyButton ( pendingUser . email ) ;
201+ buttonsLayout . add ( denyButton ) ;
202+ break ;
203+ }
204+ case "APPROVAL_DENIED" : {
205+ const approveButton = this . self ( ) . createApproveButton ( pendingUser . email ) ;
206+ buttonsLayout . add ( approveButton ) ;
207+ break ;
208+ }
209+ case "CONFIRMATION_PENDING" : {
210+ const resendEmailButton = this . self ( ) . createResendEmailButton ( pendingUser . email ) ;
211+ buttonsLayout . add ( resendEmailButton ) ;
212+ break ;
213+ }
214+ }
215+ row ++ ;
216+ } ) ;
217+ } ,
70218
219+ __populatePendingUsersLayout : function ( ) {
71220 // osparc.data.Resources.fetch("poUsers", "getPendingUsers", params)
72221 this . self ( ) . getPendingUsers ( )
73222 . then ( pendingUsers => {
74- console . log ( "Pending users: " , pendingUsers ) ;
223+ const pendingUsersLayout = this . getChildControl ( "pending-users-layout" ) ;
224+ pendingUsersLayout . removeAll ( ) ;
225+ this . __addHeader ( ) ;
226+ this . __addRows ( pendingUsers [ "data" ] ) ;
75227 } )
76228 . catch ( err => osparc . FlashMessenger . logError ( err ) ) ;
77229 }
0 commit comments