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) => { export const presentInArray = (array, search, caseInsensitive = false) => {
let pattern = caseInsensitive ? search.toLowerCase() : search; let pattern = caseInsensitive ? search.toLowerCase() : search;
const result = array.findIndex((item) => item === pattern); const result = array.findIndex((item) => item === pattern);
@ -105,36 +107,38 @@ export const loopTreeFolders = (
foldersCount, foldersCount,
currentFolder currentFolder
) => { ) => {
const newPath = path.slice(); runInAction(() => {
while (newPath.length !== 0) { const newPath = path.slice();
const newItems = item.find((x) => x.id === newPath[0]); while (newPath.length !== 0) {
if (!newItems) { const newItems = item.find((x) => x.id === newPath[0]);
return; if (!newItems) {
}
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;
} }
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, markAsRead,
checkFileConflicts, checkFileConflicts,
removeShareFiles, removeShareFiles,
getSubfolders,
} from "@appserver/common/api/files"; } from "@appserver/common/api/files";
import { ConflictResolveType, FileAction } from "@appserver/common/constants"; import { ConflictResolveType, FileAction } from "@appserver/common/constants";
import { TIMEOUT } from "../helpers/constants"; import { TIMEOUT } from "../helpers/constants";
@ -140,7 +141,7 @@ class FilesActionStore {
alert: false, alert: false,
}); });
setTimeout(() => clearSecondaryProgressData(), TIMEOUT); setTimeout(() => clearSecondaryProgressData(), TIMEOUT);
fetchFiles(this.selectedFolderStore.id, filter); fetchFiles(this.selectedFolderStore.id, filter, true, true);
} }
}) })
.catch((err) => { .catch((err) => {
@ -292,7 +293,7 @@ class FilesActionStore {
if (!selectedItem.fileExst && !selectedItem.contentLength) { if (!selectedItem.fileExst && !selectedItem.contentLength) {
const path = data.selectedFolder.pathParts; const path = data.selectedFolder.pathParts;
const newTreeFolders = treeFolders; const newTreeFolders = treeFolders;
const folders = data.selectedFolder.folders; const folders = await getSubfolders(this.selectedFolderStore.id);
loopTreeFolders(path, newTreeFolders, folders, null, newItem); loopTreeFolders(path, newTreeFolders, folders, null, newItem);
setTreeFolders(newTreeFolders); setTreeFolders(newTreeFolders);
} }

View File

@ -12,6 +12,7 @@ import history from "@appserver/common/history";
import config from "../../package.json"; import config from "../../package.json";
import { combineUrl } from "@appserver/common/utils"; import { combineUrl } from "@appserver/common/utils";
import { updateTempContent } from "@appserver/common/utils"; import { updateTempContent } from "@appserver/common/utils";
import { loopTreeFolders } from "../helpers/files-helpers";
const { FilesFilter } = api; 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(); const filterData = filter ? filter.clone() : FilesFilter.getDefault();
filterData.folder = folderId; filterData.folder = folderId;
const { privacyFolder, setSelectedNode } = this.treeFoldersStore; const {
treeFolders,
privacyFolder,
setSelectedNode,
getSubfolders,
} = this.treeFoldersStore;
setSelectedNode([folderId + ""]); setSelectedNode([folderId + ""]);
const subfolders = withSubfolders ? await getSubfolders(folderId) : [];
if (privacyFolder && privacyFolder.id === +folderId) { if (privacyFolder && privacyFolder.id === +folderId) {
if (!this.settingsStore.isEncryptionSupport) { if (!this.settingsStore.isEncryptionSupport) {
filterData.total = 0; filterData.total = 0;
@ -280,6 +293,15 @@ class FilesStore {
api.files api.files
.getFolder(folderId, filter) .getFolder(folderId, filter)
.then((data) => { .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 = const isPrivacyFolder =
data.current.rootFolderType === FolderType.Privacy; data.current.rootFolderType === FolderType.Privacy;