Skip to content

Commit 7e3a178

Browse files
authored
🎨 [Frontend] Enh: Tasks UI (#8485)
1 parent 56a28d2 commit 7e3a178

File tree

6 files changed

+59
-28
lines changed

6 files changed

+59
-28
lines changed

services/static-webserver/client/source/class/osparc/file/FileLabelWithActions.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ qx.Class.define("osparc.file.FileLabelWithActions", {
269269
);
270270
if (task.getAbortHref()) {
271271
const cancelButton = progressWindow.addCancelButton();
272-
cancelButton.setLabel(this.tr("Ignore"));
272+
cancelButton.setLabel(this.tr("Hide"));
273273
const abortButton = new qx.ui.form.Button().set({
274274
label: this.tr("Cancel"),
275275
center: true,

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,6 @@ qx.Class.define("osparc.navigation.NavigationBar", {
263263
}
264264
case "tasks-button":
265265
control = new osparc.task.TasksButton().set({
266-
visibility: "excluded",
267266
...this.self().RIGHT_BUTTON_OPTS
268267
});
269268
this.getChildControl("right-items").add(control);

services/static-webserver/client/source/class/osparc/task/ExportData.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ qx.Class.define("osparc.task.ExportData", {
2222
this.base(arguments);
2323

2424
this.setIcon(this.self().ICON+"/14");
25-
this.setTitle(this.tr("Downloading files:"));
25+
this.setTitle(this.tr("Preparing files:"));
2626
},
2727

2828
statics: {
@@ -42,7 +42,7 @@ qx.Class.define("osparc.task.ExportData", {
4242

4343
if (task.getAbortHref()) {
4444
const cancelButton = progressWindow.addCancelButton();
45-
cancelButton.setLabel(qx.locale.Manager.tr("Ignore"));
45+
cancelButton.setLabel(qx.locale.Manager.tr("Hide"));
4646
const abortButton = new qx.ui.form.Button().set({
4747
label: qx.locale.Manager.tr("Cancel"),
4848
center: true,

services/static-webserver/client/source/class/osparc/task/TaskUI.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,15 @@ qx.Class.define("osparc.task.TaskUI", {
2121
construct: function() {
2222
this.base(arguments);
2323

24-
const grid = new qx.ui.layout.Grid(5, 5);
24+
const grid = new qx.ui.layout.Grid(4, 4);
2525
grid.setColumnFlex(1, 1);
2626
this._setLayout(grid);
2727

2828
this.set({
29-
padding: 5,
29+
padding: 4,
3030
maxWidth: this.self().MAX_WIDTH,
31-
backgroundColor: "background-main-3"
31+
backgroundColor: "background-main-3",
32+
decorator: "rounded",
3233
});
3334

3435
this._buildLayout();
@@ -146,7 +147,7 @@ qx.Class.define("osparc.task.TaskUI", {
146147
confirmText: this.tr("Cancel"),
147148
confirmAction: "delete"
148149
});
149-
win.getCancelButton().setLabel(this.tr("Ignore"));
150+
win.getCancelButton().setLabel(this.tr("Hide"));
150151
win.center();
151152
win.open();
152153
win.addListener("close", () => {

services/static-webserver/client/source/class/osparc/task/TasksButton.js

Lines changed: 48 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,10 @@ qx.Class.define("osparc.task.TasksButton", {
2828
});
2929

3030
const tasks = osparc.task.TasksContainer.getInstance();
31-
tasks.getTasks().addListener("change", e => this.__updateTasksButton(), this);
32-
this.addListener("tap", () => this.__showTasks(), this);
31+
tasks.getTasks().addListener("change", () => this.__updateTasksButton(), this);
32+
this.__updateTasksButton();
33+
34+
this.addListener("tap", this.__buttonTapped, this);
3335
},
3436

3537
members: {
@@ -60,8 +62,8 @@ qx.Class.define("osparc.task.TasksButton", {
6062
"border-radius": "8px"
6163
});
6264
this._add(control, {
63-
bottom: 8,
64-
right: 4
65+
bottom: -6,
66+
right: -4
6567
});
6668
break;
6769
}
@@ -74,36 +76,62 @@ qx.Class.define("osparc.task.TasksButton", {
7476

7577
const tasks = osparc.task.TasksContainer.getInstance();
7678
const nTasks = tasks.getTasks().length;
77-
number.setValue(nTasks.toString());
79+
if (nTasks > 9) {
80+
number.setValue("9+");
81+
} else {
82+
number.setValue(nTasks.toString());
83+
}
7884
nTasks ? this.show() : this.exclude();
7985
},
8086

87+
__buttonTapped: function() {
88+
const tasks = osparc.task.TasksContainer.getInstance();
89+
const tasksContainer = tasks.getTasksContainer();
90+
if (tasksContainer && tasksContainer.isVisible()) {
91+
this.__hideTasks();
92+
} else {
93+
this.__showTasks();
94+
}
95+
},
96+
8197
__showTasks: function() {
82-
const that = this;
83-
const tapListener = event => {
84-
const tasks = osparc.task.TasksContainer.getInstance();
85-
const tasksContainer = tasks.getTasksContainer();
86-
if (osparc.utils.Utils.isMouseOnElement(tasksContainer, event)) {
87-
return;
88-
}
89-
// eslint-disable-next-line no-underscore-dangle
90-
that.__hideTasks();
91-
document.removeEventListener("mousedown", tapListener);
92-
};
98+
this.__positionTasksContainer();
99+
100+
const tasks = osparc.task.TasksContainer.getInstance();
101+
tasks.getTasksContainer().show();
93102

103+
// Add listeners for taps outside the container to hide it
104+
document.addEventListener("mousedown", this.__onTapOutsideMouse.bind(this), true);
105+
},
106+
107+
__positionTasksContainer: function() {
94108
const bounds = osparc.utils.Utils.getBounds(this);
95109
const tasks = osparc.task.TasksContainer.getInstance();
96110
tasks.setTasksContainerPosition(
97-
bounds.left + bounds.width - osparc.task.TaskUI.MAX_WIDTH,
98-
osparc.navigation.NavigationBar.HEIGHT + 14
111+
bounds.left + bounds.width - osparc.task.TaskUI.MAX_WIDTH - 2*8,
112+
osparc.navigation.NavigationBar.HEIGHT - 8
99113
);
100-
tasks.getTasksContainer().show();
101-
document.addEventListener("mousedown", tapListener);
114+
},
115+
116+
__onTapOutsideMouse: function(event) {
117+
this.__handleOutsideEvent(event);
118+
},
119+
120+
__handleOutsideEvent: function(event) {
121+
const tasks = osparc.task.TasksContainer.getInstance();
122+
const onContainer = osparc.utils.Utils.isMouseOnElement(tasks.getTasksContainer(), event);
123+
const onButton = osparc.utils.Utils.isMouseOnElement(this, event);
124+
if (!onContainer && !onButton) {
125+
this.__hideTasks();
126+
}
102127
},
103128

104129
__hideTasks: function() {
105130
const tasks = osparc.task.TasksContainer.getInstance();
106131
tasks.getTasksContainer().exclude();
132+
133+
// Remove listeners for outside clicks/taps
134+
document.removeEventListener("mousedown", this.__onTapOutsideMouse.bind(this), true);
107135
}
108136
}
109137
});

services/static-webserver/client/source/class/osparc/task/TasksContainer.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ qx.Class.define("osparc.task.TasksContainer", {
2424
this.__tasks = new qx.data.Array();
2525

2626
const tasksContainer = this.__tasksContainer = new qx.ui.container.Composite(new qx.ui.layout.VBox(3)).set({
27+
appearance: "floating-menu",
28+
padding: 8,
29+
maxWidth: osparc.task.TaskUI.MAX_WIDTH + 2*8,
2730
zIndex: osparc.utils.Utils.FLOATING_Z_INDEX,
2831
visibility: "excluded"
2932
});

0 commit comments

Comments
 (0)