Web: Files: added tree menu update after folder deletion
This commit is contained in:
parent
c09a637758
commit
ad52d25d28
@ -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
|
|
||||||
);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user