1717
1818/** 
1919 * @asset (osparc/ui_config.json") 
20+  * @asset (schemas/product-ui.json) 
21+  * @asset (object-path/object-path-0-11-4.min.js) 
22+  * @asset (ajv/ajv-6-11-0.min.js) 
23+  * @ignore (Ajv) 
2024 */ 
2125
2226qx . Class . define ( "osparc.store.Products" ,  { 
@@ -27,31 +31,58 @@ qx.Class.define("osparc.store.Products", {
2731    __uiConfig : null , 
2832
2933    fetchUiConfig : function ( )  { 
30-       if   ( osparc . auth . Data . getInstance ( ) . isGuest ( ) )  { 
31-         return   new   Promise ( resolve   =>  { 
34+       return   new   Promise ( resolve   =>  { 
35+         if   ( osparc . auth . Data . getInstance ( ) . isGuest ( ) )  { 
3236          this . __uiConfig  =  { } ; 
3337          resolve ( this . __uiConfig ) ; 
34-         } ) ; 
35-       } 
38+         } 
3639
37-       return  Promise . all ( [ 
38-         osparc . data . Resources . fetch ( "productMetadata" ,  "getUiConfig" ) , 
39-         osparc . utils . Utils . fetchJSON ( "/resource/osparc/ui_config.json" ) , 
40-       ] ) 
41-         . then ( values  =>  { 
42-           let  uiConfig  =  { } ; 
43-           if  ( values [ 0 ]  &&  values [ 0 ] [ "ui" ]  &&  Object . keys ( values [ 0 ] [ "ui" ] ) . length )  { 
44-             uiConfig  =  values [ 0 ] [ "ui" ] ; 
45-           }  else  { 
46-             const  product  =  osparc . product . Utils . getProductName ( ) ; 
47-             if  ( values [ 1 ]  &&  product  in  values [ 1 ] )  { 
48-               uiConfig  =  values [ 1 ] [ product ] ; 
40+         Promise . all ( [ 
41+           osparc . data . Resources . fetch ( "productMetadata" ,  "getUiConfig" ) , 
42+           osparc . utils . Utils . fetchJSON ( "/resource/osparc/ui_config.json" ) , 
43+           osparc . utils . Utils . fetchJSON ( "/resource/schemas/product-ui.json" ) , 
44+         ] ) 
45+           . then ( values  =>  { 
46+             let  uiConfig  =  { } ; 
47+             const  beUiConfig  =  values [ 0 ] ; 
48+             const  feUiConfig  =  values [ 1 ] ; 
49+             const  schema  =  values [ 2 ] ; 
50+             if  ( beUiConfig  &&  beUiConfig [ "ui" ]  &&  Object . keys ( beUiConfig [ "ui" ] ) . length )  { 
51+               uiConfig  =  beUiConfig [ "ui" ] ; 
52+             }  else  { 
53+               const  product  =  osparc . product . Utils . getProductName ( ) ; 
54+               if  ( feUiConfig  &&  product  in  feUiConfig )  { 
55+                 uiConfig  =  feUiConfig [ product ] ; 
56+               } 
4957            } 
50-           } 
51-           this . __uiConfig  =  uiConfig ; 
52-           return  this . __uiConfig ; 
53-         } ) 
54-         . catch ( console . error ) ; 
58+             const  ajvLoader  =  new  qx . util . DynamicScriptLoader ( [ 
59+               "/resource/ajv/ajv-6-11-0.min.js" , 
60+               "/resource/object-path/object-path-0-11-4.min.js" 
61+             ] ) ; 
62+             ajvLoader . addListener ( "ready" ,  ( )  =>  { 
63+               const  ajv  =  new  Ajv ( { 
64+                 allErrors : true , 
65+                 strictDefaults : true , 
66+                 useDefaults : true , 
67+                 strictTypes : true , 
68+               } ) ; 
69+               const  validate  =  ajv . compile ( schema ) ; 
70+               const  valid  =  validate ( uiConfig ) ; 
71+               if  ( valid )  { 
72+                 this . __uiConfig  =  uiConfig ; 
73+                 resolve ( this . __uiConfig ) ; 
74+               }  else  { 
75+                 osparc . FlashMessenger . getInstance ( ) . logAs ( "Wrong product.ui config" ,  "ERROR" ) ; 
76+                 validate . errors . forEach ( err  =>  { 
77+                   console . error ( `Error at ${ err . dataPath } ${ err . message }  ) ; 
78+                 } ) ; 
79+               } 
80+             } ) ; 
81+             ajvLoader . addListener ( "failed" ,  console . error ,  this ) ; 
82+             ajvLoader . start ( ) ; 
83+           } ) 
84+           . catch ( console . error ) ; 
85+       } ) ; 
5586    } , 
5687
5788    getPlusButtonUiConfig : function ( )  { 
0 commit comments