Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🐛 [Frontend] Fix: Move folder to a different workspace and subfolder #6903

Merged
merged 11 commits into from
Dec 5, 2024
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@ qx.Class.define("osparc.dashboard.MoveResourceTo", {

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

moveButton.setEnabled(false);
const moveButton = this.getChildControl("move-btn");
moveButton.setEnabled(currentWorkspaceId !== null || currentFolderId !== null); // disable if current location is My Workspace's root
workspacesAndFoldersTree.getSelection().addListener("change", () => {
const selection = workspacesAndFoldersTree.getSelection();
if (selection.getLength() > 0) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -576,10 +576,8 @@ qx.Class.define("osparc.dashboard.StudyBrowser", {
const destWorkspaceId = data["workspaceId"];
const destFolderId = data["folderId"];
const moveFolder = () => {
Promise.all([
this.__moveFolderToWorkspace(folderId, destWorkspaceId),
this.__moveFolderToFolder(folderId, destFolderId),
])
osparc.store.Folders.getInstance().moveFolderToWorkspace(folderId, destWorkspaceId) // first move to workspace
.then(() => osparc.store.Folders.getInstance().moveFolderToFolder(folderId, destFolderId)) // then move to folder
.then(() => this.__reloadFolders())
.catch(err => console.error(err));
}
Expand All @@ -597,38 +595,6 @@ qx.Class.define("osparc.dashboard.StudyBrowser", {
moveFolderTo.addListener("cancel", () => win.close());
},

__moveFolderToWorkspace: function(folderId, destWorkspaceId) {
const folder = osparc.store.Folders.getInstance().getFolder(folderId);
if (folder.getWorkspaceId() === destWorkspaceId) {
// resolve right away
return new Promise(resolve => resolve());
}
const params = {
url: {
folderId,
workspaceId: destWorkspaceId,
}
};
return osparc.data.Resources.fetch("folders", "moveToWorkspace", params)
.then(() => folder.setWorkspaceId(destWorkspaceId))
.catch(err => console.error(err));
},

__moveFolderToFolder: function(folderId, destFolderId) {
if (folderId === destFolderId) {
// resolve right away
return new Promise(resolve => resolve());
}
const folder = osparc.store.Folders.getInstance().getFolder(folderId);
const updatedData = {
name: folder.getName(),
parentFolderId: destFolderId,
};
return osparc.store.Folders.getInstance().putFolder(folderId, updatedData)
.then(() => folder.setParentFolderId(destFolderId))
.catch(err => console.error(err));
},

_trashFolderRequested: function(folderId) {
osparc.store.Folders.getInstance().trashFolder(folderId, this.getCurrentWorkspaceId())
.then(() => {
Expand Down Expand Up @@ -1243,10 +1209,8 @@ qx.Class.define("osparc.dashboard.StudyBrowser", {
const selection = this._resourcesContainer.getSelection();
selection.forEach(button => {
const studyData = button.getResourceData();
Promise.all([
this.__moveStudyToWorkspace(studyData, destWorkspaceId),
this.__moveStudyToFolder(studyData, destFolderId),
])
this.__moveStudyToWorkspace(studyData, destWorkspaceId) // first move to workspace
.then(() => this.__moveStudyToFolder(studyData, destFolderId)) // then move to folder
.then(() => this.__removeFromStudyList(studyData["uuid"]))
.catch(err => {
console.error(err);
Expand Down Expand Up @@ -1667,10 +1631,8 @@ qx.Class.define("osparc.dashboard.StudyBrowser", {
const destWorkspaceId = data["workspaceId"];
const destFolderId = data["folderId"];
const moveStudy = () => {
Promise.all([
this.__moveStudyToWorkspace(studyData, destWorkspaceId),
this.__moveStudyToFolder(studyData, destFolderId),
])
this.__moveStudyToWorkspace(studyData, destWorkspaceId) // first move to workspace
.then(() => this.__moveStudyToFolder(studyData, destFolderId)) // then move to folder
.then(() => this.__removeFromStudyList(studyData["uuid"]))
.catch(err => {
console.error(err);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,15 +58,6 @@ qx.Class.define("osparc.dashboard.WorkspacesAndFoldersTree", {
this.__folderRemoved(folder);
}, this);

osparc.store.Folders.getInstance().addListener("folderMoved", e => {
const {
folder,
oldParentFolderId,
} = e.getData();
this.__folderRemoved(folder, oldParentFolderId);
this.__folderAdded(folder);
}, this);

osparc.store.Workspaces.getInstance().addListener("workspaceAdded", e => {
const workspace = e.getData();
this.__addWorkspace(workspace);
Expand Down Expand Up @@ -299,25 +290,22 @@ qx.Class.define("osparc.dashboard.WorkspacesAndFoldersTree", {
}
},

__folderRemoved: function(folder, oldParentFolderId) {
__folderRemoved: function(folder) {
// eslint-disable-next-line no-negated-condition
const parentModel = this.__getModel(folder.getWorkspaceId(), oldParentFolderId !== undefined ? oldParentFolderId : folder.getParentFolderId());
const parentModel = this.__getModel(folder.getWorkspaceId(), folder.getParentFolderId());
if (parentModel) {
const idx = parentModel.getChildren().toArray().findIndex(c => folder.getWorkspaceId() === c.getWorkspaceId() && folder.getFolderId() === c.getFolderId());
const idx = parentModel.getChildren().toArray().findIndex(c => "getWorkspaceId" in c && folder.getWorkspaceId() === c.getWorkspaceId() && folder.getFolderId() === c.getFolderId());
if (idx > -1) {
parentModel.getChildren().removeAt(idx);
}
}

if (oldParentFolderId === undefined) {
// it was removed, not moved
// remove it from the cached models
const modelFound = this.__getModel(folder.getWorkspaceId(), folder.getFolderId());
if (modelFound) {
const index = this.__models.indexOf(modelFound);
if (index > -1) { // only splice array when item is found
this.__models.splice(index, 1); // 2nd parameter means remove one item only
}
// remove it from the cached models
const modelFound = this.__getModel(folder.getWorkspaceId(), folder.getFolderId());
if (modelFound) {
const index = this.__models.indexOf(modelFound);
if (index > -1) { // only splice array when item is found
this.__models.splice(index, 1); // 2nd parameter means remove one item only
}
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ qx.Class.define("osparc.desktop.preferences.pages.GeneralPage", {
if (osparc.desktop.credits.Utils.areWalletsEnabled()) {
this.__addCreditsIndicatorSettings();
}

const preferences = osparc.Preferences.getInstance();
if (preferences.getLowDiskSpaceThreshold()) {
this.__addLowDiskSpaceSetting();
Expand All @@ -38,7 +38,7 @@ qx.Class.define("osparc.desktop.preferences.pages.GeneralPage", {
}

// this.__addJobConcurrencySetting();

if (osparc.product.Utils.isS4LProduct() || osparc.product.Utils.isProduct("s4llite")) {
this.__addS4LUserPrivacySettings();
}
Expand Down Expand Up @@ -147,6 +147,7 @@ qx.Class.define("osparc.desktop.preferences.pages.GeneralPage", {
allowGrowX: false,
enabled: true
});
const preferences = osparc.Preferences.getInstance();
preferences.bind("lowDiskSpaceThreshold", diskUsageSpinner, "value");

diskUsageSpinner.addListener("changeValue", e => osparc.Preferences.patchPreferenceField("lowDiskSpaceThreshold", diskUsageSpinner, e.getData()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ qx.Class.define("osparc.store.Folders", {
events: {
"folderAdded": "qx.event.type.Data",
"folderRemoved": "qx.event.type.Data",
"folderMoved": "qx.event.type.Data",
},

statics: {
Expand Down Expand Up @@ -212,17 +211,56 @@ qx.Class.define("osparc.store.Folders", {
};
return osparc.data.Resources.getInstance().fetch("folders", "update", params)
.then(folderData => {
this.__addToCache(folderData);
if (updateData.parentFolderId !== oldParentFolderId) {
this.fireDataEvent("folderMoved", {
folder,
oldParentFolderId,
});
const folderMoved = updateData.parentFolderId !== oldParentFolderId;
if (folderMoved) {
this.fireDataEvent("folderRemoved", folder);
}
this.__addToCache(folderData); // it will update the folder model
if (folderMoved) {
this.fireDataEvent("folderAdded", folder);
}
})
.catch(console.error);
},

moveFolderToFolder: function(folderId, destFolderId) {
if (folderId === destFolderId) {
// resolve right away
return new Promise(resolve => resolve());
}

const folder = this.getFolder(folderId);
const updatedData = {
name: folder.getName(),
parentFolderId: destFolderId,
};
return this.putFolder(folderId, updatedData)
.then(() => folder.setParentFolderId(destFolderId))
.catch(err => console.error(err));
},

moveFolderToWorkspace: function(folderId, destWorkspaceId) {
const folder = this.getFolder(folderId);
if (folder.getWorkspaceId() === destWorkspaceId) {
// resolve right away
return new Promise(resolve => resolve());
}

const params = {
url: {
folderId,
workspaceId: destWorkspaceId,
}
};
return osparc.data.Resources.fetch("folders", "moveToWorkspace", params)
.then(() => {
this.fireDataEvent("folderRemoved", folder);
folder.setWorkspaceId(destWorkspaceId);
this.fireDataEvent("folderAdded", folder);
})
.catch(err => console.error(err));
},

getFolder: function(folderId = null) {
return this.foldersCached.find(f => f.getFolderId() === folderId);
},
Expand Down
Loading