Web: Files: added tree menu update after folder deletion

This commit is contained in:
Nikita Gopienko 2021-06-15 16:12:15 +03:00
parent c09a637758
commit ad52d25d28
3 changed files with 60 additions and 33 deletions

View File

@ -1,3 +1,5 @@
import { runInAction } from "mobx";
export const presentInArray = (array, search, caseInsensitive = false) => {
let pattern = caseInsensitive ? search.toLowerCase() : search;
const result = array.findIndex((item) => item === pattern);
@ -105,36 +107,38 @@ export const loopTreeFolders = (
foldersCount,
currentFolder
) => {
const newPath = path.slice();
while (newPath.length !== 0) {
const newItems = item.find((x) => x.id === newPath[0]);
if (!newItems) {
return;
}
newPath.shift();
if (newPath.length === 0) {
let foldersLength = newItems.folders ? newItems.folders.length : 0;
if (folders.length > foldersLength) {
addTreeFolder(folders, newItems, foldersCount);
} else if (folders.length < foldersLength) {
removeTreeFolder(folders, newItems, foldersCount);
} else if (
folders.length > 0 &&
newItems.folders.length > 0 &&
currentFolder
) {
renameTreeFolder(folders, newItems, currentFolder);
} else {
runInAction(() => {
const newPath = path.slice();
while (newPath.length !== 0) {
const newItems = item.find((x) => x.id === newPath[0]);
if (!newItems) {
return;
}
return;
newPath.shift();
if (newPath.length === 0) {
let foldersLength = newItems.folders ? newItems.folders.length : 0;
if (folders.length > foldersLength) {
addTreeFolder(folders, newItems, foldersCount);
} else if (folders.length < foldersLength) {
removeTreeFolder(folders, newItems, foldersCount);
} else if (
folders.length > 0 &&
newItems.folders.length > 0 &&
currentFolder
) {
renameTreeFolder(folders, newItems, currentFolder);
} else {
return;
}
return;
}
loopTreeFolders(
newPath,
newItems.folders,
folders,
foldersCount,
currentFolder
);
}
loopTreeFolders(
newPath,
newItems.folders,
folders,
foldersCount,
currentFolder
);
}
});
};

View File

@ -11,6 +11,7 @@ import {
markAsRead,
checkFileConflicts,
removeShareFiles,
getSubfolders,
} from "@appserver/common/api/files";
import { ConflictResolveType, FileAction } from "@appserver/common/constants";
import { TIMEOUT } from "../helpers/constants";
@ -140,7 +141,7 @@ class FilesActionStore {
alert: false,
});
setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
fetchFiles(this.selectedFolderStore.id, filter);
fetchFiles(this.selectedFolderStore.id, filter, true, true);
}
})
.catch((err) => {
@ -292,7 +293,7 @@ class FilesActionStore {
if (!selectedItem.fileExst && !selectedItem.contentLength) {
const path = data.selectedFolder.pathParts;
const newTreeFolders = treeFolders;
const folders = data.selectedFolder.folders;
const folders = await getSubfolders(this.selectedFolderStore.id);
loopTreeFolders(path, newTreeFolders, folders, null, newItem);
setTreeFolders(newTreeFolders);
}

View File

@ -12,6 +12,7 @@ import history from "@appserver/common/history";
import config from "../../package.json";
import { combineUrl } from "@appserver/common/utils";
import { updateTempContent } from "@appserver/common/utils";
import { loopTreeFolders } from "../helpers/files-helpers";
const { FilesFilter } = api;
@ -247,12 +248,24 @@ class FilesStore {
);
};
fetchFiles = (folderId, filter, clearFilter = true) => {
fetchFiles = async (
folderId,
filter,
clearFilter = true,
withSubfolders = false
) => {
const filterData = filter ? filter.clone() : FilesFilter.getDefault();
filterData.folder = folderId;
const { privacyFolder, setSelectedNode } = this.treeFoldersStore;
const {
treeFolders,
privacyFolder,
setSelectedNode,
getSubfolders,
} = this.treeFoldersStore;
setSelectedNode([folderId + ""]);
const subfolders = withSubfolders ? await getSubfolders(folderId) : [];
if (privacyFolder && privacyFolder.id === +folderId) {
if (!this.settingsStore.isEncryptionSupport) {
filterData.total = 0;
@ -280,6 +293,15 @@ class FilesStore {
api.files
.getFolder(folderId, filter)
.then((data) => {
const isRecycleBinFolder =
data.current.rootFolderType === FolderType.TRASH;
if (!isRecycleBinFolder && withSubfolders) {
const path = data.pathParts.slice(0);
const foldersCount = data.current.foldersCount;
loopTreeFolders(path, treeFolders, subfolders, foldersCount);
}
const isPrivacyFolder =
data.current.rootFolderType === FolderType.Privacy;