From 13e719936299a8f3194da7d084aa49a0b6721a9a Mon Sep 17 00:00:00 2001 From: odeimaiz Date: Tue, 8 Apr 2025 13:34:47 +0200 Subject: [PATCH 01/14] __addServiceToCache --- .../client/source/class/osparc/store/Services.js | 14 +++++++++----- .../client/source/class/osparc/study/Utils.js | 2 +- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/services/static-webserver/client/source/class/osparc/store/Services.js b/services/static-webserver/client/source/class/osparc/store/Services.js index 8f1e390a8cf..c91f64e14f6 100644 --- a/services/static-webserver/client/source/class/osparc/store/Services.js +++ b/services/static-webserver/client/source/class/osparc/store/Services.js @@ -40,7 +40,7 @@ qx.Class.define("osparc.store.Services", { this.__addExtraTypeInfos(servicesObj); Object.values(servicesObj).forEach(serviceKey => { - Object.values(serviceKey).forEach(service => this.__addToCache(service)); + Object.values(serviceKey).forEach(service => this.__addServiceToCache(service)); }); resolve(servicesObj); @@ -127,12 +127,12 @@ qx.Class.define("osparc.store.Services", { this.__addHit(service); this.__addTSRInfo(service); this.__addExtraTypeInfo(service); - this.__addToCache(service) + this.__addServiceToCache(service) resolve(service); }) .catch(err => { // store it in cache to avoid asking again - this.__servicesCached[key][version] = null; + this.__addToCache(key, version, null); console.error(err); reject(); }) @@ -340,13 +340,17 @@ qx.Class.define("osparc.store.Services", { return this.getLatest("simcore/services/frontend/iterator-consumer/probe/"+type); }, - __addToCache: function(service) { + __addServiceToCache: function(service) { const key = service.key; const version = service.version; + this.__addToCache(key, version, service); + }, + + __addToCache: function(key, version, value) { if (!(key in this.__servicesCached)) { this.__servicesCached[key] = {}; } - this.__servicesCached[key][version] = service; + this.__servicesCached[key][version] = value; }, __isInCache: function(key, version) { diff --git a/services/static-webserver/client/source/class/osparc/study/Utils.js b/services/static-webserver/client/source/class/osparc/study/Utils.js index e04e452ceb3..58a367f0fda 100644 --- a/services/static-webserver/client/source/class/osparc/study/Utils.js +++ b/services/static-webserver/client/source/class/osparc/study/Utils.js @@ -358,7 +358,7 @@ qx.Class.define("osparc.study.Utils", { const wbService = wbServices[0]; osparc.store.Services.getService(wbService.key, wbService.version) .then(serviceMetadata => { - if (serviceMetadata["icon"]) { + if (serviceMetadata && serviceMetadata["icon"]) { resolve(serviceMetadata["icon"]); } resolve(defaultIcon); From 461075c54ac46dd925841cc6d4db0a74c5ed6e74 Mon Sep 17 00:00:00 2001 From: odeimaiz Date: Tue, 8 Apr 2025 13:39:03 +0200 Subject: [PATCH 02/14] error handling --- .../client/source/class/osparc/store/Services.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/services/static-webserver/client/source/class/osparc/store/Services.js b/services/static-webserver/client/source/class/osparc/store/Services.js index c91f64e14f6..c868dbe9a4d 100644 --- a/services/static-webserver/client/source/class/osparc/store/Services.js +++ b/services/static-webserver/client/source/class/osparc/store/Services.js @@ -110,7 +110,10 @@ qx.Class.define("osparc.store.Services", { if ( useCache && this.__isInCache(key, version) && - "history" in this.__servicesCached[key][version] + ( + this.__servicesCached[key][version] === null || + "history" in this.__servicesCached[key][version] + ) ) { resolve(this.__servicesCached[key][version]); return; From e149cee5f7e12bc8456b3e0a6f3f3dbc52ed283e Mon Sep 17 00:00:00 2001 From: odeimaiz Date: Tue, 8 Apr 2025 13:49:07 +0200 Subject: [PATCH 03/14] minor --- .../client/source/class/osparc/store/Store.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/services/static-webserver/client/source/class/osparc/store/Store.js b/services/static-webserver/client/source/class/osparc/store/Store.js index 81a1c4e9dcd..627eb89f584 100644 --- a/services/static-webserver/client/source/class/osparc/store/Store.js +++ b/services/static-webserver/client/source/class/osparc/store/Store.js @@ -226,6 +226,14 @@ qx.Class.define("osparc.store.Store", { check: "Array", init: [] }, + organizationMembers: { + check: "Array", + init: null, + }, + notifications: { + check: "Array", + init: null, + }, }, events: { From 0c80a6be5c007c890499b86e57a19a9150ce76f9 Mon Sep 17 00:00:00 2001 From: odeimaiz Date: Tue, 8 Apr 2025 14:59:40 +0200 Subject: [PATCH 04/14] minor --- .../client/source/class/osparc/dashboard/CardBase.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/services/static-webserver/client/source/class/osparc/dashboard/CardBase.js b/services/static-webserver/client/source/class/osparc/dashboard/CardBase.js index 189c437192d..21eb7c007f1 100644 --- a/services/static-webserver/client/source/class/osparc/dashboard/CardBase.js +++ b/services/static-webserver/client/source/class/osparc/dashboard/CardBase.js @@ -531,7 +531,8 @@ qx.Class.define("osparc.dashboard.CardBase", { const services = resp["services"]; resourceData["services"] = services; this.setServices(services); - }); + }) + .catch(err => console.error(err)); osparc.study.Utils.guessIcon(resourceData) .then(iconSource => this.setIcon(iconSource)); From 8c35b9ac5f3ca44051d4ebba87a30bc956c9fd42 Mon Sep 17 00:00:00 2001 From: odeimaiz Date: Tue, 8 Apr 2025 15:07:18 +0200 Subject: [PATCH 05/14] all -> allSettled --- .../client/source/class/osparc/dashboard/CardBase.js | 2 +- .../client/source/class/osparc/dashboard/ResourceDetails.js | 2 +- .../client/source/class/osparc/store/Services.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/services/static-webserver/client/source/class/osparc/dashboard/CardBase.js b/services/static-webserver/client/source/class/osparc/dashboard/CardBase.js index 21eb7c007f1..34ab8bf3a93 100644 --- a/services/static-webserver/client/source/class/osparc/dashboard/CardBase.js +++ b/services/static-webserver/client/source/class/osparc/dashboard/CardBase.js @@ -526,7 +526,7 @@ qx.Class.define("osparc.dashboard.CardBase", { }); if (resourceData["resourceType"] === "study" || resourceData["resourceType"] === "template") { - osparc.store.Services.getStudyServices(this.getResourceData()["uuid"]) + osparc.store.Services.getStudyServices(resourceData.uuid) .then(resp => { const services = resp["services"]; resourceData["services"] = services; diff --git a/services/static-webserver/client/source/class/osparc/dashboard/ResourceDetails.js b/services/static-webserver/client/source/class/osparc/dashboard/ResourceDetails.js index 2ebc0ae4249..a94c240a8a1 100644 --- a/services/static-webserver/client/source/class/osparc/dashboard/ResourceDetails.js +++ b/services/static-webserver/client/source/class/osparc/dashboard/ResourceDetails.js @@ -49,7 +49,7 @@ qx.Class.define("osparc.dashboard.ResourceDetails", { case "study": case "template": { osparc.store.Services.getStudyServicesMetadata(latestResourceData) - .then(() => { + .finally(() => { this.__resourceModel = new osparc.data.model.Study(latestResourceData); this.__resourceModel["resourceType"] = resourceData["resourceType"]; this.__addPages(); diff --git a/services/static-webserver/client/source/class/osparc/store/Services.js b/services/static-webserver/client/source/class/osparc/store/Services.js index c868dbe9a4d..73f45960753 100644 --- a/services/static-webserver/client/source/class/osparc/store/Services.js +++ b/services/static-webserver/client/source/class/osparc/store/Services.js @@ -285,7 +285,7 @@ qx.Class.define("osparc.store.Services", { wbServices.forEach(srv => { promises.push(this.getService(srv["key"], srv["version"])); }); - return Promise.all(promises); + return Promise.allSettled(promises); }, getInaccessibleServices: function(workbench) { From 88945f7ec2a27affd8b955876058b00b4afb8383 Mon Sep 17 00:00:00 2001 From: odeimaiz Date: Tue, 8 Apr 2025 15:20:29 +0200 Subject: [PATCH 06/14] minor --- .../client/source/class/osparc/dashboard/ResourceDetails.js | 1 + 1 file changed, 1 insertion(+) diff --git a/services/static-webserver/client/source/class/osparc/dashboard/ResourceDetails.js b/services/static-webserver/client/source/class/osparc/dashboard/ResourceDetails.js index a94c240a8a1..6d671f57554 100644 --- a/services/static-webserver/client/source/class/osparc/dashboard/ResourceDetails.js +++ b/services/static-webserver/client/source/class/osparc/dashboard/ResourceDetails.js @@ -52,6 +52,7 @@ qx.Class.define("osparc.dashboard.ResourceDetails", { .finally(() => { this.__resourceModel = new osparc.data.model.Study(latestResourceData); this.__resourceModel["resourceType"] = resourceData["resourceType"]; + this.__resourceData["services"] = resourceData["services"]; this.__addPages(); }) break; From 1bd6308bfa44096048beade3f713f04a844e8201 Mon Sep 17 00:00:00 2001 From: odeimaiz Date: Wed, 9 Apr 2025 11:15:57 +0200 Subject: [PATCH 07/14] Service metadata missing --- .../class/osparc/data/model/Workbench.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/services/static-webserver/client/source/class/osparc/data/model/Workbench.js b/services/static-webserver/client/source/class/osparc/data/model/Workbench.js index 55c64406cd4..4e837d46530 100644 --- a/services/static-webserver/client/source/class/osparc/data/model/Workbench.js +++ b/services/static-webserver/client/source/class/osparc/data/model/Workbench.js @@ -272,12 +272,12 @@ qx.Class.define("osparc.data.model.Workbench", { }, __createNode: function(study, metadata, uuid) { - osparc.utils.Utils.localCache.serviceToFavs(metadata.key); const node = new osparc.data.model.Node(study, metadata, uuid); node.addListener("keyChanged", () => this.fireEvent("reloadModel"), this); node.addListener("changeInputNodes", () => this.fireDataEvent("pipelineChanged"), this); node.addListener("reloadModel", () => this.fireEvent("reloadModel"), this); node.addListener("updateStudyDocument", () => this.fireEvent("updateStudyDocument"), this); + osparc.utils.Utils.localCache.serviceToFavs(metadata.key); return node; }, @@ -685,15 +685,19 @@ qx.Class.define("osparc.data.model.Workbench", { __deserializeNodes: function(workbenchData, workbenchUIData = {}) { const nodeIds = Object.keys(workbenchData); - - const metadataPromises = []; + const serviceMetadataPromises = []; nodeIds.forEach(nodeId => { const nodeData = workbenchData[nodeId]; - metadataPromises.push(osparc.store.Services.getService(nodeData.key, nodeData.version)); + serviceMetadataPromises.push(osparc.store.Services.getService(nodeData.key, nodeData.version)); }); - - return Promise.all(metadataPromises) - .then(values => { + return Promise.allSettled(serviceMetadataPromises) + .then(results => { + if (results.filter(result => result.status === "rejected" || result.value === null)) { + const errorMsg = qx.locale.Manager.tr("Service metadata missing"); + osparc.FlashMessenger.logError(errorMsg); + return; + } + const values = results.map(result => result.value); // Create first all the nodes for (let i=0; i Date: Wed, 9 Apr 2025 11:19:02 +0200 Subject: [PATCH 08/14] isAnyLinkedNodeMissing --- .../client/source/class/osparc/desktop/MainPageHandler.js | 4 ++-- .../client/source/class/osparc/study/Utils.js | 6 +----- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/services/static-webserver/client/source/class/osparc/desktop/MainPageHandler.js b/services/static-webserver/client/source/class/osparc/desktop/MainPageHandler.js index 40174728275..267a695cfb0 100644 --- a/services/static-webserver/client/source/class/osparc/desktop/MainPageHandler.js +++ b/services/static-webserver/client/source/class/osparc/desktop/MainPageHandler.js @@ -102,8 +102,8 @@ qx.Class.define("osparc.desktop.MainPageHandler", { throw new Error(msg); } - // check if it's corrupt - if (osparc.study.Utils.isCorrupt(studyData)) { + // check if there is any linked node missing + if (osparc.study.Utils.isAnyLinkedNodeMissing(studyData)) { const msg = `${qx.locale.Manager.tr("We encountered an issue with the")} ${studyAlias}
${qx.locale.Manager.tr("Please contact support.")}`; throw new Error(msg); } diff --git a/services/static-webserver/client/source/class/osparc/study/Utils.js b/services/static-webserver/client/source/class/osparc/study/Utils.js index 58a367f0fda..30410451f5f 100644 --- a/services/static-webserver/client/source/class/osparc/study/Utils.js +++ b/services/static-webserver/client/source/class/osparc/study/Utils.js @@ -23,17 +23,13 @@ qx.Class.define("osparc.study.Utils", { type: "static", statics: { - __isAnyLinkedNodeMissing: function(studyData) { + isAnyLinkedNodeMissing: function(studyData) { const existingNodeIds = Object.keys(studyData["workbench"]); const linkedNodeIds = osparc.data.model.Workbench.getLinkedNodeIds(studyData["workbench"]); const allExist = linkedNodeIds.every(linkedNodeId => existingNodeIds.includes(linkedNodeId)); return !allExist; }, - isCorrupt: function(studyData) { - return this.__isAnyLinkedNodeMissing(studyData); - }, - extractUniqueServices: function(workbench) { const services = new Set([]); Object.values(workbench).forEach(srv => { From 01f0943cc42d79b341edde2dd59128317b1dea1c Mon Sep 17 00:00:00 2001 From: odeimaiz Date: Wed, 9 Apr 2025 11:22:22 +0200 Subject: [PATCH 09/14] check metadata is not null --- .../client/source/class/osparc/store/Services.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/services/static-webserver/client/source/class/osparc/store/Services.js b/services/static-webserver/client/source/class/osparc/store/Services.js index 73f45960753..afab9130d01 100644 --- a/services/static-webserver/client/source/class/osparc/store/Services.js +++ b/services/static-webserver/client/source/class/osparc/store/Services.js @@ -293,7 +293,11 @@ qx.Class.define("osparc.store.Services", { const unaccessibleServices = []; const wbServices = osparc.study.Utils.extractUniqueServices(workbench); wbServices.forEach(srv => { - if (srv.key in allServices && srv.version in allServices[srv.key]) { + if ( + srv.key in allServices && + srv.version in allServices[srv.key] && + allServices[srv.key][srv.version] // check metadata is not null + ) { return; } const idx = unaccessibleServices.findIndex(unSrv => unSrv.key === srv.key && unSrv.version === srv.version); From 1b301c4209fbd86ba722e1af36e45166b1093e93 Mon Sep 17 00:00:00 2001 From: odeimaiz Date: Wed, 9 Apr 2025 11:25:15 +0200 Subject: [PATCH 10/14] minor fix --- .../client/source/class/osparc/desktop/MainPageHandler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/static-webserver/client/source/class/osparc/desktop/MainPageHandler.js b/services/static-webserver/client/source/class/osparc/desktop/MainPageHandler.js index 267a695cfb0..60897620aab 100644 --- a/services/static-webserver/client/source/class/osparc/desktop/MainPageHandler.js +++ b/services/static-webserver/client/source/class/osparc/desktop/MainPageHandler.js @@ -116,7 +116,7 @@ qx.Class.define("osparc.desktop.MainPageHandler", { const inaccessibleServices = osparc.store.Services.getInaccessibleServices(studyData["workbench"]) if (inaccessibleServices.length) { const msg = osparc.store.Services.getInaccessibleServicesMsg(inaccessibleServices, studyData["workbench"]); - osparc.FlashMessenger.getInstance().logError(msg); + osparc.FlashMessenger.logError(msg); this.showDashboard(); return; } From f6a99b0d16b34315a343b5a0099f8451414bf669 Mon Sep 17 00:00:00 2001 From: odeimaiz Date: Wed, 9 Apr 2025 11:28:13 +0200 Subject: [PATCH 11/14] typo --- .../client/source/class/osparc/dashboard/CardBase.js | 8 ++++---- .../client/source/class/osparc/desktop/MainPageHandler.js | 2 +- .../client/source/class/osparc/store/Services.js | 8 ++++---- .../client/source/class/osparc/study/Utils.js | 5 +++-- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/services/static-webserver/client/source/class/osparc/dashboard/CardBase.js b/services/static-webserver/client/source/class/osparc/dashboard/CardBase.js index 34ab8bf3a93..675315cf674 100644 --- a/services/static-webserver/client/source/class/osparc/dashboard/CardBase.js +++ b/services/static-webserver/client/source/class/osparc/dashboard/CardBase.js @@ -665,12 +665,12 @@ qx.Class.define("osparc.dashboard.CardBase", { } // Block card - const unaccessibleServices = osparc.study.Utils.getCantExecuteServices(services); - if (unaccessibleServices.length) { + const inaccessibleServices = osparc.study.Utils.getCantExecuteServices(services); + if (inaccessibleServices.length) { this.setBlocked("UNKNOWN_SERVICES"); const image = "@FontAwesome5Solid/ban/"; - let toolTipText = this.tr("Unaccessible service(s):"); - unaccessibleServices.forEach(unSrv => { + let toolTipText = this.tr("Inaccessible service(s):"); + inaccessibleServices.forEach(unSrv => { toolTipText += "
" + unSrv.key + ":" + osparc.service.Utils.extractVersionDisplay(unSrv.release); }); this.__showBlockedCard(image, toolTipText); diff --git a/services/static-webserver/client/source/class/osparc/desktop/MainPageHandler.js b/services/static-webserver/client/source/class/osparc/desktop/MainPageHandler.js index 60897620aab..cce33017aa9 100644 --- a/services/static-webserver/client/source/class/osparc/desktop/MainPageHandler.js +++ b/services/static-webserver/client/source/class/osparc/desktop/MainPageHandler.js @@ -113,7 +113,7 @@ qx.Class.define("osparc.desktop.MainPageHandler", { osparc.store.Services.getStudyServicesMetadata(studyData) .finally(() => { - const inaccessibleServices = osparc.store.Services.getInaccessibleServices(studyData["workbench"]) + const inaccessibleServices = osparc.store.Services.getInaccessibleServices(studyData["workbench"]); if (inaccessibleServices.length) { const msg = osparc.store.Services.getInaccessibleServicesMsg(inaccessibleServices, studyData["workbench"]); osparc.FlashMessenger.logError(msg); diff --git a/services/static-webserver/client/source/class/osparc/store/Services.js b/services/static-webserver/client/source/class/osparc/store/Services.js index afab9130d01..60be28a207d 100644 --- a/services/static-webserver/client/source/class/osparc/store/Services.js +++ b/services/static-webserver/client/source/class/osparc/store/Services.js @@ -290,7 +290,7 @@ qx.Class.define("osparc.store.Services", { getInaccessibleServices: function(workbench) { const allServices = this.__servicesCached; - const unaccessibleServices = []; + const inaccessibleServices = []; const wbServices = osparc.study.Utils.extractUniqueServices(workbench); wbServices.forEach(srv => { if ( @@ -300,12 +300,12 @@ qx.Class.define("osparc.store.Services", { ) { return; } - const idx = unaccessibleServices.findIndex(unSrv => unSrv.key === srv.key && unSrv.version === srv.version); + const idx = inaccessibleServices.findIndex(unSrv => unSrv.key === srv.key && unSrv.version === srv.version); if (idx === -1) { - unaccessibleServices.push(srv); + inaccessibleServices.push(srv); } }); - return unaccessibleServices; + return inaccessibleServices; }, getInaccessibleServicesMsg: function(inaccessibleServices, workbench) { diff --git a/services/static-webserver/client/source/class/osparc/study/Utils.js b/services/static-webserver/client/source/class/osparc/study/Utils.js index 30410451f5f..faf17ed124d 100644 --- a/services/static-webserver/client/source/class/osparc/study/Utils.js +++ b/services/static-webserver/client/source/class/osparc/study/Utils.js @@ -270,8 +270,9 @@ qx.Class.define("osparc.study.Utils", { __getBlockedState: function(studyData) { if (studyData["services"]) { - const unaccessibleServices = osparc.study.Utils.getCantExecuteServices(studyData["services"]) - if (unaccessibleServices.length) { + const cantReadServices = osparc.study.Utils.getCantExecuteServices(studyData["services"]); + const inaccessibleServices = osparc.store.Services.getInaccessibleServices(studyData["workbench"]); + if (cantReadServices.length || inaccessibleServices.length) { return "UNKNOWN_SERVICES"; } } From cee8c654180592693bc3d63a1f3677245b614f53 Mon Sep 17 00:00:00 2001 From: odeimaiz Date: Wed, 9 Apr 2025 11:35:29 +0200 Subject: [PATCH 12/14] block card --- .../source/class/osparc/dashboard/CardBase.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/services/static-webserver/client/source/class/osparc/dashboard/CardBase.js b/services/static-webserver/client/source/class/osparc/dashboard/CardBase.js index 675315cf674..9a561af4ab0 100644 --- a/services/static-webserver/client/source/class/osparc/dashboard/CardBase.js +++ b/services/static-webserver/client/source/class/osparc/dashboard/CardBase.js @@ -665,14 +665,21 @@ qx.Class.define("osparc.dashboard.CardBase", { } // Block card - const inaccessibleServices = osparc.study.Utils.getCantExecuteServices(services); - if (inaccessibleServices.length) { + const cantReadServices = osparc.study.Utils.getCantExecuteServices(services); + let inaccessibleServices = []; + if (this.isResourceType("study") || this.isResourceType("template")) { + inaccessibleServices = osparc.store.Services.getInaccessibleServices(this.getResourceData()["workbench"]); + } + if (cantReadServices.length || inaccessibleServices.length) { this.setBlocked("UNKNOWN_SERVICES"); const image = "@FontAwesome5Solid/ban/"; let toolTipText = this.tr("Inaccessible service(s):"); - inaccessibleServices.forEach(unSrv => { + cantReadServices.forEach(unSrv => { toolTipText += "
" + unSrv.key + ":" + osparc.service.Utils.extractVersionDisplay(unSrv.release); }); + inaccessibleServices.forEach(unSrv => { + toolTipText += "
" + unSrv.key + ":" + unSrv.version; + }); this.__showBlockedCard(image, toolTipText); } From 7ee72bf57faa942eadab1af39a04dc35d789288d Mon Sep 17 00:00:00 2001 From: odeimaiz Date: Wed, 9 Apr 2025 17:49:48 +0200 Subject: [PATCH 13/14] fix race condition --- .../client/source/class/osparc/store/Services.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/services/static-webserver/client/source/class/osparc/store/Services.js b/services/static-webserver/client/source/class/osparc/store/Services.js index 60be28a207d..0c06a7775a0 100644 --- a/services/static-webserver/client/source/class/osparc/store/Services.js +++ b/services/static-webserver/client/source/class/osparc/store/Services.js @@ -130,17 +130,16 @@ qx.Class.define("osparc.store.Services", { this.__addHit(service); this.__addTSRInfo(service); this.__addExtraTypeInfo(service); - this.__addServiceToCache(service) + this.__addServiceToCache(service); + delete this.__servicesPromisesCached[key][version]; resolve(service); }) .catch(err => { // store it in cache to avoid asking again this.__addToCache(key, version, null); + delete this.__servicesPromisesCached[key][version]; console.error(err); reject(); - }) - .finally(() => { - delete this.__servicesPromisesCached[key][version]; }); }); }, From 526a25b5bf99757b2290e60c619877f1507017b7 Mon Sep 17 00:00:00 2001 From: odeimaiz Date: Wed, 9 Apr 2025 18:11:13 +0200 Subject: [PATCH 14/14] fix --- .../client/source/class/osparc/data/model/Workbench.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/services/static-webserver/client/source/class/osparc/data/model/Workbench.js b/services/static-webserver/client/source/class/osparc/data/model/Workbench.js index 4e837d46530..02917b2730e 100644 --- a/services/static-webserver/client/source/class/osparc/data/model/Workbench.js +++ b/services/static-webserver/client/source/class/osparc/data/model/Workbench.js @@ -692,7 +692,8 @@ qx.Class.define("osparc.data.model.Workbench", { }); return Promise.allSettled(serviceMetadataPromises) .then(results => { - if (results.filter(result => result.status === "rejected" || result.value === null)) { + const missing = results.filter(result => result.status === "rejected" || result.value === null) + if (missing.length) { const errorMsg = qx.locale.Manager.tr("Service metadata missing"); osparc.FlashMessenger.logError(errorMsg); return;