17
17
18
18
/**
19
19
* @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)
20
24
*/
21
25
22
26
qx . Class . define ( "osparc.store.Products" , {
@@ -27,31 +31,58 @@ qx.Class.define("osparc.store.Products", {
27
31
__uiConfig : null ,
28
32
29
33
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 ( ) ) {
32
36
this . __uiConfig = { } ;
33
37
resolve ( this . __uiConfig ) ;
34
- } ) ;
35
- }
38
+ }
36
39
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
+ }
49
57
}
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
+ } ) ;
55
86
} ,
56
87
57
88
getPlusButtonUiConfig : function ( ) {
0 commit comments