web: files: fix FilesStore accesses

This commit is contained in:
Vladislav Makhov 2021-04-01 11:58:22 +03:00
parent e9c62be0ce
commit 07c457882a
4 changed files with 124 additions and 129 deletions

View File

@ -7,17 +7,18 @@ import PrivateRoute from "@appserver/common/components/PrivateRoute";
import AppLoader from "@appserver/common/components/AppLoader";
import toastr from "studio/toastr";
import { combineUrl, updateTempContent } from "@appserver/common/utils";
import initFilesStore from "./store/InitFilesStore";
import filesStore from "./store/FilesStore";
import settingsStore from "./store/SettingsStore";
import mediaViewerDataStore from "./store/MediaViewerDataStore";
import formatsStore from "./store/FormatsStore";
import versionHistoryStore from "./store/VersionHistoryStore";
import uploadDataStore from "./store/UploadDataStore";
import dialogsStore from "./store/DialogsStore";
import treeFoldersStore from "./store/TreeFoldersStore";
import selectedFolderStore from "./store/SelectedFolderStore";
import filesActionsStore from "./store/FilesActionsStore";
import stores from "./store/index";
// import initFilesStore from "./store/InitFilesStore";
// import filesStore from "./store/FilesStore";
// import settingsStore from "./store/SettingsStore";
// import mediaViewerDataStore from "./store/MediaViewerDataStore";
// import formatsStore from "./store/FormatsStore";
// import versionHistoryStore from "./store/VersionHistoryStore";
// import uploadDataStore from "./store/UploadDataStore";
// import dialogsStore from "./store/DialogsStore";
// import treeFoldersStore from "./store/TreeFoldersStore";
// import selectedFolderStore from "./store/SelectedFolderStore";
// import filesActionsStore from "./store/FilesActionsStore";
import "./custom.scss";
import i18n from "./i18n";
import { I18nextProvider } from "react-i18next";
@ -144,19 +145,7 @@ const Files = inject(({ auth, initFilesStore }) => {
})(observer(FilesContent));
export default () => (
<FilesProvider
initFilesStore={initFilesStore}
filesStore={filesStore}
settingsStore={settingsStore}
mediaViewerDataStore={mediaViewerDataStore}
formatsStore={formatsStore}
versionHistoryStore={versionHistoryStore}
uploadDataStore={uploadDataStore}
dialogsStore={dialogsStore}
treeFoldersStore={treeFoldersStore}
selectedFolderStore={selectedFolderStore}
filesActionsStore={filesActionsStore}
>
<FilesProvider {...stores}>
<I18nextProvider i18n={i18n}>
<Files />
</I18nextProvider>

View File

@ -25,4 +25,4 @@ class FileActionStore {
};
}
export default FileActionStore;
export default new FileActionStore();

View File

