Skip to content

Commit 4fc077b

Browse files
committed
Merge branch 'master' into 191-enhance-study-clone-endpoint-in-api-server
2 parents 8d4bbfb + 522bfc6 commit 4fc077b

File tree

28 files changed

+376
-103
lines changed

28 files changed

+376
-103
lines changed

services/static-webserver/client/source/class/osparc/dashboard/ResourceBrowserFilter.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ qx.Class.define("osparc.dashboard.ResourceBrowserFilter", {
136136
icon: "@FontAwesome5Solid/copy/16",
137137
paddingLeft: 10, // align it with the context
138138
});
139+
osparc.utils.Utils.setIdToWidget(templatesButton, "templatesFilterItem");
139140
templatesButton.addListener("changeValue", e => {
140141
const templatesEnabled = e.getData();
141142
if (templatesEnabled) {
@@ -153,6 +154,7 @@ qx.Class.define("osparc.dashboard.ResourceBrowserFilter", {
153154
icon: "@FontAwesome5Solid/globe/16",
154155
paddingLeft: 10, // align it with the context
155156
});
157+
osparc.utils.Utils.setIdToWidget(publicProjectsButton, "publicProjectsFilterItem");
156158
publicProjectsButton.addListener("changeValue", e => {
157159
const templatesEnabled = e.getData();
158160
if (templatesEnabled) {

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

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -141,13 +141,29 @@ qx.Class.define("osparc.dashboard.ResourceDetails", {
141141
__classifiersPage: null,
142142
__qualityPage: null,
143143

144-
__addOpenButton: function(page) {
144+
__addToolbarButtons: function(page) {
145145
const resourceData = this.__resourceData;
146146

147147
const toolbar = this.self().createToolbar();
148148
page.addToHeader(toolbar);
149149

150-
if (["study", "template"].includes(this.__resourceData["resourceType"])) {
150+
if (["study", "template", "tutorial"].includes(resourceData["resourceType"])) {
151+
const cantReadServices = osparc.study.Utils.getCantReadServices(resourceData["services"]);
152+
if (cantReadServices.length) {
153+
const requestAccessButton = new qx.ui.form.Button(this.tr("Request Apps Access"));
154+
osparc.dashboard.resources.pages.BasePage.decorateHeaderButton(requestAccessButton);
155+
requestAccessButton.set({
156+
minWidth: 170,
157+
maxWidth: 170,
158+
});
159+
requestAccessButton.addListener("execute", () => {
160+
osparc.share.RequestServiceAccess.openRequestAccess(cantReadServices);
161+
});
162+
toolbar.add(requestAccessButton);
163+
}
164+
}
165+
166+
if (this.__resourceData["resourceType"] === "study") {
151167
const payDebtButton = new qx.ui.form.Button(this.tr("Credits required"));
152168
page.payDebtButton = payDebtButton;
153169
osparc.dashboard.resources.pages.BasePage.decorateHeaderButton(payDebtButton);
@@ -366,8 +382,9 @@ qx.Class.define("osparc.dashboard.ResourceDetails", {
366382
}
367383
});
368384

369-
370-
this.__getActivityOverviewPopUp();
385+
if (osparc.product.Utils.showComputationalActivity()) {
386+
this.__getActivityOverviewPopUp();
387+
}
371388
this.__getProjectFilesPopUp();
372389

373390
if (selectedTabId) {
@@ -405,7 +422,7 @@ qx.Class.define("osparc.dashboard.ResourceDetails", {
405422
const title = this.tr("Overview");
406423
const iconSrc = "@FontAwesome5Solid/info/22";
407424
const page = this.__infoPage = new osparc.dashboard.resources.pages.BasePage(title, iconSrc, id);
408-
this.__addOpenButton(page);
425+
this.__addToolbarButtons(page);
409426

410427
const lazyLoadContent = () => {
411428
const resourceData = this.__resourceData;
@@ -446,7 +463,7 @@ qx.Class.define("osparc.dashboard.ResourceDetails", {
446463
const title = this.tr("Billing Settings");
447464
const iconSrc = "@FontAwesome5Solid/cogs/22";
448465
const page = this.__billingSettings = new osparc.dashboard.resources.pages.BasePage(title, iconSrc, id);
449-
this.__addOpenButton(page);
466+
this.__addToolbarButtons(page);
450467

451468
if (resourceData["resourceType"] === "study") {
452469
const canBeOpened = osparc.study.Utils.canShowBillingOptions(resourceData);
@@ -473,7 +490,7 @@ qx.Class.define("osparc.dashboard.ResourceDetails", {
473490
const title = this.tr("Tiers");
474491
const iconSrc = "@FontAwesome5Solid/server/22";
475492
const page = new osparc.dashboard.resources.pages.BasePage(title, iconSrc, id);
476-
this.__addOpenButton(page);
493+
this.__addToolbarButtons(page);
477494

478495
const lazyLoadContent = () => {
479496
const pricingUnitsList = new osparc.service.PricingUnitsList(resourceData);
@@ -502,7 +519,7 @@ qx.Class.define("osparc.dashboard.ResourceDetails", {
502519
const title = this.tr("Pipeline View");
503520
const iconSrc = "@FontAwesome5Solid/eye/22";
504521
const page = new osparc.dashboard.resources.pages.BasePage(title, iconSrc, id);
505-
this.__addOpenButton(page);
522+
this.__addToolbarButtons(page);
506523

507524
const studyData = this.__resourceData;
508525
const enabled = osparc.study.Utils.canShowPreview(studyData);
@@ -528,7 +545,7 @@ qx.Class.define("osparc.dashboard.ResourceDetails", {
528545
const title = this.tr("Conversations");
529546
const iconSrc = "@FontAwesome5Solid/comments/22";
530547
const page = new osparc.dashboard.resources.pages.BasePage(title, iconSrc, id);
531-
this.__addOpenButton(page);
548+
this.__addToolbarButtons(page);
532549

533550
const lazyLoadContent = () => {
534551
const conversations = new osparc.study.Conversations(resourceData);
@@ -544,7 +561,7 @@ qx.Class.define("osparc.dashboard.ResourceDetails", {
544561
const title = this.tr("Sharing");
545562
const iconSrc = "@FontAwesome5Solid/share-alt/22";
546563
const page = this.__permissionsPage = new osparc.dashboard.resources.pages.BasePage(title, iconSrc, id);
547-
this.__addOpenButton(page);
564+
this.__addToolbarButtons(page);
548565

549566
const lazyLoadContent = () => {
550567
const resourceData = this.__resourceData;
@@ -587,7 +604,7 @@ qx.Class.define("osparc.dashboard.ResourceDetails", {
587604
const title = this.tr("Classifiers");
588605
const iconSrc = "@FontAwesome5Solid/search/22";
589606
const page = this.__classifiersPage = new osparc.dashboard.resources.pages.BasePage(title, iconSrc, id);
590-
this.__addOpenButton(page);
607+
this.__addToolbarButtons(page);
591608

592609
const lazyLoadContent = () => {
593610
const resourceData = this.__resourceData;
@@ -625,7 +642,7 @@ qx.Class.define("osparc.dashboard.ResourceDetails", {
625642
const title = this.tr("Quality");
626643
const iconSrc = "@FontAwesome5Solid/star-half/22";
627644
const page = this.__qualityPage = new osparc.dashboard.resources.pages.BasePage(title, iconSrc, id);
628-
this.__addOpenButton(page);
645+
this.__addToolbarButtons(page);
629646

630647
const lazyLoadContent = () => {
631648
const qualityEditor = new osparc.metadata.QualityEditor(resourceData);
@@ -655,7 +672,7 @@ qx.Class.define("osparc.dashboard.ResourceDetails", {
655672
const title = this.tr("Tags");
656673
const iconSrc = "@FontAwesome5Solid/tags/22";
657674
const page = this.__tagsPage = new osparc.dashboard.resources.pages.BasePage(title, iconSrc, id);
658-
this.__addOpenButton(page);
675+
this.__addToolbarButtons(page);
659676

660677
const lazyLoadContent = () => {
661678
const tagManager = new osparc.form.tag.TagManager(resourceData);
@@ -681,7 +698,7 @@ qx.Class.define("osparc.dashboard.ResourceDetails", {
681698
const title = this.tr("Services Updates");
682699
const iconSrc = "@MaterialIcons/update/24";
683700
const page = this.__servicesUpdatePage = new osparc.dashboard.resources.pages.BasePage(title, iconSrc, id);
684-
this.__addOpenButton(page);
701+
this.__addToolbarButtons(page);
685702

686703
const studyData = this.__resourceData;
687704
const enabled = osparc.study.Utils.canShowServiceUpdates(studyData);
@@ -713,7 +730,7 @@ qx.Class.define("osparc.dashboard.ResourceDetails", {
713730
const title = this.tr("Boot Options");
714731
const iconSrc = "@FontAwesome5Solid/play-circle/22";
715732
const page = new osparc.dashboard.resources.pages.BasePage(title, iconSrc, id);
716-
this.__addOpenButton(page);
733+
this.__addToolbarButtons(page);
717734

718735
const studyData = this.__resourceData;
719736
const enabled = osparc.study.Utils.canShowServiceBootOptions(studyData);
@@ -829,7 +846,7 @@ qx.Class.define("osparc.dashboard.ResourceDetails", {
829846
},
830847

831848
__getCreateFunctionsPage: function() {
832-
if (osparc.utils.DisabledPlugins.isFunctionsDisabled()) {
849+
if (!osparc.data.Permissions.getInstance().checkFunctionPermissions("writeFunctions")) {
833850
return null;
834851
}
835852

services/static-webserver/client/source/class/osparc/data/Permissions.js

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,9 @@ qx.Class.define("osparc.data.Permissions", {
192192
},
193193

194194
members: {
195+
__permissions: null,
196+
__functionPermissions: null,
197+
195198
arePermissionsReady() {
196199
return this.getRole() !== null;
197200
},
@@ -276,19 +279,44 @@ qx.Class.define("osparc.data.Permissions", {
276279
return canDo;
277280
},
278281

279-
checkCanDo: function(action) {
280-
return new Promise((resolve, reject) => {
281-
osparc.data.Resources.get("permissions")
282-
.then(permissions => {
283-
const found = permissions.find(permission => permission["name"] === action);
284-
if (found) {
285-
resolve(found["allowed"]);
286-
} else {
287-
resolve(false);
288-
}
289-
})
290-
.catch(err => reject(err));
291-
});
282+
fetchPermissions: function() {
283+
osparc.data.Resources.get("permissions")
284+
.then(permissions => {
285+
this.__permissions = permissions;
286+
})
287+
.catch(err => console.error(err));
288+
},
289+
290+
checkMyGroupCanDo: function(action) {
291+
if (this.__permissions) {
292+
const found = this.__permissions.find(permission => permission["name"] === action);
293+
if (found) {
294+
return found["allowed"];
295+
}
296+
}
297+
return false;
298+
},
299+
300+
fetchFunctionPermissions: function() {
301+
osparc.data.Resources.get("functionPermissions")
302+
.then(functionPermissions => {
303+
this.__functionPermissions = functionPermissions;
304+
})
305+
.catch(err => console.error(err));
306+
},
307+
308+
checkFunctionPermissions: function(action) {
309+
if (osparc.utils.DisabledPlugins.isFunctionsDisabled()) {
310+
return false;
311+
}
312+
313+
if (
314+
this.__functionPermissions &&
315+
action in this.__functionPermissions
316+
) {
317+
return this.__functionPermissions[action];
318+
}
319+
return false;
292320
},
293321

294322
isTester: function() {

services/static-webserver/client/source/class/osparc/data/Resources.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -837,6 +837,18 @@ qx.Class.define("osparc.data.Resources", {
837837
}
838838
}
839839
},
840+
/*
841+
* FUNCTION PERMISSIONS
842+
*/
843+
"functionPermissions": {
844+
useCache: true,
845+
endpoints: {
846+
get: {
847+
method: "GET",
848+
url: statics.API + "/me/function-permissions"
849+
}
850+
}
851+
},
840852
/*
841853
* API-KEYS
842854
*/

services/static-webserver/client/source/class/osparc/desktop/MainPage.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ qx.Class.define("osparc.desktop.MainPage", {
7070
preloadPromises.push(osparc.store.Products.getInstance().fetchUiConfig());
7171
preloadPromises.push(osparc.store.PollTasks.getInstance().fetchTasks());
7272
preloadPromises.push(osparc.store.Jobs.getInstance().fetchJobsLatest());
73+
preloadPromises.push(osparc.data.Permissions.getInstance().fetchPermissions());
74+
preloadPromises.push(osparc.data.Permissions.getInstance().fetchFunctionPermissions());
7375
Promise.all(preloadPromises)
7476
.then(() => {
7577
const mainStack = this.__createMainStack();

services/static-webserver/client/source/class/osparc/desktop/WorkbenchView.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1090,8 +1090,6 @@ qx.Class.define("osparc.desktop.WorkbenchView", {
10901090
}
10911091

10921092
const nodeOptions = new osparc.widget.NodeOptions(node);
1093-
nodeOptions.buildLayout();
1094-
10951093
return nodeOptions;
10961094
},
10971095

services/static-webserver/client/source/class/osparc/jobs/JobsButton.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ qx.Class.define("osparc.jobs.JobsButton", {
2323

2424
this._setLayout(new qx.ui.layout.Canvas());
2525

26+
osparc.utils.Utils.setIdToWidget(this, "jobsButton");
27+
2628
this.set({
2729
width: 30,
2830
alignX: "center",

services/static-webserver/client/source/class/osparc/navigation/NavigationBar.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,9 @@ qx.Class.define("osparc.navigation.NavigationBar", {
117117

118118
// right-items
119119
this.getChildControl("tasks-button");
120-
this.getChildControl("jobs-button");
120+
if (osparc.product.Utils.showComputationalActivity()) {
121+
this.getChildControl("jobs-button");
122+
}
121123
this.getChildControl("notifications-button");
122124
this.getChildControl("expiration-icon");
123125
this.getChildControl("help");

services/static-webserver/client/source/class/osparc/product/Utils.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,13 @@ qx.Class.define("osparc.product.Utils", {
327327
return this.isS4LProduct() && licensesEnabled;
328328
},
329329

330+
showComputationalActivity: function() {
331+
if (this.isProduct("s4llite") || this.isProduct("tiplite")) {
332+
return false;
333+
}
334+
return true;
335+
},
336+
330337
getDefaultWelcomeCredits: function() {
331338
switch (osparc.product.Utils.getProductName()) {
332339
case "s4l":

services/static-webserver/client/source/class/osparc/share/CollaboratorsStudy.js

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -235,32 +235,7 @@ qx.Class.define("osparc.share.CollaboratorsStudy", {
235235
if (gids.length === 0) {
236236
return;
237237
}
238-
239-
const promises = [];
240-
gids.forEach(gid => {
241-
const params = {
242-
url: {
243-
"studyId": this._serializedDataCopy["uuid"],
244-
"gid": gid
245-
}
246-
};
247-
promises.push(osparc.data.Resources.fetch("studies", "checkShareePermissions", params));
248-
});
249-
Promise.all(promises)
250-
.then(values => {
251-
const noAccessible = values.filter(value => value["accessible"] === false);
252-
if (noAccessible.length) {
253-
const shareePermissions = new osparc.share.ShareePermissions(noAccessible);
254-
const win = osparc.ui.window.Window.popUpInWindow(shareePermissions, this.tr("Sharee permissions"), 500, 500, "@FontAwesome5Solid/exclamation-triangle/14").set({
255-
clickAwayClose: false,
256-
resizable: true,
257-
showClose: true
258-
});
259-
win.getChildControl("icon").set({
260-
textColor: "warning-yellow"
261-
});
262-
}
263-
});
238+
osparc.share.ShareePermissions.checkShareePermissions(this._serializedDataCopy["uuid"], gids);
264239
}
265240
}
266241
});

0 commit comments

Comments
 (0)