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