Skip to content

Commit cba896a

Browse files
authored
🐛 [Frontend] Fix: Move folder to a different workspace and subfolder (#6903)
1 parent 3ade7ef commit cba896a

File tree

5 files changed

+65
-76
lines changed

5 files changed

+65
-76
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ qx.Class.define("osparc.dashboard.MoveResourceTo", {
3030

3131
const workspacesAndFoldersTree = this.getChildControl("workspaces-and-folders-tree");
3232
this.getChildControl("cancel-btn");
33-
const moveButton = this.getChildControl("move-btn");
3433

35-
moveButton.setEnabled(false);
34+
const moveButton = this.getChildControl("move-btn");
35+
moveButton.setEnabled(currentWorkspaceId !== null || currentFolderId !== null); // disable if current location is My Workspace's root
3636
workspacesAndFoldersTree.getSelection().addListener("change", () => {
3737
const selection = workspacesAndFoldersTree.getSelection();
3838
if (selection.getLength() > 0) {

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

Lines changed: 6 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -576,10 +576,8 @@ qx.Class.define("osparc.dashboard.StudyBrowser", {
576576
const destWorkspaceId = data["workspaceId"];
577577
const destFolderId = data["folderId"];
578578
const moveFolder = () => {
579-
Promise.all([
580-
this.__moveFolderToWorkspace(folderId, destWorkspaceId),
581-
this.__moveFolderToFolder(folderId, destFolderId),
582-
])
579+
osparc.store.Folders.getInstance().moveFolderToWorkspace(folderId, destWorkspaceId) // first move to workspace
580+
.then(() => osparc.store.Folders.getInstance().moveFolderToFolder(folderId, destFolderId)) // then move to folder
583581
.then(() => this.__reloadFolders())
584582
.catch(err => console.error(err));
585583
}
@@ -597,38 +595,6 @@ qx.Class.define("osparc.dashboard.StudyBrowser", {
597595
moveFolderTo.addListener("cancel", () => win.close());
598596
},
599597

600-
__moveFolderToWorkspace: function(folderId, destWorkspaceId) {
601-
const folder = osparc.store.Folders.getInstance().getFolder(folderId);
602-
if (folder.getWorkspaceId() === destWorkspaceId) {
603-
// resolve right away
604-
return new Promise(resolve => resolve());
605-
}
606-
const params = {
607-
url: {
608-
folderId,
609-
workspaceId: destWorkspaceId,
610-
}
611-
};
612-
return osparc.data.Resources.fetch("folders", "moveToWorkspace", params)
613-
.then(() => folder.setWorkspaceId(destWorkspaceId))
614-
.catch(err => console.error(err));
615-
},
616-
617-
__moveFolderToFolder: function(folderId, destFolderId) {
618-
if (folderId === destFolderId) {
619-
// resolve right away
620-
return new Promise(resolve => resolve());
621-
}
622-
const folder = osparc.store.Folders.getInstance().getFolder(folderId);
623-
const updatedData = {
624-
name: folder.getName(),
625-
parentFolderId: destFolderId,
626-
};
627-
return osparc.store.Folders.getInstance().putFolder(folderId, updatedData)
628-
.then(() => folder.setParentFolderId(destFolderId))
629-
.catch(err => console.error(err));
630-
},
631-
632598
_trashFolderRequested: function(folderId) {
633599
osparc.store.Folders.getInstance().trashFolder(folderId, this.getCurrentWorkspaceId())
634600
.then(() => {
@@ -1243,10 +1209,8 @@ qx.Class.define("osparc.dashboard.StudyBrowser", {
12431209
const selection = this._resourcesContainer.getSelection();
12441210
selection.forEach(button => {
12451211
const studyData = button.getResourceData();
1246-
Promise.all([
1247-
this.__moveStudyToWorkspace(studyData, destWorkspaceId),
1248-
this.__moveStudyToFolder(studyData, destFolderId),
1249-
])
1212+
this.__moveStudyToWorkspace(studyData, destWorkspaceId) // first move to workspace
1213+
.then(() => this.__moveStudyToFolder(studyData, destFolderId)) // then move to folder
12501214
.then(() => this.__removeFromStudyList(studyData["uuid"]))
12511215
.catch(err => {
12521216
console.error(err);
@@ -1667,10 +1631,8 @@ qx.Class.define("osparc.dashboard.StudyBrowser", {
16671631
const destWorkspaceId = data["workspaceId"];
16681632
const destFolderId = data["folderId"];
16691633
const moveStudy = () => {
1670-
Promise.all([
1671-
this.__moveStudyToWorkspace(studyData, destWorkspaceId),
1672-
this.__moveStudyToFolder(studyData, destFolderId),
1673-
])
1634+
this.__moveStudyToWorkspace(studyData, destWorkspaceId) // first move to workspace
1635+
.then(() => this.__moveStudyToFolder(studyData, destFolderId)) // then move to folder
16741636
.then(() => this.__removeFromStudyList(studyData["uuid"]))
16751637
.catch(err => {
16761638
console.error(err);

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

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -58,15 +58,6 @@ qx.Class.define("osparc.dashboard.WorkspacesAndFoldersTree", {
5858
this.__folderRemoved(folder);
5959
}, this);
6060

61-
osparc.store.Folders.getInstance().addListener("folderMoved", e => {
62-
const {
63-
folder,
64-
oldParentFolderId,
65-
} = e.getData();
66-
this.__folderRemoved(folder, oldParentFolderId);
67-
this.__folderAdded(folder);
68-
}, this);
69-
7061
osparc.store.Workspaces.getInstance().addListener("workspaceAdded", e => {
7162
const workspace = e.getData();
7263
this.__addWorkspace(workspace);
@@ -299,25 +290,22 @@ qx.Class.define("osparc.dashboard.WorkspacesAndFoldersTree", {
299290
}
300291
},
301292

302-
__folderRemoved: function(folder, oldParentFolderId) {
293+
__folderRemoved: function(folder) {
303294
// eslint-disable-next-line no-negated-condition
304-
const parentModel = this.__getModel(folder.getWorkspaceId(), oldParentFolderId !== undefined ? oldParentFolderId : folder.getParentFolderId());
295+
const parentModel = this.__getModel(folder.getWorkspaceId(), folder.getParentFolderId());
305296
if (parentModel) {
306-
const idx = parentModel.getChildren().toArray().findIndex(c => folder.getWorkspaceId() === c.getWorkspaceId() && folder.getFolderId() === c.getFolderId());
297+
const idx = parentModel.getChildren().toArray().findIndex(c => "getWorkspaceId" in c && folder.getWorkspaceId() === c.getWorkspaceId() && folder.getFolderId() === c.getFolderId());
307298
if (idx > -1) {
308299
parentModel.getChildren().removeAt(idx);
309300
}
310301
}
311302

312-
if (oldParentFolderId === undefined) {
313-
// it was removed, not moved
314-
// remove it from the cached models
315-
const modelFound = this.__getModel(folder.getWorkspaceId(), folder.getFolderId());
316-
if (modelFound) {
317-
const index = this.__models.indexOf(modelFound);
318-
if (index > -1) { // only splice array when item is found
319-
this.__models.splice(index, 1); // 2nd parameter means remove one item only
320-
}
303+
// remove it from the cached models
304+
const modelFound = this.__getModel(folder.getWorkspaceId(), folder.getFolderId());
305+
if (modelFound) {
306+
const index = this.__models.indexOf(modelFound);
307+
if (index > -1) { // only splice array when item is found
308+
this.__models.splice(index, 1); // 2nd parameter means remove one item only
321309
}
322310
}
323311
},

services/static-webserver/client/source/class/osparc/desktop/preferences/pages/GeneralPage.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ qx.Class.define("osparc.desktop.preferences.pages.GeneralPage", {
2727
if (osparc.desktop.credits.Utils.areWalletsEnabled()) {
2828
this.__addCreditsIndicatorSettings();
2929
}
30-
30+
3131
const preferences = osparc.Preferences.getInstance();
3232
if (preferences.getLowDiskSpaceThreshold()) {
3333
this.__addLowDiskSpaceSetting();
@@ -38,7 +38,7 @@ qx.Class.define("osparc.desktop.preferences.pages.GeneralPage", {
3838
}
3939

4040
// this.__addJobConcurrencySetting();
41-
41+
4242
if (osparc.product.Utils.isS4LProduct() || osparc.product.Utils.isProduct("s4llite")) {
4343
this.__addS4LUserPrivacySettings();
4444
}
@@ -147,6 +147,7 @@ qx.Class.define("osparc.desktop.preferences.pages.GeneralPage", {
147147
allowGrowX: false,
148148
enabled: true
149149
});
150+
const preferences = osparc.Preferences.getInstance();
150151
preferences.bind("lowDiskSpaceThreshold", diskUsageSpinner, "value");
151152

152153
diskUsageSpinner.addListener("changeValue", e => osparc.Preferences.patchPreferenceField("lowDiskSpaceThreshold", diskUsageSpinner, e.getData()));

services/static-webserver/client/source/class/osparc/store/Folders.js

Lines changed: 45 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ qx.Class.define("osparc.store.Folders", {
2828
events: {
2929
"folderAdded": "qx.event.type.Data",
3030
"folderRemoved": "qx.event.type.Data",
31-
"folderMoved": "qx.event.type.Data",
3231
},
3332

3433
statics: {
@@ -212,17 +211,56 @@ qx.Class.define("osparc.store.Folders", {
212211
};
213212
return osparc.data.Resources.getInstance().fetch("folders", "update", params)
214213
.then(folderData => {
215-
this.__addToCache(folderData);
216-
if (updateData.parentFolderId !== oldParentFolderId) {
217-
this.fireDataEvent("folderMoved", {
218-
folder,
219-
oldParentFolderId,
220-
});
214+
const folderMoved = updateData.parentFolderId !== oldParentFolderId;
215+
if (folderMoved) {
216+
this.fireDataEvent("folderRemoved", folder);
217+
}
218+
this.__addToCache(folderData); // it will update the folder model
219+
if (folderMoved) {
220+
this.fireDataEvent("folderAdded", folder);
221221
}
222222
})
223223
.catch(console.error);
224224
},
225225

226+
moveFolderToFolder: function(folderId, destFolderId) {
227+
if (folderId === destFolderId) {
228+
// resolve right away
229+
return new Promise(resolve => resolve());
230+
}
231+
232+
const folder = this.getFolder(folderId);
233+
const updatedData = {
234+
name: folder.getName(),
235+
parentFolderId: destFolderId,
236+
};
237+
return this.putFolder(folderId, updatedData)
238+
.then(() => folder.setParentFolderId(destFolderId))
239+
.catch(err => console.error(err));
240+
},
241+
242+
moveFolderToWorkspace: function(folderId, destWorkspaceId) {
243+
const folder = this.getFolder(folderId);
244+
if (folder.getWorkspaceId() === destWorkspaceId) {
245+
// resolve right away
246+
return new Promise(resolve => resolve());
247+
}
248+
249+
const params = {
250+
url: {
251+
folderId,
252+
workspaceId: destWorkspaceId,
253+
}
254+
};
255+
return osparc.data.Resources.fetch("folders", "moveToWorkspace", params)
256+
.then(() => {
257+
this.fireDataEvent("folderRemoved", folder);
258+
folder.setWorkspaceId(destWorkspaceId);
259+
this.fireDataEvent("folderAdded", folder);
260+
})
261+
.catch(err => console.error(err));
262+
},
263+
226264
getFolder: function(folderId = null) {
227265
return this.foldersCached.find(f => f.getFolderId() === folderId);
228266
},

0 commit comments

Comments
 (0)