Merge branch 'release/rc-v1.2.0' into feature/advanced-security
# Conflicts: # packages/client/src/store/FilesStore.js
This commit is contained in:
commit
4b1f4b1d4c
@ -19,7 +19,6 @@ const PureSettingsItem = ({
|
||||
setExpandSettingsTree,
|
||||
setSelectedFolder,
|
||||
history,
|
||||
setIsLoading,
|
||||
t,
|
||||
showText,
|
||||
toggleArticleOpen,
|
||||
@ -27,10 +26,8 @@ const PureSettingsItem = ({
|
||||
const { setting } = match.params;
|
||||
|
||||
React.useEffect(() => {
|
||||
setIsLoading(true);
|
||||
setSelectedNode([setting]);
|
||||
setIsLoading(false);
|
||||
}, [setting, setIsLoading, setSelectedNode]);
|
||||
}, [setting, setSelectedNode]);
|
||||
|
||||
React.useEffect(() => {
|
||||
if (setting && !expandedSetting) setExpandSettingsTree(["settings"]);
|
||||
@ -73,20 +70,13 @@ const SettingsItem = withTranslation(["FilesSettings", "Common"])(
|
||||
);
|
||||
|
||||
export default inject(
|
||||
({
|
||||
auth,
|
||||
filesStore,
|
||||
settingsStore,
|
||||
treeFoldersStore,
|
||||
selectedFolderStore,
|
||||
}) => {
|
||||
const { setIsLoading } = filesStore;
|
||||
({ auth, settingsStore, treeFoldersStore, selectedFolderStore }) => {
|
||||
const { setSelectedFolder } = selectedFolderStore;
|
||||
const { setSelectedNode } = treeFoldersStore;
|
||||
const { expandedSetting, setExpandSettingsTree } = settingsStore;
|
||||
return {
|
||||
expandedSetting,
|
||||
setIsLoading,
|
||||
|
||||
setSelectedFolder,
|
||||
setSelectedNode,
|
||||
setExpandSettingsTree,
|
||||
|
@ -101,13 +101,13 @@ const CreateEvent = ({
|
||||
setStartValue(newValue);
|
||||
}
|
||||
|
||||
// let tab =
|
||||
// !isDesktop && extension && open
|
||||
// ? window.open(
|
||||
// combineUrl(AppServerConfig.proxyURL, config.homepage, `/doceditor`),
|
||||
// "_blank"
|
||||
// )
|
||||
// : null;
|
||||
let tab =
|
||||
!isDesktop && extension && open
|
||||
? window.open(
|
||||
combineUrl(AppServerConfig.proxyURL, config.homepage, `/doceditor`),
|
||||
"_blank"
|
||||
)
|
||||
: null;
|
||||
|
||||
if (!extension) {
|
||||
createFolder(parentId, newValue)
|
||||
@ -135,7 +135,7 @@ const CreateEvent = ({
|
||||
createdFileId = file.id;
|
||||
addActiveItems([file.id]);
|
||||
|
||||
open && openDocEditor(file.id, file.providerKey, null);
|
||||
open && openDocEditor(file.id, file.providerKey, tab);
|
||||
})
|
||||
.then(() => editCompleteAction(item, type))
|
||||
.catch((err) => {
|
||||
@ -185,7 +185,7 @@ const CreateEvent = ({
|
||||
setCreatedItem({ id: createdFileId, type: "file" });
|
||||
addActiveItems([file.id]);
|
||||
|
||||
return open && openDocEditor(file.id, file.providerKey, null);
|
||||
return open && openDocEditor(file.id, file.providerKey, tab);
|
||||
})
|
||||
.then(() => editCompleteAction(item, type))
|
||||
.catch((e) => toastr.error(e))
|
||||
@ -216,12 +216,12 @@ const CreateEvent = ({
|
||||
true,
|
||||
false
|
||||
).then(
|
||||
() => open && openDocEditor(file.id, file.providerKey, null)
|
||||
() => open && openDocEditor(file.id, file.providerKey, tab)
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
return open && openDocEditor(file.id, file.providerKey, null);
|
||||
return open && openDocEditor(file.id, file.providerKey, tab);
|
||||
})
|
||||
.then(() => editCompleteAction(item, type))
|
||||
.catch((e) => toastr.error(e))
|
||||
|
@ -263,6 +263,8 @@ class ContextOptionsStore {
|
||||
};
|
||||
|
||||
gotoDocEditor = (preview = false, item) => {
|
||||
const { isDesktopClient } = this.authStore.settingsStore;
|
||||
|
||||
const { id, providerKey, fileExst } = item;
|
||||
|
||||
const urlFormation = preview
|
||||
@ -274,13 +276,9 @@ class ContextOptionsStore {
|
||||
: null;
|
||||
|
||||
let tab =
|
||||
!this.authStore.isDesktopClient && fileExst
|
||||
!isDesktopClient && fileExst
|
||||
? window.open(
|
||||
combineUrl(
|
||||
AppServerConfig.proxyURL,
|
||||
config.homepage,
|
||||
`/doceditor?fileId=${id}`
|
||||
),
|
||||
combineUrl(AppServerConfig.proxyURL, config.homepage, `/doceditor`),
|
||||
"_blank"
|
||||
)
|
||||
: null;
|
||||
|
@ -277,6 +277,7 @@ class FilesActionStore {
|
||||
this.isMediaOpen();
|
||||
|
||||
try {
|
||||
this.filesStore.setOperationAction(true);
|
||||
await removeFiles(folderIds, fileIds, deleteAfter, immediately)
|
||||
.then(async (res) => {
|
||||
if (res[0]?.error) return Promise.reject(res[0].error);
|
||||
@ -330,6 +331,8 @@ class FilesActionStore {
|
||||
});
|
||||
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
|
||||
return toastr.error(err.message ? err.message : err);
|
||||
} finally {
|
||||
this.filesStore.setOperationAction(false);
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -675,24 +678,28 @@ class FilesActionStore {
|
||||
label: translations?.deleteOperation,
|
||||
};
|
||||
|
||||
this.filesStore.setOperationAction(true);
|
||||
|
||||
if (isFile) {
|
||||
addActiveItems([itemId]);
|
||||
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);
|
||||
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);
|
||||
|
||||
if (withPaging) {
|
||||
this.updateCurrentFolder([itemId]);
|
||||
toastr.success(translations.successRemoveFile);
|
||||
} else {
|
||||
this.updateFilesAfterDelete();
|
||||
this.filesStore.removeFiles([itemId], null, () =>
|
||||
toastr.success(translations.successRemoveFile)
|
||||
);
|
||||
}
|
||||
});
|
||||
if (withPaging) {
|
||||
this.updateCurrentFolder([itemId]);
|
||||
toastr.success(translations.successRemoveFile);
|
||||
} else {
|
||||
this.updateFilesAfterDelete();
|
||||
this.filesStore.removeFiles([itemId], null, () =>
|
||||
toastr.success(translations.successRemoveFile)
|
||||
);
|
||||
}
|
||||
})
|
||||
.finally(() => this.filesStore.setOperationAction(false));
|
||||
} else if (isRoom) {
|
||||
const items = Array.isArray(itemId) ? itemId : [itemId];
|
||||
addActiveItems(null, items);
|
||||
@ -715,23 +722,25 @@ class FilesActionStore {
|
||||
);
|
||||
} else {
|
||||
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);
|
||||
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);
|
||||
|
||||
if (withPaging) {
|
||||
this.updateCurrentFolder(null, [itemId]);
|
||||
toastr.success(translations.successRemoveFolder);
|
||||
} else {
|
||||
this.updateFilesAfterDelete([itemId]);
|
||||
this.filesStore.removeFiles(null, [itemId], () =>
|
||||
toastr.success(translations.successRemoveFolder)
|
||||
);
|
||||
}
|
||||
if (withPaging) {
|
||||
this.updateCurrentFolder(null, [itemId]);
|
||||
toastr.success(translations.successRemoveFolder);
|
||||
} else {
|
||||
this.updateFilesAfterDelete([itemId]);
|
||||
this.filesStore.removeFiles(null, [itemId], () =>
|
||||
toastr.success(translations.successRemoveFolder)
|
||||
);
|
||||
}
|
||||
|
||||
getIsEmptyTrash();
|
||||
});
|
||||
getIsEmptyTrash();
|
||||
})
|
||||
.finally(() => this.filesStore.setOperationAction(false));
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -26,6 +26,7 @@ import {
|
||||
import { isDesktop } from "@docspace/components/utils/device";
|
||||
import { getContextMenuKeysByType } from "SRC_DIR/helpers/plugins";
|
||||
import { PluginContextMenuItemType } from "SRC_DIR/helpers/plugins/constants";
|
||||
import debounce from "lodash.debounce";
|
||||
|
||||
const { FilesFilter, RoomsFilter } = api;
|
||||
const storageViewAs = localStorage.getItem("viewAs");
|
||||
@ -97,6 +98,9 @@ class FilesStore {
|
||||
isEmptyPage = false;
|
||||
isLoadedFetchFiles = false;
|
||||
|
||||
tempActionFilesIds = [];
|
||||
operationAction = false;
|
||||
|
||||
constructor(
|
||||
authStore,
|
||||
selectedFolderStore,
|
||||
@ -122,7 +126,7 @@ class FilesStore {
|
||||
socketHelper.on("s:modify-folder", async (opt) => {
|
||||
console.log("[WS] s:modify-folder", opt);
|
||||
|
||||
if (this.isLoading) return;
|
||||
if (this.isLoading || this.operationAction) return;
|
||||
|
||||
switch (opt?.cmd) {
|
||||
case "create":
|
||||
@ -197,15 +201,23 @@ class FilesStore {
|
||||
this.files[foundIndex].title
|
||||
);
|
||||
|
||||
this.setFiles(
|
||||
this.files.filter((_, index) => {
|
||||
return index !== foundIndex;
|
||||
})
|
||||
);
|
||||
// this.setFiles(
|
||||
// this.files.filter((_, index) => {
|
||||
// return index !== foundIndex;
|
||||
// })
|
||||
// );
|
||||
|
||||
const newFilter = this.filter.clone();
|
||||
newFilter.total -= 1;
|
||||
this.setFilter(newFilter);
|
||||
// const newFilter = this.filter.clone();
|
||||
// newFilter.total -= 1;
|
||||
// this.setFilter(newFilter);
|
||||
|
||||
const tempActionFilesIds = JSON.parse(
|
||||
JSON.stringify(this.tempActionFilesIds)
|
||||
);
|
||||
tempActionFilesIds.push(this.files[foundIndex].id);
|
||||
|
||||
this.setTempActionFilesIds(tempActionFilesIds);
|
||||
this.debounceRemoveFiles();
|
||||
|
||||
// Hide pagination when deleting files
|
||||
runInAction(() => {
|
||||
@ -233,7 +245,10 @@ class FilesStore {
|
||||
// `selected folder id ${this.selectedFolderStore.id} an changed folder id ${id}`
|
||||
//);
|
||||
|
||||
if (this.selectedFolderStore.id == id) {
|
||||
if (
|
||||
this.selectedFolderStore.id == id &&
|
||||
this.authStore.settingsStore.withPaging //TODO: no longer deletes the folder in other tabs
|
||||
) {
|
||||
console.log("[WS] refresh-folder", id);
|
||||
this.fetchFiles(id, this.filter);
|
||||
}
|
||||
@ -311,6 +326,18 @@ class FilesStore {
|
||||
});
|
||||
}
|
||||
|
||||
debounceRemoveFiles = debounce(() => {
|
||||
this.removeFiles(this.tempActionFilesIds);
|
||||
}, 1000);
|
||||
|
||||
setTempActionFilesIds = (tempActionFilesIds) => {
|
||||
this.tempActionFilesIds = tempActionFilesIds;
|
||||
};
|
||||
|
||||
setOperationAction = (operationAction) => {
|
||||
this.operationAction = operationAction;
|
||||
};
|
||||
|
||||
updateSelectionStatus = (id, status, isEditing) => {
|
||||
const index = this.selection.findIndex((x) => x.id === id);
|
||||
|
||||
@ -1795,9 +1822,13 @@ class FilesStore {
|
||||
|
||||
showToast && showToast();
|
||||
})
|
||||
.catch(() => {
|
||||
.catch((err) => {
|
||||
toastr.error(err);
|
||||
console.log("Need page reload");
|
||||
})
|
||||
.finally(() => {
|
||||
this.setOperationAction(false);
|
||||
this.setTempActionFilesIds([]);
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -431,7 +431,7 @@ class UploadDataStore {
|
||||
}
|
||||
});
|
||||
|
||||
// storeOriginalFiles && this.refreshFiles(file);
|
||||
storeOriginalFiles && this.refreshFiles(file);
|
||||
|
||||
if (fileInfo && fileInfo !== "password") {
|
||||
file.fileInfo = fileInfo;
|
||||
@ -653,6 +653,8 @@ class UploadDataStore {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.filesStore.setOperationAction(false);
|
||||
};
|
||||
|
||||
const isFiltered =
|
||||
@ -694,6 +696,7 @@ class UploadDataStore {
|
||||
file,
|
||||
path
|
||||
) => {
|
||||
this.filesStore.setOperationAction(true);
|
||||
const length = requestsDataArray.length;
|
||||
for (let index = 0; index < length; index++) {
|
||||
if (
|
||||
@ -769,9 +772,7 @@ class UploadDataStore {
|
||||
return Promise.resolve();
|
||||
} else {
|
||||
if (currentFile.action === "uploaded") {
|
||||
if (currentFile?.path?.length > 1) {
|
||||
this.refreshFiles(currentFile);
|
||||
}
|
||||
this.refreshFiles(currentFile);
|
||||
}
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user