Skip to content

Commit 4a3c8fe

Browse files
πŸŽ¨πŸ› [Frontend] Enh/fix: Services in Pricing Plans (#7412)
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
1 parent 38ae3c0 commit 4a3c8fe

File tree

5 files changed

+42
-26
lines changed

5 files changed

+42
-26
lines changed

β€Žservices/static-webserver/client/source/class/osparc/dashboard/ResourceDetails.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ qx.Class.define("osparc.dashboard.ResourceDetails", {
6363
break;
6464
}
6565
}
66-
});
66+
})
67+
.catch(err => osparc.FlashMessenger.logError(err));
6768
},
6869

6970
events: {

β€Žservices/static-webserver/client/source/class/osparc/pricing/ServicesList.js

+33-20
Original file line numberDiff line numberDiff line change
@@ -77,29 +77,42 @@ qx.Class.define("osparc.pricing.ServicesList", {
7777
.then(data => this.__populateList(data));
7878
},
7979

80-
__populateList: function(services) {
81-
// before accessing the metadata in a sync way, we need to bring them to the cache
82-
const metadataPromises = [];
83-
services.forEach(service => {
80+
__populateList: async function(services) {
81+
const failedServices = [];
82+
const servicePromises = services.map(async service => {
8483
const key = service["serviceKey"];
8584
const version = service["serviceVersion"];
86-
metadataPromises.push(osparc.store.Services.getService(key, version));
87-
});
88-
Promise.all(metadataPromises)
89-
.catch(err => console.error(err))
90-
.finally(() => {
91-
const sList = [];
92-
services.forEach(service => {
93-
const key = service["serviceKey"];
94-
const version = service["serviceVersion"];
95-
const serviceMetadata = osparc.store.Services.getMetadata(key, version);
96-
if (serviceMetadata) {
97-
sList.push(new osparc.data.model.Service(serviceMetadata));
98-
}
85+
try {
86+
return await osparc.store.Services.getService(key, version);
87+
} catch (err) {
88+
console.error(err);
89+
failedServices.push({
90+
key: service["serviceKey"],
91+
version: service["serviceVersion"],
9992
});
100-
const servicesList = this.getChildControl("services-list");
101-
servicesList.setModel(new qx.data.Array(sList));
102-
})
93+
return null; // Return null to maintain array structure
94+
}
95+
});
96+
97+
const serviceModels = new qx.data.Array();
98+
// ensure that even if one request fails, the rest continue executing
99+
const results = await Promise.allSettled(servicePromises);
100+
results.forEach(result => {
101+
if (result.status === "fulfilled" && result.value) {
102+
const serviceMetadata = result.value;
103+
serviceModels.push(new osparc.data.model.Service(serviceMetadata));
104+
}
105+
});
106+
const servicesList = this.getChildControl("services-list");
107+
servicesList.setModel(serviceModels);
108+
109+
if (failedServices.length) {
110+
let msg = "Could not retrieve data from some services:<br>";
111+
failedServices.forEach(failedService => {
112+
msg+= `- ${failedService.key}:${failedService.version}<br>`;
113+
});
114+
osparc.FlashMessenger.logAs(msg, "WARNING");
115+
}
103116
},
104117

105118
__openAddServiceToPlan: function() {

β€Žservices/static-webserver/client/source/class/osparc/store/Services.js

+5-2
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ qx.Class.define("osparc.store.Services", {
9999
},
100100

101101
getService: function(key, version, useCache = true) {
102-
return new Promise(resolve => {
102+
return new Promise((resolve, reject) => {
103103
if (
104104
useCache &&
105105
this.__isInCache(key, version) &&
@@ -120,7 +120,10 @@ qx.Class.define("osparc.store.Services", {
120120
this.__addToCache(service)
121121
resolve(service);
122122
})
123-
.catch(console.error);
123+
.catch(err => {
124+
console.error(err);
125+
reject();
126+
});
124127
});
125128
},
126129

β€Žservices/static-webserver/client/source/class/osparc/ui/window/Window.js

+1
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ qx.Class.define("osparc.ui.window.Window", {
7575
resizable: true,
7676
width: width,
7777
minHeight: minHeight,
78+
maxHeight: Math.max(minHeight, document.documentElement.clientHeight),
7879
modal: true,
7980
clickAwayClose: true
8081
});

β€Žservices/static-webserver/client/source/class/osparc/widget/StudyDataManager.js

+1-3
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,7 @@ qx.Class.define("osparc.widget.StudyDataManager", {
5858
if (!title) {
5959
title = osparc.product.Utils.getStudyAlias({firstUpperCase: true}) + qx.locale.Manager.tr(" Files");
6060
}
61-
return osparc.ui.window.Window.popUpInWindow(studyDataManager, title, osparc.dashboard.ResourceDetails.WIDTH, osparc.dashboard.ResourceDetails.HEIGHT).set({
62-
maxHeight: document.documentElement.clientHeight,
63-
});
61+
return osparc.ui.window.Window.popUpInWindow(studyDataManager, title, osparc.dashboard.ResourceDetails.WIDTH, osparc.dashboard.ResourceDetails.HEIGHT);
6462
},
6563
},
6664

0 commit comments

Comments
Β (0)