Web: Files: fixed deleteAction func, refactoring

This commit is contained in:
Nikita Gopienko 2021-10-02 15:32:14 +03:00
parent abcf7a5abd
commit 0d3660518b
4 changed files with 169 additions and 175 deletions

View File

@ -67,7 +67,7 @@ class DeleteDialogComponent extends React.Component {
if (!selection.length) return;
deleteAction(translations, selection).catch((err) => toastr.error(err));
deleteAction(translations, selection);
};
onUnsubscribe = () => {

View File

@ -237,7 +237,7 @@ class SectionHeaderContent extends React.Component {
deleteSelectedElem: t("Translations:DeleteSelectedElem"),
};
deleteAction(translations).catch((err) => toastr.error(err));
deleteAction(translations);
}
};

View File

@ -56,7 +56,18 @@ class FilesActionStore {
}
};
deleteAction = (translations, newSelection = null) => {
deleteCB = () => {
const {
clearSecondaryProgressData,
} = this.uploadDataStore.secondaryProgressDataStore;
const { filter, fetchFiles } = this.filesStore;
fetchFiles(this.selectedFolderStore.id, filter, true, true).finally(() =>
setTimeout(() => clearSecondaryProgressData(), TIMEOUT)
);
};
deleteAction = async (translations, newSelection = null) => {
const { isRecycleBinFolder, isPrivacyFolder } = this.treeFoldersStore;
const selection = newSelection ? newSelection : this.filesStore.selection;
@ -66,6 +77,14 @@ class FilesActionStore {
clearSecondaryProgressData,
} = this.uploadDataStore.secondaryProgressDataStore;
setSecondaryProgressBarData({
icon: "trash",
visible: true,
percent: 0,
label: translations.deleteOperation,
alert: false,
});
const deleteAfter = false; //Delete after finished TODO: get from settings
const immediately = isRecycleBinFolder || isPrivacyFolder ? true : false; //Don't move to the Recycle Bin
@ -84,112 +103,70 @@ class FilesActionStore {
if (folderIds.length || fileIds.length) {
this.isMediaOpen();
return removeFiles(folderIds, fileIds, deleteAfter, immediately)
.then((res) => {
const id = res[0] && res[0].id ? res[0].id : null;
const currentProcess = res.find((x) => x.id === id);
setSecondaryProgressBarData({
icon: "trash",
visible: true,
label: translations.deleteOperation,
percent: currentProcess.progress,
alert: false,
});
this.loopDeleteOperation(id, translations);
})
.catch((err) => {
setSecondaryProgressBarData({
visible: true,
alert: true,
});
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
try {
await removeFiles(folderIds, fileIds, deleteAfter, immediately).then(
async (res) => {
const data = res[0] ? res[0] : null;
const pbData = {
icon: "trash",
label: translations.deleteOperation,
};
await this.uploadDataStore.loopFilesOperations(
data,
pbData,
this.deleteCB
);
}
);
} catch (err) {
setSecondaryProgressBarData({
visible: true,
alert: true,
});
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
return toastr.error(err.message ? err.message : err);
}
}
};
loopDeleteOperation = (id, translations) => {
const { filter, fetchFiles } = this.filesStore;
const { isRecycleBinFolder, setTreeFolders } = this.treeFoldersStore;
const {
setSecondaryProgressBarData,
clearSecondaryProgressData,
} = this.uploadDataStore.secondaryProgressDataStore;
// loopFilesOperations = (id, translations) => {
// const {
// setSecondaryProgressBarData,
// clearSecondaryProgressData,
// } = this.uploadDataStore.secondaryProgressDataStore;
const successMessage = isRecycleBinFolder
? translations.deleteFromTrash
: translations.deleteSelectedElem;
getProgress()
.then((res) => {
const currentProcess = res.find((x) => x.id === id);
if (currentProcess && currentProcess.progress !== 100) {
setSecondaryProgressBarData({
icon: "trash",
percent: currentProcess.progress,
label: translations.deleteOperation,
visible: true,
alert: false,
});
setTimeout(() => this.loopDeleteOperation(id, translations), 1000);
} else {
setSecondaryProgressBarData({
icon: "trash",
percent: 100,
label: translations.deleteOperation,
visible: true,
alert: false,
});
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
fetchFiles(this.selectedFolderStore.id, filter, true, true);
}
})
.catch((err) => {
setSecondaryProgressBarData({
visible: true,
alert: true,
});
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
});
};
loopFilesOperations = (id, translations) => {
const {
setSecondaryProgressBarData,
clearSecondaryProgressData,
} = this.uploadDataStore.secondaryProgressDataStore;
getProgress()
.then((res) => {
const currentProcess = res.find((x) => x.id === id);
if (currentProcess && currentProcess.progress !== 100) {
setSecondaryProgressBarData({
icon: "file",
percent: currentProcess.progress,
label: "", //TODO: add translation if need "MarkAsRead": "Mark all as read",
visible: true,
alert: false,
});
setTimeout(() => this.loopFilesOperations(id, translations), 1000);
} else {
setSecondaryProgressBarData({
icon: "file",
percent: 100,
label: "", //TODO: add translation if need "MarkAsRead": "Mark all as read",
visible: true,
alert: false,
});
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
}
})
.catch((err) => {
setSecondaryProgressBarData({
visible: true,
alert: true,
});
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
});
};
// getProgress()
// .then((res) => {
// const currentProcess = res.find((x) => x.id === id);
// if (currentProcess && currentProcess.progress !== 100) {
// setSecondaryProgressBarData({
// icon: "file",
// percent: currentProcess.progress,
// label: "", //TODO: add translation if need "MarkAsRead": "Mark all as read",
// visible: true,
// alert: false,
// });
// setTimeout(() => this.loopFilesOperations(id, translations), 1000);
// } else {
// setSecondaryProgressBarData({
// icon: "file",
// percent: 100,
// label: "", //TODO: add translation if need "MarkAsRead": "Mark all as read",
// visible: true,
// alert: false,
// });
// setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
// }
// })
// .catch((err) => {
// setSecondaryProgressBarData({
// visible: true,
// alert: true,
// });
// setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
// });
// };
getDownloadProgress = (data, label) => {
const {
@ -366,8 +343,8 @@ class FilesActionStore {
this.isMediaOpen();
return deleteFile(fileId)
.then((res) => {
const id = res[0] && res[0].id ? res[0].id : null;
this.loopDeleteProgress(id, currentFolderId, false, translations);
// const id = res[0] && res[0].id ? res[0].id : null;
// this.loopDeleteProgress(id, currentFolderId, translations);
})
.then(() => toastr.success(translations.successRemoveFile))
.catch((err) => {
@ -397,63 +374,68 @@ class FilesActionStore {
return deleteFolder(folderId, currentFolderId)
.then((res) => {
const id = res[0] && res[0].id ? res[0].id : null;
this.loopDeleteProgress(id, currentFolderId, true, translations);
//const id = res[0] && res[0].id ? res[0].id : null;
//this.loopDeleteProgress(id, currentFolderId, translations);
const data = res[0] ? res[0] : null;
})
.then(() => toastr.success(translations.successRemoveFolder))
.catch((err) => {
toastr.error(err);
//toastr.error(err);
setSecondaryProgressBarData({
visible: true,
alert: true,
});
setTimeout(() => clearPrimaryProgressData(), TIMEOUT);
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
return Promise.reject(err);
});
};
loopDeleteProgress = (id, folderId, isFolder, translations) => {
const { filter, fetchFiles } = this.filesStore;
const {
setSecondaryProgressBarData,
clearSecondaryProgressData,
} = this.uploadDataStore.secondaryProgressDataStore;
// loopDeleteProgress = (id, folderId, translations) => {
// const { filter, fetchFiles } = this.filesStore;
// const {
// setSecondaryProgressBarData,
// clearSecondaryProgressData,
// } = this.uploadDataStore.secondaryProgressDataStore;
getProgress().then((res) => {
const deleteProgress = res.find((x) => x.id === id);
if (deleteProgress && deleteProgress.progress !== 100) {
setSecondaryProgressBarData({
icon: "trash",
visible: true,
percent: deleteProgress.progress,
label: translations.deleteOperation,
alert: false,
});
setTimeout(
() => this.loopDeleteProgress(id, folderId, isFolder, translations),
1000
);
} else {
setSecondaryProgressBarData({
icon: "trash",
visible: true,
percent: 100,
label: translations.deleteOperation,
alert: false,
});
fetchFiles(folderId, filter, true, true)
.catch((err) => {
setSecondaryProgressBarData({
visible: true,
alert: true,
});
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
})
.finally(() =>
setTimeout(() => clearSecondaryProgressData(), TIMEOUT)
);
}
});
};
// getProgress().then((res) => {
// const deleteProgress = res.find((x) => x.id === id);
// if (deleteProgress && deleteProgress.progress !== 100) {
// setSecondaryProgressBarData({
// icon: "trash",
// visible: true,
// percent: deleteProgress.progress,
// label: translations.deleteOperation,
// alert: false,
// });
// setTimeout(
// () => this.loopDeleteProgress(id, folderId, translations),
// 1000
// );
// } else {
// setSecondaryProgressBarData({
// icon: "trash",
// visible: true,
// percent: 100,
// label: translations.deleteOperation,
// alert: false,
// });
// fetchFiles(folderId, filter, true, true)
// .catch((err) => {
// setSecondaryProgressBarData({
// visible: true,
// alert: true,
// });
// setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
// })
// .finally(() =>
// setTimeout(() => clearSecondaryProgressData(), TIMEOUT)
// );
// }
// });
// };
lockFileAction = (id, locked) => {
const { setFile } = this.filesStore;
@ -588,8 +570,8 @@ class FilesActionStore {
return markAsRead(folderIds, fileId)
.then((res) => {
const id = res[0] && res[0].id ? res[0].id : null;
this.loopFilesOperations(id);
//const id = res[0] && res[0].id ? res[0].id : null;
//this.loopFilesOperations(id);
})
.then(() => item && this.setNewBadgeCount(item))
.catch((err) => toastr.error(err));

View File

@ -767,7 +767,10 @@ class UploadDataStore {
if (res[0]?.error) return Promise.reject(res[0].error);
const data = res[0] ? res[0] : null;
return this.loopFilesOperations(data, destFolderId, true);
const pbData = { icon: "duplicate" };
return this.loopFilesOperations(data, pbData, () =>
this.moveToCopyToCB(destFolderId, pbData, true)
);
})
.catch((err) => {
setSecondaryProgressBarData({
@ -802,7 +805,10 @@ class UploadDataStore {
)
.then((res) => {
const data = res[0] ? res[0] : null;
return this.loopFilesOperations(data, destFolderId, false);
const pbData = { icon: "move" };
return this.loopFilesOperations(data, pbData, () =>
this.moveToCopyToCB(destFolderId, pbData, false)
);
})
.catch((err) => {
setSecondaryProgressBarData({
@ -853,9 +859,8 @@ class UploadDataStore {
);
};
loopFilesOperations = async (data, destFolderId, isCopy) => {
loopFilesOperations = async (data, pbData, operationCB) => {
const label = this.secondaryProgressDataStore.label;
const treeFolders = this.treeFoldersStore.treeFolders;
const {
clearSecondaryProgressData,
@ -875,8 +880,8 @@ class UploadDataStore {
progress = item ? item.progress : 100;
setSecondaryProgressBarData({
icon: isCopy ? "duplicate" : "move",
label,
icon: pbData.icon,
label: pbData.label || label,
percent: progress,
visible: true,
alert: false,
@ -886,13 +891,25 @@ class UploadDataStore {
}
setSecondaryProgressBarData({
icon: isCopy ? "duplicate" : "move",
label,
icon: pbData.icon,
label: pbData.label || label,
percent: 100,
visible: true,
alert: false,
});
operationCB();
};
moveToCopyToCB = (destFolderId, pbData, isCopy) => {
const { treeFolders, setTreeFolders } = this.treeFoldersStore;
const { fetchFiles, filter } = this.filesStore;
const {
clearSecondaryProgressData,
setSecondaryProgressBarData,
label,
} = this.secondaryProgressDataStore;
getFolder(destFolderId).then((data) => {
let newTreeFolders = treeFolders;
let path = data.pathParts.slice(0);
@ -901,39 +918,34 @@ class UploadDataStore {
loopTreeFolders(path, newTreeFolders, folders, foldersCount);
if (!isCopy || destFolderId === this.selectedFolderStore.id) {
this.filesStore
.fetchFiles(
this.selectedFolderStore.id,
this.filesStore.filter,
true,
true
)
.finally(() => {
fetchFiles(this.selectedFolderStore.id, filter, true, true).finally(
() => {
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
});
}
);
} else {
setSecondaryProgressBarData({
icon: "duplicate",
label,
icon: pbData.icon,
label: pbData.label || label,
percent: 100,
visible: true,
alert: false,
});
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
this.treeFoldersStore.setTreeFolders(newTreeFolders);
setTreeFolders(newTreeFolders);
}
});
};
getOperationProgress = async (id) => {
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
setTimeout(async () => {
try {
getProgress().then((res) => {
await getProgress().then((res) => {
const currentItem = res.find((x) => x.id === id);
if (currentItem?.error) {
return reject(currentItem.error);
reject(currentItem.error);
}
resolve(currentItem);
});