Skip to content

Commit 2954940

Browse files
Merge remote-tracking branch 'upstream/master' into is5646/use-project-nodes-table-instead-of-workbench
2 parents 4455d50 + fbfc6fc commit 2954940

File tree

33 files changed

+689
-205
lines changed

33 files changed

+689
-205
lines changed

.github/workflows/ci-testing-deploy.yml

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1530,44 +1530,6 @@ jobs:
15301530
with:
15311531
flags: integrationtests #optional
15321532

1533-
integration-test-webserver-02:
1534-
needs: [changes, build-test-images]
1535-
if: ${{ needs.changes.outputs.anything-py == 'true' || needs.changes.outputs.webserver == 'true' || github.event_name == 'push' }}
1536-
timeout-minutes: 30 # if this timeout gets too small, then split the tests
1537-
name: "[int] webserver 02"
1538-
runs-on: ${{ matrix.os }}
1539-
strategy:
1540-
matrix:
1541-
python: ["3.11"]
1542-
os: [ubuntu-24.04]
1543-
fail-fast: false
1544-
steps:
1545-
- uses: actions/checkout@v4
1546-
- name: Setup SimCore environment
1547-
uses: ./.github/actions/setup-simcore-env
1548-
with:
1549-
python-version: ${{ matrix.python }}
1550-
cache-dependency-glob: "**/web/server/requirements/ci.txt"
1551-
- name: Download and load Docker images
1552-
uses: ./.github/actions/download-load-docker-images
1553-
with:
1554-
artifact-name-pattern: 'backend'
1555-
- name: install
1556-
run: ./ci/github/integration-testing/webserver.bash install
1557-
- name: test
1558-
run: ./ci/github/integration-testing/webserver.bash test 02
1559-
- name: upload failed tests logs
1560-
if: ${{ failure() }}
1561-
uses: actions/upload-artifact@v4
1562-
with:
1563-
name: ${{ github.job }}_docker_logs
1564-
path: ./services/web/server/test_failures
1565-
- uses: codecov/codecov-action@v5
1566-
env:
1567-
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
1568-
with:
1569-
flags: integrationtests #optional
1570-
15711533
integration-test-director-v2-01:
15721534
needs: [changes, build-test-images]
15731535
if: ${{ needs.changes.outputs.anything-py == 'true' || needs.changes.outputs.director-v2 == 'true' || github.event_name == 'push'}}
@@ -1782,7 +1744,6 @@ jobs:
17821744
integration-test-docker-api-proxy,
17831745
integration-test-simcore-sdk,
17841746
integration-test-webserver-01,
1785-
integration-test-webserver-02,
17861747
]
17871748
runs-on: ubuntu-latest
17881749
steps:

