Fix Bug 62465 - Files.Trash. Ability to repeatedly press the Empty trash button.

This commit is contained in:
Alexey Safronov 2023-05-12 17:54:59 +04:00
parent cff0bed424
commit dc0fc261e2
2 changed files with 120 additions and 53 deletions

View File

@ -172,6 +172,7 @@ const Items = ({
firstLoad,
deleteAction,
startDrag,
emptyTrashInProgress,
}) => {
useEffect(() => {
data.forEach((elem) => {
@ -340,7 +341,9 @@ const Items = ({
(data) => {
const items = data.map((item, index) => {
const isTrash = item.rootFolderType === FolderType.TRASH;
const showBadge = item.newItems
const showBadge = emptyTrashInProgress
? false
: item.newItems
? item.newItems > 0 && true
: isTrash && !trashIsEmpty;
const labelBadge = showBadge ? item.newItems : null;
@ -399,6 +402,7 @@ const Items = ({
isAdmin,
isVisitor,
firstLoad,
emptyTrashInProgress,
]
);
@ -449,6 +453,7 @@ export default inject(
moveDragItems,
uploadEmptyFolders,
deleteAction,
emptyTrashInProgress,
} = filesActionsStore;
const { setEmptyTrashDialogVisible } = dialogsStore;
@ -481,6 +486,7 @@ export default inject(
rootFolderType,
firstLoad,
startDrag,
emptyTrashInProgress,
};
}
)(withTranslation(["Files", "Common", "Translations"])(observer(Items)));

View File

@ -58,6 +58,7 @@ class FilesActionStore {
isBulkDownload = false;
isLoadedSearchFiles = false;
isGroupMenuBlocked = false;
emptyTrashInProgress = false;
constructor(
authStore,
@ -94,8 +95,9 @@ class FilesActionStore {
};
updateCurrentFolder = (fileIds, folderIds, clearSelection, operationId) => {
const { clearSecondaryProgressData } =
this.uploadDataStore.secondaryProgressDataStore;
const {
clearSecondaryProgressData,
} = this.uploadDataStore.secondaryProgressDataStore;
const {
filter,
@ -106,8 +108,11 @@ class FilesActionStore {
resetFilterPage,
} = this.filesStore;
const { isRoomsFolder, isArchiveFolder, isArchiveFolderRoot } =
this.treeFoldersStore;
const {
isRoomsFolder,
isArchiveFolder,
isArchiveFolderRoot,
} = this.treeFoldersStore;
let newFilter;
@ -204,8 +209,10 @@ class FilesActionStore {
//console.log("uploadEmptyFolders", emptyFolders, folderId);
const { secondaryProgressDataStore } = this.uploadDataStore;
const { setSecondaryProgressBarData, clearSecondaryProgressData } =
secondaryProgressDataStore;
const {
setSecondaryProgressBarData,
clearSecondaryProgressData,
} = secondaryProgressDataStore;
const operationId = uniqueid("operation_");
@ -230,8 +237,9 @@ class FilesActionStore {
updateFilesAfterDelete = (operationId) => {
const { setSelected } = this.filesStore;
const { clearSecondaryProgressData } =
this.uploadDataStore.secondaryProgressDataStore;
const {
clearSecondaryProgressData,
} = this.uploadDataStore.secondaryProgressDataStore;
setSelected("close");
@ -245,12 +253,19 @@ class FilesActionStore {
withoutDialog = false
) => {
const { isRecycleBinFolder, isPrivacyFolder } = this.treeFoldersStore;
const { addActiveItems, getIsEmptyTrash, bufferSelection } =
this.filesStore;
const { secondaryProgressDataStore, clearActiveOperations } =
this.uploadDataStore;
const { setSecondaryProgressBarData, clearSecondaryProgressData } =
secondaryProgressDataStore;
const {
addActiveItems,
getIsEmptyTrash,
bufferSelection,
} = this.filesStore;
const {
secondaryProgressDataStore,
clearActiveOperations,
} = this.uploadDataStore;
const {
setSecondaryProgressBarData,
clearSecondaryProgressData,
} = secondaryProgressDataStore;
const { withPaging } = this.authStore.settingsStore;
const selection = newSelection
@ -375,17 +390,24 @@ class FilesActionStore {
loopFilesOperations,
clearActiveOperations,
} = this.uploadDataStore;
const { setSecondaryProgressBarData, clearSecondaryProgressData } =
secondaryProgressDataStore;
const {
setSecondaryProgressBarData,
clearSecondaryProgressData,
} = secondaryProgressDataStore;
const { isRecycleBinFolder } = this.treeFoldersStore;
const { addActiveItems, files, folders, getIsEmptyTrash } = this.filesStore;
const fileIds = files.map((f) => f.id);
const folderIds = folders.map((f) => f.id);
if (isRecycleBinFolder) addActiveItems(fileIds, folderIds);
if (isRecycleBinFolder) {
addActiveItems(fileIds, folderIds);
}
const operationId = uniqueid("operation_");
this.emptyTrashInProgress = true;
setSecondaryProgressBarData({
icon: "trash",
visible: true,
@ -419,6 +441,8 @@ class FilesActionStore {
});
setTimeout(() => clearSecondaryProgressData(operationId), TIMEOUT);
return toastr.error(err.message ? err.message : err);
} finally {
this.emptyTrashInProgress = false;
}
};
@ -428,8 +452,10 @@ class FilesActionStore {
loopFilesOperations,
clearActiveOperations,
} = this.uploadDataStore;
const { setSecondaryProgressBarData, clearSecondaryProgressData } =
secondaryProgressDataStore;
const {
setSecondaryProgressBarData,
clearSecondaryProgressData,
} = secondaryProgressDataStore;
const { isArchiveFolder } = this.treeFoldersStore;
const { addActiveItems, roomsForDelete } = this.filesStore;
@ -476,10 +502,14 @@ class FilesActionStore {
};
downloadFiles = async (fileConvertIds, folderIds, translations) => {
const { clearActiveOperations, secondaryProgressDataStore } =
this.uploadDataStore;
const { setSecondaryProgressBarData, clearSecondaryProgressData } =
secondaryProgressDataStore;
const {
clearActiveOperations,
secondaryProgressDataStore,
} = this.uploadDataStore;
const {
setSecondaryProgressBarData,
clearSecondaryProgressData,
} = secondaryProgressDataStore;
const { addActiveItems } = this.filesStore;
const { label } = translations;
@ -673,10 +703,14 @@ class FilesActionStore {
isThirdParty,
isRoom
) => {
const { secondaryProgressDataStore, clearActiveOperations } =
this.uploadDataStore;
const { setSecondaryProgressBarData, clearSecondaryProgressData } =
secondaryProgressDataStore;
const {
secondaryProgressDataStore,
clearActiveOperations,
} = this.uploadDataStore;
const {
setSecondaryProgressBarData,
clearSecondaryProgressData,
} = secondaryProgressDataStore;
if (
this.settingsStore.confirmDelete ||
this.treeFoldersStore.isPrivacyFolder ||
@ -846,8 +880,10 @@ class FilesActionStore {
};
duplicateAction = (item, label) => {
const { setSecondaryProgressBarData, filesCount } =
this.uploadDataStore.secondaryProgressDataStore;
const {
setSecondaryProgressBarData,
filesCount,
} = this.uploadDataStore.secondaryProgressDataStore;
this.setSelectedItems();
@ -1009,14 +1045,22 @@ class FilesActionStore {
const { setSelectedFolder } = this.selectedFolderStore;
const { roomsFolder, isRoomsFolder, archiveRoomsId, myRoomsId } =
this.treeFoldersStore;
const {
roomsFolder,
isRoomsFolder,
archiveRoomsId,
myRoomsId,
} = this.treeFoldersStore;
const { secondaryProgressDataStore, clearActiveOperations } =
this.uploadDataStore;
const {
secondaryProgressDataStore,
clearActiveOperations,
} = this.uploadDataStore;
const { setSecondaryProgressBarData, clearSecondaryProgressData } =
secondaryProgressDataStore;
const {
setSecondaryProgressBarData,
clearSecondaryProgressData,
} = secondaryProgressDataStore;
if (!myRoomsId || !archiveRoomsId) {
console.error("Default categories not found");
@ -1058,8 +1102,10 @@ class FilesActionStore {
console.log(pbData.label, { data, res });
const operationData =
await this.uploadDataStore.loopFilesOperations(data, pbData);
const operationData = await this.uploadDataStore.loopFilesOperations(
data,
pbData
);
if (
!operationData ||
@ -1286,8 +1332,10 @@ class FilesActionStore {
// };
markAsRead = (folderIds, fileIds, item) => {
const { setSecondaryProgressBarData, clearSecondaryProgressData } =
this.uploadDataStore.secondaryProgressDataStore;
const {
setSecondaryProgressBarData,
clearSecondaryProgressData,
} = this.uploadDataStore.secondaryProgressDataStore;
const operationId = uniqueid("operation_");
@ -1417,8 +1465,12 @@ class FilesActionStore {
};
isAvailableOption = (option) => {
const { canConvertSelected, hasSelection, allFilesIsEditing, selection } =
this.filesStore;
const {
canConvertSelected,
hasSelection,
allFilesIsEditing,
selection,
} = this.filesStore;
const { rootFolderType } = this.selectedFolderStore;
@ -1536,11 +1588,15 @@ class FilesActionStore {
};
deleteRoomsAction = async (itemId, translations) => {
const { secondaryProgressDataStore, clearActiveOperations } =
this.uploadDataStore;
const {
secondaryProgressDataStore,
clearActiveOperations,
} = this.uploadDataStore;
const { setSecondaryProgressBarData, clearSecondaryProgressData } =
secondaryProgressDataStore;
const {
setSecondaryProgressBarData,
clearSecondaryProgressData,
} = secondaryProgressDataStore;
const operationId = uniqueid("operation_");
@ -1626,9 +1682,9 @@ class FilesActionStore {
id: "menu-download",
label: t("Common:Download"),
onClick: () =>
this.downloadAction(t("Translations:ArchivingData")).catch(
(err) => toastr.error(err)
),
this.downloadAction(
t("Translations:ArchivingData")
).catch((err) => toastr.error(err)),
iconUrl: DownloadReactSvgUrl,
};
@ -1861,8 +1917,10 @@ class FilesActionStore {
};
getRecycleBinFolderOptions = (itemsCollection, t) => {
const { setEmptyTrashDialogVisible, setMoveToPanelVisible } =
this.dialogsStore;
const {
setEmptyTrashDialogVisible,
setMoveToPanelVisible,
} = this.dialogsStore;
const download = this.getOption("download", t);
const downloadAs = this.getOption("downloadAs", t);
@ -2036,8 +2094,11 @@ class FilesActionStore {
};
moveToRoomsPage = () => {
const { setIsLoading, fetchRooms, setAlreadyFetchingRooms } =
this.filesStore;
const {
setIsLoading,
fetchRooms,
setAlreadyFetchingRooms,
} = this.filesStore;
const categoryType = getCategoryType(location);