@ -1,5 +1,4 @@
import { makeObservable, action, observable, computed } from "mobx";
import store from "studio/store";
import { makeAutoObservable } from "mobx";
import api from "@appserver/common/api";
import {
FolderType,
@ -9,18 +8,15 @@ import {
AppServerConfig,
} from "@appserver/common/constants";
import history from "@appserver/common/history";
import FileActionStore from "./FileActionStore";
import selectedFolderStore from "./SelectedFolderStore";
import formatsStore from "./FormatsStore";
import treeFoldersStore from "./TreeFoldersStore";
import { createTreeFolders } from "../helpers/files-helpers";
import config from "../../package.json";
import { combineUrl } from "@appserver/common/utils";
const { FilesFilter } = api;
const { settingsStore, userStore, isAdmin } = store.auth;
const {
iconFormatsStore,
mediaViewersFormatsStore,
@ -40,10 +36,14 @@ const {
canFormFillingDocs,
canWebFilterEditing,
} = docserviceStore;
const { setExpandedKeys, setSelectedNode } = treeFoldersStore;
class FilesStore {
fileActionStore = null;
authStore;
settingsStore;
userStore;
fileActionStore;
selectedFolderStore;
treeFoldersStore;
firstLoad = true;
files = [];
@ -53,63 +53,21 @@ class FilesStore {
filter = FilesFilter.getDefault(); //TODO: FILTER
newRowItems = [];
constructor() {
makeObservable(this, {
fileActionStore: observable,
firstLoad: observable,
files: observable,
folders: observable,
selected: observable,
filter: observable, //TODO: FILTER
selection: observable,
newRowItems: observable,
filesList: computed,
sortedFiles: computed,
canCreate: computed,
isHeaderVisible: computed,
isHeaderIndeterminate: computed,
isHeaderChecked: computed,
userAccess: computed,
isAccessedSelected: computed,
isOnlyFoldersSelected: computed,
isThirdPartySelection: computed,
isWebEditSelected: computed,
selectionTitle: computed,
currentFilesCount: computed,
canShare: computed,
setFirstLoad: action,
setFiles: action,
setFolders: action,
setSelected: action,
setFilesFilter: action, //TODO: FILTER
setSelection: action,
setNewRowItems: action,
setFilesOwner: action,
fetchFiles: action,
selectFile: action,
deselectFile: action,
addFileToRecentlyViewed: action,
createFile: action,
createFolder: action,
updateFile: action,
getAccessOption: action,
getExternalAccessOption: action,
setSelections: action,
getShareUsers: action,
setShareFiles: action,
markItemAsFavorite: action,
removeItemFromFavorite: action,
fetchFavoritesFolder: action,
getFileInfo: action,
setFolder: action,
setFile: action,
});
this.fileActionStore = new FileActionStore();
constructor(
authStore,
settingsStore,
userStore,
fileActionStore,
selectedFolderStore,
treeFoldersStore
) {
makeAutoObservable(this);
this.authStore = authStore;
this.settingsStore = settingsStore;
this.userStore = userStore;
this.fileActionStore = fileActionStore;
this.selectedFolderStore = selectedFolderStore;
this.treeFoldersStore = treeFoldersStore;
}
setFirstLoad = (firstLoad) => {
@ -213,11 +171,16 @@ class FilesStore {
fetchFiles = (folderId, filter, clearFilter = true) => {
const filterData = filter ? filter.clone() : FilesFilter.getDefault();
filterData.folder = folderId;
const { privacyFolder, expandedKeys } = treeFoldersStore;
const {
privacyFolder,
expandedKeys,
setExpandedKeys,
setSelectedNode,
} = this.treeFoldersStore;
setSelectedNode([folderId + ""]);
console.log(this.settingsStore.isEncryptionSupport);
if (privacyFolder && privacyFolder.id === +folderId) {
if (!store.auth.settingsStore.isEncryptionSupport) {
if (!this.settingsStore.isEncryptionSupport) {
const newExpandedKeys = createTreeFolders(
privacyFolder.pathParts,
expandedKeys
@ -231,7 +194,7 @@ class FilesStore {
this.fileActionStore.setAction({ type: null });
this.setSelected("close");
selectedFolderStore.setSelectedFolder({
this.selectedFolderStore.setSelectedFolder({
folders: [],
...privacyFolder,
pathParts: privacyFolder.pathParts,
@ -251,12 +214,12 @@ class FilesStore {
filterData.total = data.total;
this.setFilesFilter(filterData); //TODO: FILTER
this.setFolders(
isPrivacyFolder && !store.auth.settingsStore.isEncryptionSupport
isPrivacyFolder && !this.settingsStore.isEncryptionSupport
? []
: data.folders
);
this.setFiles(
isPrivacyFolder && !store.auth.settingsStore.isEncryptionSupport
isPrivacyFolder && !this.settingsStore.isEncryptionSupport
? []
: data.files
);
@ -265,7 +228,7 @@ class FilesStore {
this.setSelected("close");
}
selectedFolderStore.setSelectedFolder({
this.selectedFolderStore.setSelectedFolder({
folders: data.folders,
...data.current,
pathParts: data.pathParts,
@ -273,7 +236,7 @@ class FilesStore {
});
const selectedFolder = {
selectedFolder: { ...selectedFolderStore },
selectedFolder: { ...this.selectedFolderStore },
};
return Promise.resolve(selectedFolder);
});
@ -302,13 +265,14 @@ class FilesStore {
getFilesContextOptions = (item, canOpenPlayer) => {
const options = [];
const isVisitor = (userStore.user && userStore.user.isVisitor) || false;
const isVisitor =
(this.userStore.user && this.userStore.user.isVisitor) || false;
const isFile = !!item.fileExst;
const isFavorite = item.fileStatus === 32;
const isFullAccess = item.access < 2;
const isThirdPartyFolder =
item.providerKey && selectedFolderStore.isRootFolder;
item.providerKey && this.selectedFolderStore.isRootFolder;
if (item.id <= 0) return [];
@ -316,7 +280,7 @@ class FilesStore {
isRecycleBinFolder,
isPrivacyFolder,
isRecentFolder,
} = treeFoldersStore;
} = this.treeFoldersStore;
if (isRecycleBinFolder) {
options.push("download");
@ -417,7 +381,7 @@ class FilesStore {
};
addFileToRecentlyViewed = (fileId) => {
if (treeFoldersStore.isPrivacyFolder) return Promise.resolve();
if (this.treeFoldersStore.isPrivacyFolder) return Promise.resolve();
return api.files.addFileToRecentlyViewed(fileId);
};
@ -454,7 +418,7 @@ class FilesStore {
};
getFilesCount = () => {
const { filesCount, foldersCount } = selectedFolderStore;
const { filesCount, foldersCount } = this.selectedFolderStore;
return filesCount + this.folders ? this.folders.length : foldersCount;
};
@ -465,15 +429,16 @@ class FilesStore {
};
canShareOwnerChange = (item) => {
const userId = userStore.user.id;
const userId = this.userStore.user.id;
const isCommonFolder =
treeFoldersStore.commonFolder &&
selectedFolderStore.pathParts &&
treeFoldersStore.commonFolder.id === selectedFolderStore.pathParts[0];
this.treeFoldersStore.commonFolder &&
this.selectedFolderStore.pathParts &&
this.treeFoldersStore.commonFolder.id ===
this.selectedFolderStore.pathParts[0];
if (item.providerKey || !isCommonFolder) {
return false;
} else if (isAdmin) {
} else if (this.authStore.isAdmin) {
return true;
} else if (item.createdBy.id === userId) {
return true;
@ -483,8 +448,9 @@ class FilesStore {
};
get canShare() {
const folderType = selectedFolderStore.rootFolderType;
const isVisitor = (userStore.user && userStore.user.isVisitor) || false;
const folderType = this.selectedFolderStore.rootFolderType;
const isVisitor =
(this.userStore.user && this.userStore.user.isVisitor) || false;
if (isVisitor) {
return false;
@ -496,7 +462,7 @@ class FilesStore {
case FolderType.SHARE:
return false;
case FolderType.COMMON:
return isAdmin;
return this.authStore.isAdmin;
case FolderType.TRASH:
return false;
case FolderType.Favorites:
@ -513,7 +479,9 @@ class FilesStore {
get currentFilesCount() {
const serviceFilesCount = this.getServiceFilesCount();
const filesCount = this.getFilesCount();
return selectedFolderStore.providerItem ? serviceFilesCount : filesCount;
return this.selectedFolderStore.providerItem
? serviceFilesCount
: filesCount;
}
get iconOfDraggedFile() {
@ -546,19 +514,21 @@ class FilesStore {
}
get canCreate() {
switch (selectedFolderStore.rootFolderType) {
switch (this.selectedFolderStore.rootFolderType) {
case FolderType.USER:
return true;
case FolderType.SHARE:
const canCreateInSharedFolder = selectedFolderStore.access === 1;
return !selectedFolderStore.isRootFolder && canCreateInSharedFolder;
const canCreateInSharedFolder = this.selectedFolderStore.access === 1;
return (
!this.selectedFolderStore.isRootFolder && canCreateInSharedFolder
);
case FolderType.Privacy:
return (
store.auth.settingsStore.isDesktopClient &&
store.auth.settingsStore.isEncryptionSupport
this.settingsStore.isDesktopClient &&
this.settingsStore.isEncryptionSupport
);
case FolderType.COMMON:
return isAdmin;
return this.authStore.isAdmin;
case FolderType.TRASH:
default:
return false;
@ -574,7 +544,7 @@ class FilesStore {
items.unshift({
id: -1,
title: "",
parentId: selectedFolderStore.id,
parentId: this.selectedFolderStore.id,
fileExst: this.fileActionStore.extension,
icon,
});
@ -702,14 +672,14 @@ class FilesStore {
}
get userAccess() {
switch (selectedFolderStore.rootFolderType) {
switch (this.selectedFolderStore.rootFolderType) {
case FolderType.USER:
return true;
case FolderType.SHARE:
return false;
case FolderType.COMMON:
return (
isAdmin ||
this.authStore.isAdmin ||
this.selection.some((x) => x.access === 0 || x.access === 1)
);
case FolderType.Privacy:
@ -725,7 +695,7 @@ class FilesStore {
return (
(this.selection.length &&
this.selection.every((x) => x.access === 1 || x.access === 0)) ||
(isAdmin && this.selection.length)
(this.authStore.isAdmin && this.selection.length)
);
}
@ -735,7 +705,7 @@ class FilesStore {
get isThirdPartySelection() {
const withProvider = this.selection.find((x) => !x.providerKey);
return !withProvider && selectedFolderStore.isRootFolder;
return !withProvider && this.selectedFolderStore.isRootFolder;
}
get isWebEditSelected() {
@ -952,7 +922,7 @@ class FilesStore {
this.setFolders(favoritesFolder.folders);
this.setFiles(favoritesFolder.files);
selectedFolderStore.setSelectedFolder({
this.selectedFolderStore.setSelectedFolder({
folders: favoritesFolder.folders,
...favoritesFolder.current,
pathParts: favoritesFolder.pathParts,
@ -996,4 +966,4 @@ class FilesStore {
};
}
export default new FilesStore();
export default FilesStore;

View File

@ -1,4 +1,40 @@
import store from "@appserver/common/store";
const { moduleStore } = store.moduleStore;
import FilesStore from "./FilesStore";
import fileActionStore from "./FileActionStore";
import selectedFolderStore from "./SelectedFolderStore";
import treeFoldersStore from "./TreeFoldersStore";
export default moduleStore;
import settingsStore from "./SettingsStore";
import mediaViewerDataStore from "./MediaViewerDataStore";
import formatsStore from "./FormatsStore";
import versionHistoryStore from "./VersionHistoryStore";
import uploadDataStore from "./UploadDataStore";
import dialogsStore from "./DialogsStore";
import filesActionsStore from "./FilesActionsStore";
import initFilesStore from "./InitFilesStore";
import store from "studio/store";
const filesStore = new FilesStore(
store.auth,
store.auth.settingsStore,
store.auth.userStore,
fileActionStore,
selectedFolderStore,
treeFoldersStore
);
const stores = {
initFilesStore,
filesStore,
settingsStore,
mediaViewerDataStore,
formatsStore,
versionHistoryStore,
uploadDataStore,
dialogsStore,
treeFoldersStore,
selectedFolderStore,
filesActionsStore,
};
export default stores;