services/static-webserver/client/source/class/osparc/conversation/AddMessage.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,13 @@ qx.Class.define("osparc.conversation.AddMessage", {
9191
}
9292
case "comment-field":
9393
control = new osparc.editor.MarkdownEditor();
94+
control.addListener("keydown", e => {
95+
if (e.isCtrlPressed() && e.getKeyIdentifier() === "Enter") {
96+
this.__addComment();
97+
e.stopPropagation();
98+
e.preventDefault();
99+
}
100+
}, this);
94101
control.getChildControl("buttons").exclude();
95102
const layout = this.getChildControl("add-comment-layout");
96103
layout.add(control, {

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

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,6 @@ qx.Class.define("osparc.dashboard.CardBase", {
2424
construct: function() {
2525
this.base(arguments);
2626

27-
if (osparc.utils.DisabledPlugins.isRTCEnabled()) {
28-
// "IN_USE" is not a blocker anymore
29-
const inUseIdx = qx.util.PropertyUtil.getProperties(osparc.dashboard.CardBase).blocked.check.indexOf("IN_USE");
30-
if (inUseIdx > -1) {
31-
qx.util.PropertyUtil.getProperties(osparc.dashboard.CardBase).blocked.check.splice(inUseIdx, 1);
32-
}
33-
}
34-
3527
[
3628
"pointerover",
3729
"focus"

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

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,16 @@ qx.Class.define("osparc.dashboard.SearchBarFilter", {
5454
HEIGHT: 36,
5555
BG_COLOR: "input_background",
5656

57+
getInitialFilterData: function() {
58+
return {
59+
tags: [],
60+
classifiers: [],
61+
sharedWith: null,
62+
appType: null,
63+
text: ""
64+
};
65+
},
66+
5767
getSharedWithOptions: function(resourceType) {
5868
if (resourceType === "template") {
5969
resourceType = "tutorial";
@@ -96,7 +106,8 @@ qx.Class.define("osparc.dashboard.SearchBarFilter", {
96106
},
97107

98108
events: {
99-
"filterChanged": "qx.event.type.Data"
109+
"filterChanged": "qx.event.type.Data",
110+
"resetButtonPressed": "qx.event.type.Event",
100111
},
101112

102113
members: {
@@ -200,7 +211,7 @@ qx.Class.define("osparc.dashboard.SearchBarFilter", {
200211
textField.addListener("focusout", () => this.__filter(), this);
201212

202213
const resetButton = this.getChildControl("reset-button");
203-
resetButton.addListener("execute", () => this.__resetFilters(), this);
214+
resetButton.addListener("execute", () => this.resetButtonPressed(), this);
204215

205216
osparc.store.Store.getInstance().addListener("changeTags", () => this.__buildFiltersMenu(), this);
206217
},
@@ -359,6 +370,9 @@ qx.Class.define("osparc.dashboard.SearchBarFilter", {
359370
searchBarFilterExtended.set({
360371
width: bounds.width,
361372
});
373+
searchBarFilterExtended.addListener("resetButtonPressed", () => {
374+
this.resetButtonPressed();
375+
}, this);
362376
return searchBarFilterExtended;
363377
},
364378

@@ -400,19 +414,14 @@ qx.Class.define("osparc.dashboard.SearchBarFilter", {
400414
this.getChildControl("text-field").resetValue();
401415
},
402416

403-
__resetFilters: function() {
417+
resetButtonPressed: function() {
404418
this.resetFilters();
405-
this.__filter();
419+
this._filterChange(this.self().getInitialFilterData());
420+
this.fireEvent("resetButtonPressed");
406421
},
407422

408423
getFilterData: function() {
409-
const filterData = {
410-
tags: [],
411-
classifiers: [],
412-
sharedWith: null,
413-
appType: null,
414-
text: ""
415-
};
424+
const filterData = this.self().getInitialFilterData();
416425
const textFilter = this.getTextFilterValue();
417426
filterData["text"] = textFilter ? textFilter : "";
418427
this.getChildControl("active-filters").getChildren().forEach(chip => {

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ qx.Class.define("osparc.dashboard.SearchBarFilterExtended", {
4444

4545
events: {
4646
"filterChanged": "qx.event.type.Data",
47+
"resetButtonPressed": "qx.event.type.Event",
4748
},
4849

4950
properties: {
@@ -209,6 +210,7 @@ qx.Class.define("osparc.dashboard.SearchBarFilterExtended", {
209210
}, this);
210211

211212
resetButton.addListener("tap", () => {
213+
this.fireEvent("resetButtonPressed");
212214
this.exclude();
213215
});
214216
},

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

Lines changed: 56 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -410,9 +410,8 @@ qx.Class.define("osparc.dashboard.StudyBrowser", {
410410

411411
resourcesList.forEach(study => {
412412
const state = study["state"];
413-
const projectLocked = osparc.study.Utils.state.isProjectLocked(state);
414413
const projectStatus = osparc.study.Utils.state.getProjectStatus(state);
415-
if (projectLocked && projectStatus === "CLOSING") {
414+
if (projectStatus === "CLOSING") {
416415
// websocket might have already notified that the state was closed.
417416
// But the /projects calls response got after the ws message. Ask again to make sure
418417
const delay = 2000;
@@ -887,6 +886,8 @@ qx.Class.define("osparc.dashboard.StudyBrowser", {
887886
requestParams.accessRights = "public";
888887
break;
889888
case osparc.dashboard.StudyBrowser.CONTEXT.FUNCTIONS:
889+
delete requestParams.orderBy; // functions are not ordered yet
890+
requestParams.includeExtras = "true";
890891
break;
891892
case osparc.dashboard.StudyBrowser.CONTEXT.SEARCH_PROJECTS: {
892893
requestParams.type = "user";
@@ -1080,6 +1081,7 @@ qx.Class.define("osparc.dashboard.StudyBrowser", {
10801081
this._searchBarFilter.set({
10811082
showFilterMenu: false,
10821083
});
1084+
this._searchBarFilter.addListener("resetButtonPressed", () => this.__filterChanged());
10831085
const searchBarTextField = this._searchBarFilter.getChildControl("text-field");
10841086
searchBarTextField.set({
10851087
cursor: "pointer",
@@ -1245,57 +1247,61 @@ qx.Class.define("osparc.dashboard.StudyBrowser", {
12451247

12461248
this._searchBarFilter.addListener("filterChanged", e => {
12471249
const filterData = e.getData();
1248-
let searchContext = null;
1249-
let backToContext = null;
1250-
switch (this.getCurrentContext()) {
1251-
case osparc.dashboard.StudyBrowser.CONTEXT.PROJECTS:
1252-
case osparc.dashboard.StudyBrowser.CONTEXT.SEARCH_PROJECTS:
1253-
case osparc.dashboard.StudyBrowser.CONTEXT.TRASH:
1254-
if (filterData.text) {
1255-
searchContext = osparc.dashboard.StudyBrowser.CONTEXT.SEARCH_PROJECTS;
1256-
} else {
1257-
backToContext = osparc.dashboard.StudyBrowser.CONTEXT.PROJECTS;
1258-
}
1259-
break;
1260-
case osparc.dashboard.StudyBrowser.CONTEXT.TEMPLATES:
1261-
case osparc.dashboard.StudyBrowser.CONTEXT.SEARCH_TEMPLATES:
1262-
if (filterData.text) {
1263-
searchContext = osparc.dashboard.StudyBrowser.CONTEXT.SEARCH_TEMPLATES;
1264-
} else {
1265-
backToContext = osparc.dashboard.StudyBrowser.CONTEXT.TEMPLATES;
1266-
}
1267-
break;
1268-
case osparc.dashboard.StudyBrowser.CONTEXT.PUBLIC_TEMPLATES:
1269-
case osparc.dashboard.StudyBrowser.CONTEXT.SEARCH_PUBLIC_TEMPLATES:
1270-
if (filterData.text) {
1271-
searchContext = osparc.dashboard.StudyBrowser.CONTEXT.SEARCH_PUBLIC_TEMPLATES;
1272-
} else {
1273-
backToContext = osparc.dashboard.StudyBrowser.CONTEXT.PUBLIC_TEMPLATES;
1274-
}
1275-
break;
1276-
case osparc.dashboard.StudyBrowser.CONTEXT.FUNCTIONS:
1277-
// functions are not searchable yet
1278-
searchContext = null;
1279-
backToContext = osparc.dashboard.StudyBrowser.CONTEXT.FUNCTIONS;
1280-
break;
1281-
default:
1282-
if (filterData.text) {
1283-
searchContext = osparc.dashboard.StudyBrowser.CONTEXT.SEARCH_PROJECTS;
1284-
} else {
1285-
backToContext = osparc.dashboard.StudyBrowser.CONTEXT.PROJECTS;
1286-
}
1287-
break;
1288-
}
1289-
if (searchContext) {
1290-
this._changeContext(searchContext);
1291-
} else if (backToContext) {
1292-
const workspaceId = this.getCurrentWorkspaceId();
1293-
const folderId = this.getCurrentFolderId();
1294-
this._changeContext(backToContext, workspaceId, folderId);
1295-
}
1250+
this.__filterChanged(filterData);
12961251
});
12971252
},
12981253

1254+
__filterChanged: function(filterData) {
1255+
let searchContext = null;
1256+
let backToContext = null;
1257+
switch (this.getCurrentContext()) {
1258+
case osparc.dashboard.StudyBrowser.CONTEXT.PROJECTS:
1259+
case osparc.dashboard.StudyBrowser.CONTEXT.SEARCH_PROJECTS:
1260+
case osparc.dashboard.StudyBrowser.CONTEXT.TRASH:
1261+
if (filterData && filterData.text) {
1262+
searchContext = osparc.dashboard.StudyBrowser.CONTEXT.SEARCH_PROJECTS;
1263+
} else {
1264+
backToContext = osparc.dashboard.StudyBrowser.CONTEXT.PROJECTS;
1265+
}
1266+
break;
1267+
case osparc.dashboard.StudyBrowser.CONTEXT.TEMPLATES:
1268+
case osparc.dashboard.StudyBrowser.CONTEXT.SEARCH_TEMPLATES:
1269+
if (filterData && filterData.text) {
1270+
searchContext = osparc.dashboard.StudyBrowser.CONTEXT.SEARCH_TEMPLATES;
1271+
} else {
1272+
backToContext = osparc.dashboard.StudyBrowser.CONTEXT.TEMPLATES;
1273+
}
1274+
break;
1275+
case osparc.dashboard.StudyBrowser.CONTEXT.PUBLIC_TEMPLATES:
1276+
case osparc.dashboard.StudyBrowser.CONTEXT.SEARCH_PUBLIC_TEMPLATES:
1277+
if (filterData && filterData.text) {
1278+
searchContext = osparc.dashboard.StudyBrowser.CONTEXT.SEARCH_PUBLIC_TEMPLATES;
1279+
} else {
1280+
backToContext = osparc.dashboard.StudyBrowser.CONTEXT.PUBLIC_TEMPLATES;
1281+
}
1282+
break;
1283+
case osparc.dashboard.StudyBrowser.CONTEXT.FUNCTIONS:
1284+
// functions are not searchable yet
1285+
searchContext = null;
1286+
backToContext = osparc.dashboard.StudyBrowser.CONTEXT.FUNCTIONS;
1287+
break;
1288+
default:
1289+
if (filterData && filterData.text) {
1290+
searchContext = osparc.dashboard.StudyBrowser.CONTEXT.SEARCH_PROJECTS;
1291+
} else {
1292+
backToContext = osparc.dashboard.StudyBrowser.CONTEXT.PROJECTS;
1293+
}
1294+
break;
1295+
}
1296+
if (searchContext) {
1297+
this._changeContext(searchContext);
1298+
} else if (backToContext) {
1299+
const workspaceId = this.getCurrentWorkspaceId();
1300+
const folderId = this.getCurrentFolderId();
1301+
this._changeContext(backToContext, workspaceId, folderId);
1302+
}
1303+
},
1304+
12991305
_changeContext: function(context, workspaceId = null, folderId = null) {
13001306
if (
13011307
!context.includes("search") && // load projects if search string changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ qx.Class.define("osparc.desktop.MainPage", {
257257
// these operations need to be done after template creation
258258
osparc.store.Study.getInstance().addCollaborators(templateData, templateAccessRights);
259259
if (templateType) {
260-
osparc.store.Study.getInstance().patchTemplateType(templateData["uuid"], templateType)
260+
osparc.store.Study.getInstance().patchTemplateType(templateData, templateType)
261261
.then(() => {
262262
if (tutorialBrowser && templateType === osparc.data.model.StudyUI.TUTORIAL_TYPE) {
263263
tutorialBrowser.reloadResources(false);
@@ -309,7 +309,7 @@ qx.Class.define("osparc.desktop.MainPage", {
309309
const currentStudy = store.getCurrentStudy();
310310
while (currentStudy.isLocked()) {
311311
await osparc.utils.Utils.sleep(1000);
312-
osparc.store.Study.getInstance().getStudyState(studyId);
312+
osparc.store.Study.getInstance().fetchStudyState(studyId);
313313
}
314314
this.__loadingPage.setMessages([]);
315315
this.__openSnapshot(studyId, snapshotId);
@@ -355,7 +355,7 @@ qx.Class.define("osparc.desktop.MainPage", {
355355
const currentStudy = store.getCurrentStudy();
356356
while (currentStudy.isLocked()) {
357357
await osparc.utils.Utils.sleep(1000);
358-
osparc.store.Study.getInstance().getStudyState(studyId);
358+
osparc.store.Study.getInstance().fetchStudyState(studyId);
359359
}
360360
this.__loadingPage.setMessages([]);
361361
this.__openIteration(iterationUuid);

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -442,16 +442,17 @@ qx.Class.define("osparc.desktop.WorkbenchView", {
442442

443443
this.__addTopBarSpacer(topBar);
444444

445-
const commentsButton = new qx.ui.form.Button().set({
445+
const conversationButton = new qx.ui.form.Button().set({
446446
appearance: "form-button-outlined",
447447
toolTipText: this.tr("Conversations"),
448448
icon: "@FontAwesome5Solid/comments/16",
449449
marginRight: 10,
450450
marginTop: 7,
451451
...osparc.navigation.NavigationBar.BUTTON_OPTIONS
452452
});
453-
commentsButton.addListener("execute", () => osparc.study.Conversations.popUpInWindow(study.serialize()));
454-
topBar.add(commentsButton);
453+
osparc.study.Conversations.makeButtonBlink(conversationButton);
454+
conversationButton.addListener("execute", () => osparc.study.Conversations.popUpInWindow(study.serialize()));
455+
topBar.add(conversationButton);
455456

456457
const startAppButtonTB = this.__startAppButtonTB = new qx.ui.form.Button().set({
457458
appearance: "form-button-outlined",

services/static-webserver/client/source/class/osparc/info/StudyLarge.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ qx.Class.define("osparc.info.StudyLarge", {
9595
if (selected) {
9696
saveBtn.setFetching(true);
9797
const templateType = selected.getModel();
98-
osparc.store.Study.getInstance().patchTemplateType(this.getStudy().getUuid(), templateType)
98+
osparc.store.Study.getInstance().patchTemplateType(this.getStudy().serialize(), templateType)
9999
.then(() => osparc.FlashMessenger.logAs(this.tr("Template type updated, please reload"), "INFO"))
100100
.catch(err => osparc.FlashMessenger.logError(err))
101101
.finally(() => saveBtn.setFetching(false));

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,17 +66,17 @@ qx.Class.define("osparc.jobs.JobsButton", {
6666
textColor: osparc.navigation.NavigationBar.BG_COLOR,
6767
});
6868
this._add(control, {
69-
bottom: 10,
70-
right: 2
69+
bottom: -4,
70+
right: -4,
7171
});
7272
break;
7373
case "is-active-icon":
7474
control = new qx.ui.basic.Image("@FontAwesome5Solid/circle/8").set({
7575
textColor: "strong-main",
7676
});
7777
this._add(control, {
78-
bottom: 12,
79-
right: 4
78+
bottom: -2,
79+
right: -2,
8080
});
8181
break;
8282
}

0 commit comments

Comments
 (0)