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

Bugfix/loader for file operations #459

Merged
merged 15 commits into from
Nov 17, 2021
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Web: Files: fixed files loader when api crashed, added display toast …
…for delete operation
gopienkonikita committed Nov 17, 2021
commit d081a79cfabae19f486df6cab17596e4aa5e03ce
34 changes: 23 additions & 11 deletions products/ASC.Files/Client/src/store/FilesActionsStore.js
Original file line number Diff line number Diff line change
@@ -70,13 +70,17 @@ class FilesActionStore {
deleteAction = async (translations, newSelection = null) => {
const { isRecycleBinFolder, isPrivacyFolder } = this.treeFoldersStore;
const { addActiveItems } = this.filesStore;

const selection = newSelection ? newSelection : this.filesStore.selection;

const {
secondaryProgressDataStore,
loopFilesOperations,
clearActiveOperations,
} = this.uploadDataStore;
const {
setSecondaryProgressBarData,
clearSecondaryProgressData,
} = this.uploadDataStore.secondaryProgressDataStore;
} = secondaryProgressDataStore;

const selection = newSelection ? newSelection : this.filesStore.selection;

setSecondaryProgressBarData({
icon: "trash",
@@ -111,21 +115,18 @@ class FilesActionStore {
try {
await removeFiles(folderIds, fileIds, deleteAfter, immediately).then(
async (res) => {
if (res[0]?.error) return Promise.reject(res[0].error);
const data = res[0] ? res[0] : null;
const pbData = {
icon: "trash",
label: translations.deleteOperation,
};
await this.uploadDataStore.loopFilesOperations(
data,
pbData,
fileIds,
folderIds
);
await loopFilesOperations(data, pbData, fileIds, folderIds);
this.updateCurrentFolder();
}
);
} catch (err) {
clearActiveOperations(fileIds, folderIds);
setSecondaryProgressBarData({
visible: true,
alert: true,
@@ -152,6 +153,7 @@ class FilesActionStore {

try {
await emptyTrash().then(async (res) => {
if (res[0]?.error) return Promise.reject(res[0].error);
const data = res[0] ? res[0] : null;
const pbData = {
icon: "trash",
@@ -303,10 +305,14 @@ class FilesActionStore {
};

deleteItemAction = async (itemId, translations, isFile, isThirdParty) => {
const {
secondaryProgressDataStore,
clearActiveOperations,
} = this.uploadDataStore;
const {
setSecondaryProgressBarData,
clearSecondaryProgressData,
} = this.uploadDataStore.secondaryProgressDataStore;
} = secondaryProgressDataStore;
if (
this.settingsStore.confirmDelete ||
this.treeFoldersStore.isPrivacyFolder ||
@@ -325,6 +331,7 @@ class FilesActionStore {
try {
await this.deleteItemOperation(isFile, itemId, translations);
} catch (err) {
clearActiveOperations(isFile && [itemId], !isFile && [itemId]);
setSecondaryProgressBarData({
visible: true,
alert: true,
@@ -348,6 +355,7 @@ class FilesActionStore {
this.isMediaOpen();
return deleteFile(itemId)
.then(async (res) => {
if (res[0]?.error) return Promise.reject(res[0].error);
const data = res[0] ? res[0] : null;
await this.uploadDataStore.loopFilesOperations(data, pbData, [
itemId,
@@ -359,6 +367,7 @@ class FilesActionStore {
addActiveItems(null, [itemId]);
return deleteFolder(itemId)
.then(async (res) => {
if (res[0]?.error) return Promise.reject(res[0].error);
const data = res[0] ? res[0] : null;
await this.uploadDataStore.loopFilesOperations(data, pbData, null, [
itemId,
@@ -400,6 +409,7 @@ class FilesActionStore {
setSecondaryProgressBarData,
} = this.uploadDataStore.secondaryProgressDataStore;

//TODO: duplicate for folders?
const folderIds = [];
const fileIds = [];
item.fileExst ? fileIds.push(item.id) : folderIds.push(item.id);
@@ -414,6 +424,8 @@ class FilesActionStore {
alert: false,
});

this.filesStore.addActiveItems(fileIds, folderIds);

return this.uploadDataStore.copyToAction(
this.selectedFolderStore.id,
folderIds,
66 changes: 44 additions & 22 deletions products/ASC.Files/Client/src/store/UploadDataStore.js
Original file line number Diff line number Diff line change
@@ -765,15 +765,19 @@ class UploadDataStore {

const data = res[0] ? res[0] : null;
const pbData = { icon: "duplicate" };
return this.loopFilesOperations(data, pbData).then(() =>
this.moveToCopyTo(destFolderId, pbData, true)
);
return this.loopFilesOperations(
data,
pbData,
fileIds,
folderIds
).then(() => this.moveToCopyTo(destFolderId, pbData, true));
})
.catch((err) => {
setSecondaryProgressBarData({
visible: true,
alert: true,
});
this.clearActiveOperations(fileIds, folderIds);
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
return Promise.reject(err);
});
@@ -801,15 +805,19 @@ class UploadDataStore {
.then((res) => {
const data = res[0] ? res[0] : null;
const pbData = { icon: "move" };
return this.loopFilesOperations(data, pbData).then(() =>
this.moveToCopyTo(destFolderId, pbData, false)
);
return this.loopFilesOperations(
data,
pbData,
fileIds,
folderIds
).then(() => this.moveToCopyTo(destFolderId, pbData, false));
})
.catch((err) => {
setSecondaryProgressBarData({
visible: true,
alert: true,
});
this.clearActiveOperations(fileIds, folderIds);
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
return Promise.reject(err);
});
@@ -854,19 +862,19 @@ class UploadDataStore {
};

loopFilesOperations = async (data, pbData, fileIds, folderIds) => {
const label = this.secondaryProgressDataStore.label;

const {
clearSecondaryProgressData,
setSecondaryProgressBarData,
} = this.secondaryProgressDataStore;
const {
activeFiles,
activeFolders,
setActiveFiles,
setActiveFolders,
} = this.filesStore;

const {
clearSecondaryProgressData,
setSecondaryProgressBarData,
} = this.secondaryProgressDataStore;

const label = this.secondaryProgressDataStore.label;
let progress = data.progress;

if (!data) {
@@ -892,7 +900,10 @@ class UploadDataStore {
});
}

if (operationItem.files || operationItem.folders) {
if (
!operationItem.error &&
(operationItem.files || operationItem.folders)
) {
const newActiveFiles = activeFiles.filter(
(x) => !operationItem.files.find((y) => y.id === x)
);
@@ -905,15 +916,7 @@ class UploadDataStore {
setActiveFolders(newActiveFolders);
}, TIMEOUT);
} else if (fileIds || folderIds) {
const newActiveFiles = activeFiles.filter((el) => !fileIds.includes(el));
const newActiveFolders = activeFolders.filter(
(el) => !folderIds.includes(el)
);

setTimeout(() => {
setActiveFiles(newActiveFiles);
setActiveFolders(newActiveFolders);
}, TIMEOUT);
this.clearActiveOperations(fileIds, folderIds);
}

return operationItem;
@@ -974,6 +977,25 @@ class UploadDataStore {
});
return promise;
};

clearActiveOperations = (fileIds, folderIds) => {
const {
activeFiles,
activeFolders,
setActiveFiles,
setActiveFolders,
} = this.filesStore;

const newActiveFiles = activeFiles.filter((el) => !fileIds.includes(el));
const newActiveFolders = activeFolders.filter(
(el) => !folderIds.includes(el)
);

setTimeout(() => {
setActiveFiles(newActiveFiles);
setActiveFolders(newActiveFolders);
}, TIMEOUT);
};
}

export default UploadDataStore;