Web: Files: added context options to files row, added tree menu

This commit is contained in:
Nikita Gopienko 2021-02-09 17:22:51 +03:00
parent 09665b1a9d
commit 7f8a95058f
34 changed files with 1473 additions and 298 deletions

View File

@ -17,8 +17,8 @@ import {
Offline,
NavMenu,
Main,
//utils,
//toastr,
utils,
toastr,
Layout,
regDesktop,
} from "asc-web-common";
@ -54,7 +54,13 @@ class App extends React.Component {
}
componentDidMount() {
this.props.loadFilesInfo();
this.props
.loadFilesInfo()
.catch((err) => toastr.error(err))
.finally(() => {
this.props.setIsLoaded(true);
utils.updateTempContent();
});
}
/*
@ -234,16 +240,18 @@ class App extends React.Component {
// };
export default inject(({ store, mainFilesStore }) => ({
isDesktop: store.settingsStore.isDesktopClient,
user: store.userStore.user,
isAuthenticated: store.isAuthenticated,
homepage: store.settingsStore.homepage || config.homepage,
encryptionKeys: store.settingsStore.encryptionKeys,
isEncryptionSupport: store.settingsStore.isEncryptionSupport,
isEncryption: store.settingsStore.isEncryptionSupport,
isLoaded: mainFilesStore.isLoaded,
setIsLoaded: mainFilesStore.setIsLoaded,
setEncryptionKeys: store.settingsStore.setEncryptionKeys,
loadFilesInfo: async () => {
await store.init();
mainFilesStore.initFiles();
await mainFilesStore.initFiles();
},
}))(observer(App));

View File

@ -2,32 +2,36 @@ import React from "react";
import { TreeMenu, TreeNode, Icons } from "asc-web-components";
import styled from "styled-components";
import equal from "fast-deep-equal/react";
import { api, constants, toastr, store as initStore } from "asc-web-common";
import {
api,
constants,
toastr /* store as initStore */,
} from "asc-web-common";
import { connect } from "react-redux";
import {
setFilter,
setTreeFolders,
//setTreeFolders,
setDragItem,
//setDragging,
//setIsLoading,
setUpdateTree,
} from "../../../store/files/actions";
import {
getTreeFolders,
//getTreeFolders,
getFilter,
//getDragging,
getUpdateTree,
//getSelectedFolderId,
getMyFolderId,
getShareFolderId,
//getMyFolderId,
//getShareFolderId,
//getRootFolderId,
getDraggableItems,
getIsPrivacyFolder,
//getIsPrivacyFolder,
} from "../../../store/files/selectors";
import { onConvertFiles } from "../../../helpers/files-converter";
import { observer, inject } from "mobx-react";
const { isAdmin, isDesktopClient } = initStore.auth.selectors;
//const { isAdmin, isDesktopClient } = initStore.auth.selectors;
const { files } = api;
const { FolderType, ShareAccessRights } = constants;
@ -499,25 +503,25 @@ TreeFolders.defaultProps = {
function mapStateToProps(state) {
return {
treeFolders: getTreeFolders(state),
//treeFolders: getTreeFolders(state),
filter: getFilter(state),
myId: getMyFolderId(state),
commonId: getShareFolderId(state),
//myId: getMyFolderId(state),
//commonId: getShareFolderId(state),
//currentId: getSelectedFolderId(state),
isAdmin: isAdmin(state),
//isAdmin: isAdmin(state),
//dragging: getDragging(state),
updateTree: getUpdateTree(state),
//rootFolderId: getRootFolderId(state),
draggableItems: getDraggableItems(state),
isDesktop: isDesktopClient(state),
isPrivacy: getIsPrivacyFolder(state),
//isDesktop: isDesktopClient(state),
//isPrivacy: getIsPrivacyFolder(state),
};
}
const mapDispatchToProps = (dispatch) => {
return {
setFilter: (filter) => dispatch(setFilter(filter)),
setTreeFolders: (treeFolders) => dispatch(setTreeFolders(treeFolders)),
//setTreeFolders: (treeFolders) => dispatch(setTreeFolders(treeFolders)),
setDragItem: (dragItem) => dispatch(setDragItem(dragItem)),
//setDragging: (dragging) => dispatch(setDragging(dragging)),
//setIsLoading: (isLoading) => dispatch(setIsLoading(isLoading)),
@ -533,15 +537,31 @@ export default connect(
)(
inject(({ store, mainFilesStore }) => {
const { filesStore, setIsLoading, dragging, setDragging } = mainFilesStore;
const { pathParts, id } = filesStore.selectedFolderStore;
const { treeFoldersStore, selectedFolderStore } = filesStore;
const {
treeFolders,
setTreeFolders,
myFolderId,
commonFolderId,
isPrivacyFolder,
} = treeFoldersStore;
const { pathParts, id } = selectedFolderStore;
return {
isAdmin: store.isAdmin,
isDesktop: store.settingsStore.isDesktopClient,
dragging,
rootFolderId: pathParts,
currentId: id,
treeFolders,
myId: myFolderId,
commonId: commonFolderId,
isPrivacy: isPrivacyFolder,
setDragging,
setIsLoading,
setTreeFolders,
};
})(observer(TreeFolders))
);

View File

@ -3,7 +3,7 @@ import { connect } from "react-redux";
import { withRouter } from "react-router";
import { TreeMenu, TreeNode, Icons } from "asc-web-components";
import styled from "styled-components";
import { history, utils, store as initStore } from "asc-web-common";
import { history, utils /* , store as initStore */ } from "asc-web-common";
import { withTranslation, I18nextProvider } from "react-i18next";
import { createI18N } from "../../../helpers/i18n";
@ -22,7 +22,7 @@ import {
//getSelectedTreeNode,
} from "../../../store/files/selectors";
import { inject, observer } from "mobx-react";
const { isAdmin } = initStore.auth.selectors;
//const { isAdmin } = initStore.auth.selectors;
const i18n = createI18N({
page: "Settings",
@ -210,7 +210,7 @@ function mapStateToProps(state) {
selectedTreeNode: getSettingsSelectedTreeNode(state),
expandedSetting: getExpandedSetting(state),
enableThirdParty: getEnableThirdParty(state),
isAdmin: isAdmin(state),
//isAdmin: isAdmin(state),
//isLoading: getIsLoading(state),
//selectedFolder: getSelectedTreeNode(state),
};
@ -236,6 +236,7 @@ export default connect(mapStateToProps, {
const { setSelectedFolder } = filesStore.selectedFolderStore;
return {
isAdmin: store.isAdmin,
isLoading,
setIsLoading,

View File

@ -11,10 +11,10 @@ import {
setSelectedNode,
} from "../../../store/files/actions";
import {
getTreeFolders,
//getTreeFolders,
getFilter,
//getSelectedFolderTitle,
getSelectedTreeNode,
//getSelectedTreeNode,
} from "../../../store/files/selectors";
import { NewFilesPanel } from "../../panels";
import { setDocumentTitle } from "../../../helpers/utils";
@ -38,20 +38,20 @@ class ArticleBodyContent extends React.Component {
};
}
componentDidUpdate(prevProps) {
const { filter, treeFolders } = this.props;
// componentDidUpdate(prevProps) {
// const { filter, treeFolders } = this.props;
if (
filter.treeFolders.length !== prevProps.filter.treeFolders.length ||
this.state.expandedKeys.length !== filter.treeFolders.length
) {
this.setState({ expandedKeys: filter.treeFolders });
}
// if (
// filter.treeFolders.length !== prevProps.filter.treeFolders.length ||
// this.state.expandedKeys.length !== filter.treeFolders.length
// ) {
// this.setState({ expandedKeys: filter.treeFolders });
// }
if (!utils.array.isArrayEqual(prevProps.treeFolders, treeFolders)) {
this.setState({ data: treeFolders });
}
}
// if (!utils.array.isArrayEqual(prevProps.treeFolders, treeFolders)) {
// this.setState({ data: treeFolders });
// }
// }
componentDidMount() {
if (this.props.currentId) {
@ -108,7 +108,6 @@ class ArticleBodyContent extends React.Component {
const { treeFolders, filter, onTreeDrop, selectedTreeNode } = this.props;
const { showNewFilesPanel, expandedKeys, newFolderId } = this.state;
//console.log("Article Body render");
return (
<>
{showNewFilesPanel && (
@ -144,9 +143,9 @@ class ArticleBodyContent extends React.Component {
function mapStateToProps(state) {
return {
treeFolders: getTreeFolders(state),
//treeFolders: getTreeFolders(state),
filter: getFilter(state),
selectedTreeNode: getSelectedTreeNode(state),
//selectedTreeNode: getSelectedTreeNode(state),
//selectedFolderTitle: getSelectedFolderTitle(state),
};
}
@ -166,10 +165,14 @@ export default connect(
)(
inject(({ store, mainFilesStore }) => {
const { setIsLoading, filesStore } = mainFilesStore;
const { fetchFiles } = filesStore;
const { fetchFiles, treeFoldersStore, selectedFolderStore } = filesStore;
const { treeFolders } = treeFoldersStore;
const selectedTreeNode = [selectedFolderStore.id + ""];
return {
selectedFolderTitle: filesStore.selectedFolderStore.title,
selectedFolderTitle: selectedFolderStore.title,
treeFolders,
selectedTreeNode,
setIsLoading,
fetchFiles,

View File

@ -1,8 +1,9 @@
import React from "react";
import { connect } from "react-redux";
import { store, Headline, Loaders } from "asc-web-common";
//import { connect } from "react-redux";
import { /* store, */ Headline, Loaders } from "asc-web-common";
import { inject, observer } from "mobx-react";
const { getCurrentProductName } = store.auth.selectors;
//const { getCurrentProductName } = store.auth.selectors;
const ArticleHeaderContent = ({ currentModuleName }) => {
return currentModuleName ? (
@ -12,11 +13,15 @@ const ArticleHeaderContent = ({ currentModuleName }) => {
);
};
const mapStateToProps = (state) => {
const currentModuleName = getCurrentProductName(state);
return {
currentModuleName,
};
};
// const mapStateToProps = (state) => {
// const currentModuleName = getCurrentProductName(state);
// return {
// currentModuleName,
// };
// };
export default connect(mapStateToProps)(ArticleHeaderContent);
// export default connect(mapStateToProps)(ArticleHeaderContent);
export default inject(({ store }) => ({
currentProductName: (store.product && store.product.title) || "",
}))(observer(ArticleHeaderContent));

View File

@ -11,12 +11,12 @@ import {
getFilter,
//getSelectedFolder,
//getFirstLoad,
getIsPrivacyFolder,
//getIsPrivacyFolder,
} from "../../../store/files/selectors";
import {
utils as commonUtils,
constants,
store as initStore,
//store as initStore,
Loaders,
} from "asc-web-common";
import { createI18N } from "../../../helpers/i18n";
@ -25,7 +25,7 @@ import { inject, observer } from "mobx-react";
//const { settingsStore } = initStore;
const { getSettings } = initStore.auth.selectors;
//const { getSettings } = initStore.auth.selectors;
const i18n = createI18N({
page: "Article",
localesPath: "Article",
@ -186,23 +186,26 @@ const mapStateToProps = (state) => {
return {
canCreate: canCreate(state),
//firstLoad: getFirstLoad(state),
settings: getSettings(state),
//settings: getSettings(state),
filter: getFilter(state),
//selectedFolder: getSelectedFolder(state),
isPrivacy: getIsPrivacyFolder(state),
//isPrivacy: getIsPrivacyFolder(state),
};
};
export default connect(mapStateToProps, { /* setAction, */ startUpload })(
inject(({ store, mainFilesStore }) => {
const { filesStore } = mainFilesStore;
const { firstLoad, fileActionStore } = filesStore;
const { firstLoad, fileActionStore, treeFoldersStore } = filesStore;
const { isPrivacyFolder } = treeFoldersStore;
const { id } = filesStore.selectedFolderStore;
return {
homepage: store.settingsStore.homepage,
firstLoad,
selectedFolderId: id,
setAction: fileActionStore.setAction,
isPrivacy: isPrivacyFolder,
};
})(withRouter(observer(ArticleMainButtonContent)))
);

View File

@ -15,15 +15,15 @@ import {
getOAuthToken,
openConnectWindow,
saveThirdParty,
setTreeFolders,
//setTreeFolders,
setUpdateTree,
//fetchFiles,
} from "../../../store/files/actions";
import {
getTreeFolders,
//getTreeFolders,
loopTreeFolders,
getMyFolderId,
getCommonFolderId,
//getMyFolderId,
//getCommonFolderId,
getThirdPartyProviders,
//getSelectedFolder,
} from "../../../store/files/selectors";
@ -353,9 +353,9 @@ const ConnectDialog = (props) => {
const mapStateToProps = (state) => {
return {
treeFolders: getTreeFolders(state),
myFolderId: getMyFolderId(state),
commonFolderId: getCommonFolderId(state),
//treeFolders: getTreeFolders(state),
//myFolderId: getMyFolderId(state),
//commonFolderId: getCommonFolderId(state),
providers: getThirdPartyProviders(state),
//selectedFolder: getSelectedFolder(state),
};
@ -371,21 +371,32 @@ const mapStateToProps = (state) => {
export default connect(mapStateToProps, {
setUpdateTree,
setTreeFolders,
//setTreeFolders,
fetchThirdPartyProviders,
fetchTreeFolders,
//fetchFiles,
})(
inject(({ store, mainFilesStore }) => {
const { filesStore } = mainFilesStore;
const { fetchFiles } = filesStore;
const { fetchFiles, treeFoldersStore } = filesStore;
const {
treeFolders,
setTreeFolders,
myFolderId,
commonFolderId,
} = treeFoldersStore;
const { id, folders } = filesStore.selectedFolderStore;
return {
selectedFolderId: id,
selectedFolderFolders: folders,
treeFolders,
myFolderId,
commonFolderId,
fetchFiles,
setTreeFolders,
};
})(observer(ConnectDialog))
);

View File

@ -6,11 +6,12 @@ import { ModalDialog, Button, Text, Checkbox } from "asc-web-components";
import { withTranslation } from "react-i18next";
import { utils } from "asc-web-common";
import {
setTreeFolders,
//setTreeFolders,
setDialogVisible,
convertUploadedFiles,
} from "../../../store/files/actions";
import { createI18N } from "../../../helpers/i18n";
import { inject, observer } from "mobx-react";
const i18n = createI18N({
page: "ConvertDialog",
localesPath: "dialogs/ConvertDialog",
@ -118,8 +119,23 @@ const ConvertDialog = (props) => (
<ModalDialogContainerTranslated i18n={i18n} {...props} />
);
// export default connect(null, {
// setTreeFolders,
// setDialogVisible,
// convertUploadedFiles,
// })(withRouter(ConvertDialog));
export default connect(null, {
setTreeFolders,
//setTreeFolders,
setDialogVisible,
convertUploadedFiles,
})(withRouter(ConvertDialog));
})(
inject(({ store, mainFilesStore }) => {
const { filesStore } = mainFilesStore;
const { setTreeFolders } = filesStore.treeFoldersStore;
return {
setTreeFolders,
};
})(withRouter(observer(ConvertDialog)))
);

View File

@ -13,7 +13,7 @@ import { withTranslation } from "react-i18next";
import { api, utils, toastr } from "asc-web-common";
import {
//fetchFiles,
setTreeFolders,
//setTreeFolders,
setSecondaryProgressBarData,
clearSecondaryProgressData,
setUpdateTree,
@ -23,12 +23,12 @@ import {
loopTreeFolders,
//getSelectedFolderId,
getFilter,
getTreeFolders,
//getTreeFolders,
//getIsLoading,
getIsRecycleBinFolder,
//getIsRecycleBinFolder,
//getSelection,
isRootFolder,
getIsPrivacyFolder,
//getIsPrivacyFolder,
} from "../../../store/files/selectors";
import { createI18N } from "../../../helpers/i18n";
import { inject, observer } from "mobx-react";
@ -307,10 +307,10 @@ const mapStateToProps = (state) => {
return {
//currentFolderId: getSelectedFolderId(state),
filter: getFilter(state),
treeFolders: getTreeFolders(state),
//treeFolders: getTreeFolders(state),
//isLoading: getIsLoading(state),
isRecycleBinFolder: getIsRecycleBinFolder(state),
isPrivacy: getIsPrivacyFolder(state),
//isRecycleBinFolder: getIsRecycleBinFolder(state),
//isPrivacy: getIsPrivacyFolder(state),
//selection: getSelection(state),
isRootFolder: isRootFolder(state),
};
@ -325,7 +325,7 @@ const mapStateToProps = (state) => {
// })(withRouter(DeleteDialog));
export default connect(mapStateToProps, {
setTreeFolders,
//setTreeFolders,
setSecondaryProgressBarData,
clearSecondaryProgressData,
setUpdateTree,
@ -333,14 +333,30 @@ export default connect(mapStateToProps, {
})(
inject(({ store, mainFilesStore }) => {
const { filesStore, isLoading } = mainFilesStore;
const { fetchFiles, selection, selectedFolderStore } = filesStore;
const {
fetchFiles,
selection,
selectedFolderStore,
treeFoldersStore,
} = filesStore;
const {
treeFolders,
setTreeFolders,
isRecycleBinFolder,
isPrivacyFolder,
} = treeFoldersStore;
return {
currentFolderId: selectedFolderStore.id,
selection,
isLoading,
treeFolders,
isRecycleBinFolder,
isPrivacy: isPrivacyFolder,
fetchFiles,
setTreeFolders,
};
})(withRouter(observer(DeleteDialog)))
);

View File

@ -9,15 +9,15 @@ import {
setThirdPartyProviders,
//fetchFiles,
setUpdateTree,
setTreeFolders,
//setTreeFolders,
} from "../../../store/files/actions";
import {
getThirdPartyProviders,
//getSelectedFolderId,
loopTreeFolders,
getTreeFolders,
getCommonFolderId,
getMyFolderId,
//getTreeFolders,
//getCommonFolderId,
//getMyFolderId,
} from "../../../store/files/selectors";
import { createI18N } from "../../../helpers/i18n";
import { inject, observer } from "mobx-react";
@ -122,9 +122,9 @@ const mapStateToProps = (state) => {
return {
providers: getThirdPartyProviders(state),
//currentFolderId: getSelectedFolderId(state),
treeFolders: getTreeFolders(state),
commonId: getCommonFolderId(state),
myId: getMyFolderId(state),
//treeFolders: getTreeFolders(state),
//commonId: getCommonFolderId(state),
//myId: getMyFolderId(state),
};
};
@ -139,16 +139,27 @@ export default connect(mapStateToProps, {
setThirdPartyProviders,
//fetchFiles,
setUpdateTree,
setTreeFolders,
//setTreeFolders,
})(
inject(({ store, mainFilesStore }) => {
const { filesStore } = mainFilesStore;
const { fetchFiles } = filesStore;
const { fetchFiles, treeFoldersStore } = filesStore;
const {
treeFolders,
setTreeFolders,
myFolderId,
commonFolderId,
} = treeFoldersStore;
return {
currentFolderId: filesStore.selectedFolderStore.id,
treeFolders,
myId: myFolderId,
commonId: commonFolderId,
fetchFiles,
setTreeFolders,
};
})(withRouter(observer(DeleteThirdPartyDialog)))
);

View File

@ -21,7 +21,7 @@ import {
//setIsLoading,
setNewRowItems,
setSecondaryProgressBarData,
setTreeFolders,
//setTreeFolders,
setUpdateTree,
updateFile,
} from "../../../../../store/files/actions";
@ -34,15 +34,15 @@ import {
getFilter,
//getFolders,
//getIsLoading,
getIsPrivacyFolder,
getIsRecycleBinFolder,
//getIsPrivacyFolder,
//getIsRecycleBinFolder,
getNewRowItems,
//getPathParts,
//getSelectedFolder,
//getSelectedFolderNew,
//getSelectedFolderParentId,
getTitleWithoutExst,
getTreeFolders,
//getTreeFolders,
isImage,
isSound,
isVideo,
@ -56,7 +56,7 @@ import { observer, inject } from "mobx-react";
const { FileAction } = constants;
const sideColor = "#A3A9AE";
const { /* getSettings, */ isDesktopClient } = initStore.auth.selectors;
//const { getSettings, isDesktopClient } = initStore.auth.selectors;
const { getEncryptionAccess, replaceFileStream } = initStore.auth.actions;
const SimpleFilesRowContent = styled(RowContent)`
@ -758,17 +758,17 @@ function mapStateToProps(state, props) {
filter: getFilter(state),
//fileAction: getFileAction(state),
//parentFolder: getSelectedFolderParentId(state),
isTrashFolder: getIsRecycleBinFolder(state),
//isTrashFolder: getIsRecycleBinFolder(state),
//settings: getSettings(state),
treeFolders: getTreeFolders(state),
//treeFolders: getTreeFolders(state),
//selectedFolderPathParts: getPathParts(state),
//newItems: getSelectedFolderNew(state),
//selectedFolder: getSelectedFolder(state),
//folders: getFolders(state),
newRowItems: getNewRowItems(state),
//isLoading: getIsLoading(state),
isPrivacy: getIsPrivacyFolder(state),
isDesktop: isDesktopClient(state),
//isPrivacy: getIsPrivacyFolder(state),
//isDesktop: isDesktopClient(state),
canWebEdit: canWebEdit(props.item.fileExst)(state),
canConvert: canConvert(props.item.fileExst)(state),
@ -797,7 +797,7 @@ export default connect(mapStateToProps, {
createFile,
updateFile,
renameFolder,
setTreeFolders,
//setTreeFolders,
setSecondaryProgressBarData,
setUpdateTree,
setNewRowItems,
@ -808,13 +808,25 @@ export default connect(mapStateToProps, {
replaceFileStream,
})(
inject(({ store, mainFilesStore }) => {
const { homepage, culture, isDesktopClient } = store.settingsStore;
const { filesStore, setIsLoading, isLoading } = mainFilesStore;
const { folders, fetchFiles } = filesStore;
const { folders, fetchFiles, treeFoldersStore } = filesStore;
const {
treeFolders,
setTreeFolders,
isRecycleBinFolder,
isPrivacyFolder
} = treeFoldersStore;
const { type, extension, id } = filesStore.fileActionStore;
const fileAction = { type, extension, id };
return {
isDesktop: isDesktopClient,
homepage,
culture,
fileAction,
folders,
selectedFolderId: filesStore.selectedFolderStore.id,
@ -822,9 +834,13 @@ export default connect(mapStateToProps, {
newItems: filesStore.selectedFolderStore.new,
parentFolder: filesStore.selectedFolderStore.parentId,
isLoading,
treeFolders,
isTrashFolder: isRecycleBinFolder,
isPrivacy: isPrivacyFolder,
setIsLoading,
fetchFiles,
setTreeFolders,
};
})(withRouter(withTranslation()(observer(FilesRowContent))))
);

View File

@ -11,7 +11,7 @@ import {
renameFolder,
updateFile,
//fetchFiles,
setTreeFolders,
//setTreeFolders,
//setIsLoading,
} from "../../../../../store/files/actions";
import {
@ -26,11 +26,11 @@ import {
//getSelectedFolderNew,
//getSelectedFolderParentId,
getTitleWithoutExst,
getTreeFolders,
//getTreeFolders,
isImage,
isSound,
isVideo,
getIsRecycleBinFolder,
//getIsRecycleBinFolder,
//getRootFolderId,
} from "../../../../../store/files/selectors";
import { NewFilesPanel } from "../../../../panels";
@ -446,8 +446,8 @@ function mapStateToProps(state, props) {
filter: getFilter(state),
//fileAction: getFileAction(state),
//parentFolder: getSelectedFolderParentId(state),
isTrashFolder: getIsRecycleBinFolder(state),
treeFolders: getTreeFolders(state),
//isTrashFolder: getIsRecycleBinFolder(state),
//treeFolders: getTreeFolders(state),
//rootFolderId: getRootFolderId(state),
//newItems: getSelectedFolderNew(state),
//selectedFolder: getSelectedFolder(state),
@ -472,18 +472,28 @@ export default connect(mapStateToProps, {
createFile,
updateFile,
renameFolder,
setTreeFolders,
//setTreeFolders,
//setIsLoading,
//fetchFiles,
})(
inject(({ store, mainFilesStore }) => {
const { homepage, culture } = store.settingsStore;
const { filesStore, setIsLoading, isLoading } = mainFilesStore;
const { folders, fetchFiles } = filesStore;
const { folders, fetchFiles, treeFoldersStore } = filesStore;
const {
treeFolders,
setTreeFolders,
isRecycleBinFolder,
} = treeFoldersStore;
const { type, extension, id } = filesStore.fileActionStore;
const fileAction = { type, extension, id };
return {
culture,
homepage,
fileAction,
folders,
rootFolderId: filesStore.selectedFolderStore.pathParts,
@ -492,9 +502,12 @@ export default connect(mapStateToProps, {
newItems: filesStore.selectedFolderStore.new,
parentFolder: filesStore.selectedFolderStore.parentId,
isLoading,
treeFolders,
isTrashFolder: isRecycleBinFolder,
setIsLoading,
fetchFiles,
setTreeFolders,
};
})(withRouter(withTranslation()(observer(FilesTileContent))))
);

View File

@ -28,7 +28,7 @@ import {
MediaViewer,
toastr,
Loaders,
store,
//store,
} from "asc-web-common";
import {
clearSecondaryProgressData,
@ -49,7 +49,7 @@ import {
setSecondaryProgressBarData,
//setSelected,
//setSelection,
setTreeFolders,
//setTreeFolders,
getFileInfo,
addFileToRecentlyViewed,
setIsVerHistoryPanel,
@ -76,21 +76,21 @@ import {
//getSelected,
//getSelectedFolderTitle,
//getSelection,
getTreeFolders,
//getTreeFolders,
getViewAs,
loopTreeFolders,
//getFilesList,
getMediaViewerImageFormats,
getMediaViewerMediaFormats,
getIsShareFolder,
getIsCommonFolder,
getIsRecycleBinFolder,
getIsRecentFolder,
getIsMyFolder,
getIsFavoritesFolder,
getMyFolderId,
//getIsShareFolder,
//getIsCommonFolder,
//getIsRecycleBinFolder,
//getIsRecentFolder,
//getIsMyFolder,
//getIsFavoritesFolder,
//getMyFolderId,
getTooltipLabel,
getIsPrivacyFolder,
//getIsPrivacyFolder,
getPrivacyInstructionsLink,
getIconOfDraggedFile,
getSharePanelVisible,
@ -106,15 +106,15 @@ import {
ThirdPartyMoveDialog,
} from "../../../../dialogs";
import { observer, inject } from "mobx-react";
const {
isAdmin,
getSettings,
getCurrentUser,
isDesktopClient,
isEncryptionSupport,
getOrganizationName,
getIsTabletView,
} = store.auth.selectors;
// const {
// isAdmin,
// getSettings,
// getCurrentUser,
// isDesktopClient,
// isEncryptionSupport,
// getOrganizationName,
// getIsTabletView,
// } = store.auth.selectors;
//import { getFilterByLocation } from "../../../../../helpers/converters";
//import config from "../../../../../../package.json";
@ -1809,7 +1809,7 @@ class SectionBodyContent extends React.Component {
filter,
} = this.props;
console.log("Section body", this.props);
//console.log("Section body", this.props);
const {
editingId,
@ -2129,31 +2129,31 @@ const mapStateToProps = (state) => {
//firstLoad: getFirstLoad(state),
//folderId: getSelectedFolderId(state),
//folders: getFolders(state),
isAdmin: isAdmin(state),
isCommon: getIsCommonFolder(state),
isDesktop: isDesktopClient(state),
isEncryptionSupport: isEncryptionSupport(state),
isFavorites: getIsFavoritesFolder(state),
isMy: getIsMyFolder(state),
isRecycleBin: getIsRecycleBinFolder(state),
isRecent: getIsRecentFolder(state),
isShare: getIsShareFolder(state),
isPrivacy: getIsPrivacyFolder(state),
//isAdmin: isAdmin(state),
//isCommon: getIsCommonFolder(state),
//isDesktop: isDesktopClient(state),
//isEncryptionSupport: isEncryptionSupport(state),
//isFavorites: getIsFavoritesFolder(state),
//isMy: getIsMyFolder(state),
//isRecycleBin: getIsRecycleBinFolder(state),
//isRecent: getIsRecentFolder(state),
//isShare: getIsShareFolder(state),
//isPrivacy: getIsPrivacyFolder(state),
mediaViewerImageFormats: getMediaViewerImageFormats(state),
mediaViewerMediaFormats: getMediaViewerMediaFormats(state),
mediaViewerVisible: getMediaViewerVisibility(state),
myDocumentsId: getMyFolderId(state),
organizationName: getOrganizationName(state),
//myDocumentsId: getMyFolderId(state),
//organizationName: getOrganizationName(state),
//parentId: getSelectedFolderParentId(state),
privacyInstructions: getPrivacyInstructionsLink(state),
//selected: getSelected(state),
//selectedFolderId: getSelectedFolderId(state),
//selection: getSelection(state),
settings: getSettings(state),
//settings: getSettings(state),
//title: getSelectedFolderTitle(state),
treeFolders: getTreeFolders(state),
//treeFolders: getTreeFolders(state),
viewAs: getViewAs(state),
viewer: getCurrentUser(state),
//viewer: getCurrentUser(state),
tooltipValue: getTooltipLabel(state),
iconOfDraggedFile: getIconOfDraggedFile(state)(state),
sharingPanelVisible: getSharePanelVisible(state),
@ -2161,7 +2161,7 @@ const mapStateToProps = (state) => {
providers: getThirdPartyProviders(state),
capabilities: getThirdPartyCapabilities(state),
isVersionHistoryPanel: getIsVerHistoryPanel(state),
isTabletView: getIsTabletView(state),
//isTabletView: getIsTabletView(state),
};
};
@ -2198,7 +2198,7 @@ export default connect(mapStateToProps, {
updateFile,
//fetchFiles,
//selectFile,
setTreeFolders,
//setTreeFolders,
setDragItem,
setMediaViewerData,
setSecondaryProgressBarData,
@ -2219,6 +2219,14 @@ export default connect(mapStateToProps, {
setChangeOwnerPanelVisible,
})(
inject(({ store, mainFilesStore }) => {
const {
homepage,
culture,
isEncryptionSupport,
isTabletView,
organizationName,
isDesktopClient,
} = store.settingsStore;
const { dragging, setDragging, filesStore, setIsLoading } = mainFilesStore;
const {
files,
@ -2233,13 +2241,35 @@ export default connect(mapStateToProps, {
selection,
selectFile,
deselectFile,
treeFoldersStore,
} = filesStore;
const {
treeFolders,
setTreeFolders,
myFolderId,
isMyFolder,
isRecycleBinFolder,
isShareFolder,
isFavoritesFolder,
isCommonFolder,
isRecentFolder,
isPrivacyFolder
} = treeFoldersStore;
const { type, extension, id, setAction } = fileActionStore;
const fileAction = { type, extension, id };
return {
isAdmin: store.isAdmin,
homepage,
culture,
isEncryptionSupport,
isTabletView,
viewer: store.userStore.user,
organizationName,
isDesktop: isDesktopClient,
dragging,
fileAction,
files,
@ -2251,6 +2281,15 @@ export default connect(mapStateToProps, {
parentId: filesStore.selectedFolderStore.parentId,
selectedFolderId: filesStore.selectedFolderStore.id,
selection,
treeFolders,
isRecycleBin: isRecycleBinFolder,
myDocumentsId: myFolderId,
isShare: isShareFolder,
isFavorites: isFavoritesFolder,
isCommon: isCommonFolder,
isRecent: isRecentFolder,
isMy: isMyFolder,
isPrivacy: isPrivacyFolder,
setDragging,
setAction,
@ -2260,6 +2299,7 @@ export default connect(mapStateToProps, {
fetchFiles,
selectFile,
deselectFile,
setTreeFolders,
};
})(withRouter(withTranslation()(observer(SectionBodyContent))))
);

View File

@ -16,18 +16,23 @@ import find from "lodash/find";
import result from "lodash/result";
import { withTranslation } from "react-i18next";
import { withRouter } from "react-router";
import { constants, FilterInput, store, Loaders, utils } from "asc-web-common";
import {
constants,
FilterInput,
/* store, */ Loaders,
utils,
} from "asc-web-common";
//import equal from "fast-deep-equal/react";
import { isMobileOnly } from "react-device-detect";
import { inject, observer } from "mobx-react";
const { withLayoutSize } = utils;
const {
getCurrentUser,
getSettingsCustomNames,
getLanguage,
} = store.auth.selectors;
// const {
// getCurrentUser,
// getSettingsCustomNames,
// getLanguage,
// } = store.auth.selectors;
const { FilterType } = constants;
const getFilterType = (filterValues) => {
@ -328,9 +333,9 @@ class SectionFilterContent extends React.Component {
function mapStateToProps(state) {
return {
user: getCurrentUser(state),
customNames: getSettingsCustomNames(state),
language: getLanguage(state),
//user: getCurrentUser(state),
//customNames: getSettingsCustomNames(state),
//language: getLanguage(state),
//firstLoad: getFirstLoad(state),
filter: getFilter(state),
//selectedFolderId: getSelectedFolderId(state),
@ -354,7 +359,14 @@ export default connect(mapStateToProps, {
const { filesStore, setIsLoading } = mainFilesStore;
const { firstLoad, fetchFiles } = filesStore;
const { user } = store.userStore;
const { customNames, culture } = store.settingsStore;
const language = (user && user.cultureName) || culture || "en-US";
return {
customNames,
user,
language,
firstLoad,
selectedFolderId: filesStore.selectedFolderStore.id,

View File

@ -5,7 +5,7 @@ import { withRouter } from "react-router";
import {
constants,
Headline,
store,
//store,
api,
toastr,
Loaders,
@ -38,7 +38,7 @@ import { OperationsPanel } from "../../../../panels";
import {
getUserAccess,
getWebEditSelected,
getIsRecycleBinFolder,
//getIsRecycleBinFolder,
canCreate,
//getSelectedFolderTitle,
getFilter,
@ -53,12 +53,12 @@ import {
getSelectionLength,
getSharePanelVisible,
getIsThirdPartySelection,
getIsPrivacyFolder,
//getIsPrivacyFolder,
getOnlyFoldersSelected,
} from "../../../../../store/files/selectors";
import { inject, observer } from "mobx-react";
const { isAdmin, isDesktopClient } = store.auth.selectors;
//const { isAdmin, isDesktopClient } = store.auth.selectors;
const { FilterType, FileAction } = constants;
const { tablet, desktop } = utils.device;
const { Consumer } = utils.context;
@ -696,10 +696,10 @@ class SectionHeaderContent extends React.Component {
const mapStateToProps = (state) => {
return {
//isRootFolder: getIsRootFolder(state),
isAdmin: isAdmin(state),
isRecycleBin: getIsRecycleBinFolder(state),
isPrivacy: getIsPrivacyFolder(state),
isDesktop: isDesktopClient(state),
//isAdmin: isAdmin(state),
//isRecycleBin: getIsRecycleBinFolder(state),
//isPrivacy: getIsPrivacyFolder(state),
//isDesktop: isDesktopClient(state),
//parentId: getSelectedFolderParentId(state),
//selection: getSelection(state),
//title: getSelectedFolderTitle(state),
@ -739,15 +739,27 @@ export default connect(mapStateToProps, {
})(
inject(({ store, mainFilesStore }) => {
const { filesStore, setIsLoading } = mainFilesStore;
const { setSelected, fileActionStore, fetchFiles, selection } = filesStore;
const {
setSelected,
fileActionStore,
fetchFiles,
selection,
selectedFolderStore,
treeFoldersStore,
} = filesStore;
const { isRecycleBinFolder, isPrivacyFolder } = treeFoldersStore;
const { setAction } = fileActionStore;
return {
isRootFolder: filesStore.selectedFolderStore.parentId === 0,
title: filesStore.selectedFolderStore.title,
parentId: filesStore.selectedFolderStore.parentId,
currentFolderId: filesStore.selectedFolderStore.id,
isAdmin: store.isAdmin,
isDesktop: store.settingsStore.isDesktopClient,
isRootFolder: selectedFolderStore.parentId === 0,
title: selectedFolderStore.title,
parentId: selectedFolderStore.parentId,
currentFolderId: selectedFolderStore.id,
selection,
isRecycleBin: isRecycleBinFolder,
isPrivacy: isPrivacyFolder,
setSelected,
setAction,

View File

@ -33,7 +33,7 @@ import {
getFilter,
getPrimaryProgressData,
getSecondaryProgressData,
getTreeFolders,
//getTreeFolders,
getViewAs,
//getIsLoading,
//getDragging,
@ -335,7 +335,7 @@ function mapStateToProps(state) {
filter: getFilter(state),
primaryProgressData: getPrimaryProgressData(state),
secondaryProgressData: getSecondaryProgressData(state),
treeFolders: getTreeFolders(state),
//treeFolders: getTreeFolders(state),
viewAs: getViewAs(state),
//isLoading: getIsLoading(state),
//homepage: getSettingsHomepage(state),
@ -374,7 +374,16 @@ export default connect(
filesStore,
isLoading,
} = mainFilesStore;
const { firstLoad, setFirstLoad, fileActionStore, fetchFiles } = filesStore;
const {
firstLoad,
setFirstLoad,
fileActionStore,
fetchFiles,
treeFoldersStore,
} = filesStore;
const { treeFolders } = treeFoldersStore;
const { id } = fileActionStore;
return {
@ -384,6 +393,7 @@ export default connect(
fileActionId: id,
currentFolderId: filesStore.selectedFolderStore.id,
isLoading,
treeFolders,
setFirstLoad,
setDragging,

View File

@ -11,7 +11,7 @@ import {
Row,
Icons,
} from "asc-web-components";
import { store } from "asc-web-common";
//import { store } from "asc-web-common";
import { withTranslation } from "react-i18next";
import EmptyFolderContainer from "../../../Home/Section/Body/EmptyFolderContainer";
import { createI18N } from "../../../../../helpers/i18n";
@ -46,7 +46,7 @@ import {
import { DeleteThirdPartyDialog, ConnectDialog } from "../../../../dialogs";
import { inject, observer } from "mobx-react";
const { isAdmin } = store.auth.selectors;
//const { isAdmin } = store.auth.selectors;
const i18n = createI18N({
page: "SectionBodyContent",
@ -545,7 +545,7 @@ class ConnectClouds extends React.Component {
function mapStateToProps(state) {
return {
isAdmin: isAdmin(state),
//isAdmin: isAdmin(state),
capabilities: getThirdPartyCapabilities(state),
googleConnectItem: getGoogleConnect(state),
boxConnectItem: getBoxConnect(state),
@ -584,6 +584,8 @@ export default connect(mapStateToProps, {
const { fetchFiles } = filesStore;
return {
isAdmin: store.isAdmin,
fetchFiles,
};
})(withTranslation()(observer(ConnectClouds)))

View File

@ -2,7 +2,7 @@ import React from "react";
import styled from "styled-components";
import { connect } from "react-redux";
import { Heading, ToggleButton } from "asc-web-components";
import { Error403, Error520, store } from "asc-web-common";
import { Error403, Error520 /* store */ } from "asc-web-common";
import {
setUpdateIfExist,
setStoreOriginal,
@ -25,7 +25,7 @@ import {
import ConnectClouds from "./ConnectedClouds";
import { inject, observer } from "mobx-react";
const { isAdmin } = store.auth.selectors;
//const { isAdmin } = store.auth.selectors;
const StyledSettings = styled.div`
display: grid;
@ -182,7 +182,7 @@ const SectionBodyContent = ({
function mapStateToProps(state) {
return {
isAdmin: isAdmin(state),
//isAdmin: isAdmin(state),
selectedTreeNode: getSettingsSelectedTreeNode(state),
storeOriginalFiles: getSettingsTreeStoreOriginalFiles(state),
confirmDelete: getSettingsTreeConfirmDelete(state),
@ -216,6 +216,7 @@ export default connect(mapStateToProps, {
const { isLoading } = mainFilesStore;
return {
isAdmin: store.isAdmin,
isLoading,
};
})(observer(SectionBodyContent))

View File

@ -11,7 +11,7 @@ import {
import { withTranslation } from "react-i18next";
import { withRouter } from "react-router";
import { connect } from "react-redux";
import { toastr, store } from "asc-web-common";
import { toastr /* store */ } from "asc-web-common";
import {
markAsVersion,
restoreVersion,
@ -19,8 +19,9 @@ import {
} from "../../../../../store/files/actions";
import VersionBadge from "./VersionBadge";
import StyledVersionRow from "./StyledVersionRow";
import { inject, observer } from "mobx-react";
const { getLanguage } = store.auth.selectors;
//const { getLanguage } = store.auth.selectors;
const VersionRow = (props) => {
const {
@ -233,11 +234,11 @@ const VersionRow = (props) => {
);
};
const mapStateToProps = (state) => {
return {
culture: getLanguage(state),
};
};
// const mapStateToProps = (state) => {
// return {
// culture: getLanguage(state),
// };
// };
const mapDispatchToProps = (dispatch) => {
return {
@ -249,7 +250,22 @@ const mapDispatchToProps = (dispatch) => {
};
};
// export default connect(
// mapStateToProps,
// mapDispatchToProps
// )(withRouter(withTranslation()(VersionRow)));
export default connect(
mapStateToProps,
null,
mapDispatchToProps
)(withRouter(withTranslation()(VersionRow)));
)(
inject(({ store, mainFilesStore }) => {
const { user } = store.userStore;
const { culture } = store.settingsStore;
const language = (user && user.cultureName) || culture || "en-US";
return {
culture: language,
};
})(withRouter(withTranslation()(observer(VersionRow))))
);

View File

@ -96,6 +96,7 @@ export default connect(
const { setFirstLoad } = filesStore;
return {
culture: store.settingsStore.culture,
isLoading,
setFirstLoad,

View File

@ -2,7 +2,7 @@ import React, { useEffect } from "react";
import { connect } from "react-redux";
import PropTypes from "prop-types";
import { withRouter } from "react-router";
import { PageLayout, Loaders, utils, store } from "asc-web-common";
import { PageLayout, Loaders, utils /* store */ } from "asc-web-common";
import { withTranslation, I18nextProvider } from "react-i18next";
import {
ArticleHeaderContent,
@ -29,7 +29,7 @@ const i18n = createI18N({
});
const { changeLanguage } = utils;
const { getIsTabletView } = store.auth.selectors;
//const { getIsTabletView } = store.auth.selectors;
class PureVersionHistory extends React.Component {
componentDidMount() {
@ -118,7 +118,7 @@ VersionHistory.propTypes = {
function mapStateToProps(state) {
return {
//isLoading: getIsLoading(state),
isTabletView: getIsTabletView(state),
//isTabletView: getIsTabletView(state),
filter: getFilter(state),
versions: getFileVersions(state),
};
@ -145,6 +145,7 @@ export default connect(
const { isLoading } = mainFilesStore;
return {
isTabletView: store.settingsStore.isTabletView,
isLoading,
};
})(withRouter(observer(VersionHistory)))

View File

@ -10,7 +10,7 @@ import {
Aside,
} from "asc-web-components";
import { withTranslation } from "react-i18next";
import { utils, store, toastr } from "asc-web-common";
import { utils, /* store, */ toastr } from "asc-web-common";
import {
//setIsLoading,
setFilesOwner,
@ -43,7 +43,7 @@ const i18n = createI18N({
localesPath: "panels/ChangeOwnerPanel",
});
const { changeLanguage } = utils;
const { getSettingsCustomNamesGroupsCaption } = store.auth.selectors;
//const { getSettingsCustomNamesGroupsCaption } = store.auth.selectors;
class ChangeOwnerComponent extends React.Component {
constructor(props) {
@ -204,7 +204,7 @@ const ChangeOwnerPanel = (props) => (
const mapStateToProps = (state) => {
return {
//selection: getSelection(state),
groupsCaption: getSettingsCustomNamesGroupsCaption(state),
//groupsCaption: getSettingsCustomNamesGroupsCaption(state),
//isLoading: getIsLoading(state),
//files: getFiles(state),
//folders: getFolders(state),
@ -231,6 +231,7 @@ inject(({ store, mainFilesStore }) => {
const { files, folders, selection } = filesStore;
return {
groupsCaption: store.settingsStore.customNames.groupsCaption,
files,
folders,
selection,

View File

@ -28,14 +28,14 @@ import {
getFilter,
//getFiles,
//getFolders,
getTreeFolders,
//getTreeFolders,
//getSelectedFolder,
getIsPrivacyFolder,
//getIsPrivacyFolder,
} from "../../../store/files/selectors";
import {
//fetchFiles,
setMediaViewerData,
setTreeFolders,
//setTreeFolders,
setUpdateTree,
setNewRowItems,
//setIsLoading,
@ -317,8 +317,8 @@ const mapStateToProps = (state) => {
filter: getFilter(state),
//files: getFiles(state),
//folders: getFolders(state),
treeFolders: getTreeFolders(state),
isPrivacy: getIsPrivacyFolder(state),
//treeFolders: getTreeFolders(state),
//isPrivacy: getIsPrivacyFolder(state),
};
};
@ -334,7 +334,7 @@ const mapStateToProps = (state) => {
export default connect(mapStateToProps, {
setMediaViewerData,
setTreeFolders,
//setTreeFolders,
setUpdateTree,
setNewRowItems,
//fetchFiles,
@ -344,13 +344,17 @@ export default connect(mapStateToProps, {
inject(({ store, mainFilesStore }) => {
const { filesStore, setIsLoading } = mainFilesStore;
const { files, folders, fetchFiles } = filesStore;
const { files, folders, fetchFiles, treeFoldersStore } = filesStore;
const { treeFolders, setTreeFolders, isPrivacyFolder } = treeFoldersStore;
return {
files,
folders,
treeFolders,
isPrivacy: isPrivacyFolder,
setIsLoading,
fetchFiles,
setTreeFolders,
};
})(withRouter(observer(NewFilesPanel)));

View File

@ -16,7 +16,7 @@ import {
//getSelection,
//getPathParts,
//getSelectedFolderId,
getIsRecycleBinFolder,
//getIsRecycleBinFolder,
getOperationsFolders,
} from "../../../store/files/selectors";
import { ThirdPartyMoveDialog } from "../../dialogs";
@ -212,7 +212,7 @@ const mapStateToProps = (state) => {
//selection: getSelection(state),
//expandedKeys: getPathParts(state),
//currentFolderId: getSelectedFolderId(state),
isRecycleBin: getIsRecycleBinFolder(state),
//isRecycleBin: getIsRecycleBinFolder(state),
operationsFolders: getOperationsFolders(state),
};
};
@ -228,12 +228,14 @@ export default connect(mapStateToProps, {
})(
inject(({ store, mainFilesStore }) => {
const { filesStore } = mainFilesStore;
const { selection, selectedFolderStore } = filesStore;
const { selection, selectedFolderStore, treeFoldersStore } = filesStore;
const { isRecycleBinFolder } = treeFoldersStore;
return {
expandedKeys: selectedFolderStore.pathParts,
currentFolderId: selectedFolderStore.id,
selection,
isRecycleBin: isRecycleBinFolder,
};
})(withRouter(observer(OperationsPanel)))
);

View File

@ -33,7 +33,7 @@ import {
//getIsLoading,
//getFiles,
//getFolders,
getIsPrivacyFolder,
//getIsPrivacyFolder,
//getUploadPanelVisible,
getUploadSelection,
} from "../../../store/files/selectors";
@ -56,12 +56,12 @@ const i18n = createI18N({
const { changeLanguage } = commonUtils;
const { ShareAccessRights } = constants;
const { replaceFileStream } = store.auth.actions;
const {
getCurrentUserId,
getSettingsCustomNamesGroupsCaption,
//getSettings,
isDesktopClient,
} = store.auth.selectors;
// const {
// getCurrentUserId,
// getSettingsCustomNamesGroupsCaption,
// getSettings,
// isDesktopClient,
// } = store.auth.selectors;
const SharingBodyStyle = { height: `calc(100vh - 156px)` };
@ -632,11 +632,11 @@ const mapStateToProps = (state, ownProps) => {
getAccessOption: (selection) => getAccessOption(state, selection),
getExternalAccessOption: (selection) =>
getExternalAccessOption(state, selection),
isMyId: getCurrentUserId(state),
//isMyId: getCurrentUserId(state),
selection: selectedFile,
isPrivacy: getIsPrivacyFolder(state),
isDesktop: isDesktopClient(state),
groupsCaption: getSettingsCustomNamesGroupsCaption(state),
//isPrivacy: getIsPrivacyFolder(state),
//isDesktop: isDesktopClient(state),
//groupsCaption: getSettingsCustomNamesGroupsCaption(state),
sharingPanelVisible: getSharePanelVisible(state),
canShareOwnerChange: getCanShareOwnerChange(state),
//isLoading: getIsLoading(state),
@ -668,15 +668,21 @@ export default connect(mapStateToProps, {
});
inject(({ store, mainFilesStore }) => {
const { customNames, isDesktopClient, homepage } = store.settingsStore;
const { filesStore, setIsLoading, isLoading } = mainFilesStore;
const { files, folders, selection } = filesStore;
const { files, folders, selection, treeFoldersStore } = filesStore;
const { isPrivacyFolder } = treeFoldersStore;
return {
homepage: store.settingsStore.homepage,
isMyId: store.userStore.user.id,
groupsCaption: customNames.groupsCaption,
isDesktop: isDesktopClient,
homepage,
files,
folders,
//selection,
isLoading,
isPrivacy: isPrivacyFolder,
setIsLoading,
};

View File

@ -3,7 +3,7 @@ import PropTypes from "prop-types";
import { connect } from "react-redux";
import { Backdrop, Heading, Aside } from "asc-web-components";
import { utils, Loaders, store } from "asc-web-common";
import { utils, Loaders /* store */ } from "asc-web-common";
import { withTranslation, I18nextProvider } from "react-i18next";
import { createI18N } from "../../../helpers/i18n";
@ -32,7 +32,7 @@ const i18n = createI18N({
const { changeLanguage } = utils;
const { getIsTabletView, getSettingsHomepage } = store.auth.selectors;
//const { getIsTabletView, getSettingsHomepage } = store.auth.selectors;
class PureVersionHistoryPanel extends React.Component {
componentDidUpdate(preProps) {
@ -123,8 +123,8 @@ VersionHistoryPanelContainer.propTypes = {
function mapStateToProps(state) {
return {
fileId: getVerHistoryFileId(state),
isTabletView: getIsTabletView(state),
homepage: getSettingsHomepage(state),
//isTabletView: getIsTabletView(state),
//homepage: getSettingsHomepage(state),
//isLoading: getIsLoading(state),
versions: getFileVersions(state),
};
@ -150,6 +150,8 @@ export default connect(
const { isLoading } = mainFilesStore;
return {
isTabletView: store.settingsStore.isTabletView,
homepage: store.settingsStore.homepage,
isLoading,
};
})(observer(VersionHistoryPanel))

View File

@ -1,19 +1,18 @@
import { store as commonStore } from "asc-web-common";
import store from "../store/store";
//import store from "../store/store";
const { getCurrentProduct } = commonStore.auth.selectors;
const { authStore } = commonStore;
//const { getCurrentProduct } = commonStore.auth.selectors;
export const setDocumentTitle = (subTitle = null) => {
const state = store.getState();
const { auth: commonState } = state;
//const state = store.getState();
//const { auth: commonState } = state;
const { isAuthenticated, settings } = commonState;
const { organizationName } = settings;
const { isAuthenticated, settingsStore, product: currentModule } = authStore;
const { organizationName } = settingsStore;
let title;
const currentModule = getCurrentProduct(state);
if (subTitle) {
if (isAuthenticated && currentModule) {
title = subTitle + " - " + currentModule.title;

View File

@ -0,0 +1,142 @@
import { makeObservable } from "mobx";
import { presentInArray } from "../store/files/selectors";
class DocserviceStore {
coauthorDocs = [".pptx", ".ppsx", ".xlsx", ".csv", ".docx", ".txt"];
commentedDocs = [".docx", ".xlsx", ".pptx"];
convertDocs = [
".pptm",
".ppt",
".ppsm",
".pps",
".potx",
".potm",
".pot",
".odp",
".fodp",
".otp",
".xlsm",
".xls",
".xltx",
".xltm",
".xlt",
".ods",
".fods",
".ots",
".docm",
".doc",
".dotx",
".dotm",
".dot",
".odt",
".fodt",
".ott",
".rtf",
];
editedDocs = [
".pptx",
".pptm",
".ppt",
".ppsx",
".ppsm",
".pps",
".potx",
".potm",
".pot",
".odp",
".fodp",
".otp",
".xlsx",
".xlsm",
".xls",
".xltx",
".xltm",
".xlt",
".ods",
".fods",
".ots",
".csv",
".docx",
".docm",
".doc",
".dotx",
".dotm",
".dot",
".odt",
".fodt",
".ott",
".txt",
".rtf",
".mht",
".html",
".htm",
];
encryptedDocs = [".docx", ".xlsx", ".pptx"];
formfillingDocs = [".docx"];
customfilterDocs = [".xlsx"];
reviewedDocs = [".docx"];
viewedDocs = [
".pptx",
".pptm",
".ppt",
".ppsx",
".ppsm",
".pps",
".potx",
".potm",
".pot",
".odp",
".fodp",
".otp",
".gslides",
".xlsx",
".xlsm",
".xls",
".xltx",
".xltm",
".xlt",
".ods",
".fods",
".ots",
".gsheet",
".csv",
".docx",
".docm",
".doc",
".dotx",
".dotm",
".dot",
".odt",
".fodt",
".ott",
".gdoc",
".txt",
".rtf",
".mht",
".html",
".htm",
".epub",
".pdf",
".djvu",
".xps",
];
constructor() {
makeObservable(this, {});
}
canWebEdit = (extension) => {
presentInArray(this.editedDocs, extension);
};
getWebEditSelected = (selection, editedFormats) => {
//getSelection,
//getEditedFormats,
return selection.some((selected) => {
if (selected.isFolder === true || !selected.fileExst) return false;
return editedFormats.find((format) => selected.fileExst === format);
});
};
}
export default DocserviceStore;

View File

@ -2,6 +2,10 @@ import { makeObservable, action, observable, computed } from "mobx";
import { api, constants, store } from "asc-web-common";
import FileActionStore from "./FileActionStore";
import SelectedFolderStore from "./SelectedFolderStore";
import TreeFoldersStore from "./TreeFoldersStore";
import FormatsStore from "./FormatsStore";
import MediaViewersFormatsStore from "./MediaViewersFormatsStore";
import DocserviceStore from "./DocserviceStore";
import { createTreeFolders } from "./files/selectors";
const { FilesFilter } = api;
@ -11,10 +15,15 @@ const { authStore } = store;
class FilesStore {
fileActionStore = null;
selectedFolderStore = null;
treeFoldersStore = null;
formatsStore = null;
mediaViewersFormatsStore = null;
docserviceStore = null;
firstLoad = true;
files = [];
folders = [];
treeFolders = [];
selection = [];
selected = "close";
filter = FilesFilter.getDefault(); //TODO: FILTER
@ -23,6 +32,10 @@ class FilesStore {
makeObservable(this, {
fileActionStore: observable,
selectedFolderStore: observable,
treeFoldersStore: observable,
formatsStore: observable,
mediaViewersFormatsStore: observable,
docserviceStore: observable,
firstLoad: observable,
files: observable,
@ -31,6 +44,8 @@ class FilesStore {
filter: observable, //TODO: FILTER
selection: observable,
filesList: computed,
setFirstLoad: action,
setFiles: action,
setFolders: action,
@ -38,13 +53,16 @@ class FilesStore {
setFilesFilter: action, //TODO: FILTER
setSelection: action,
fetchFiles: action,
filesList: computed,
selectFile: action,
deselectFile: action,
});
this.fileActionStore = new FileActionStore();
this.selectedFolderStore = new SelectedFolderStore();
this.treeFoldersStore = new TreeFoldersStore();
this.formatsStore = new FormatsStore();
this.mediaViewersFormatsStore = new MediaViewersFormatsStore();
this.docserviceStore = new DocserviceStore();
}
setFirstLoad = (firstLoad) => {
@ -76,11 +94,10 @@ class FilesStore {
const filterData = filter ? filter.clone() : FilesFilter.getDefault();
filterData.folder = folderId;
//const state = getState();
//const privacyFolder = getPrivacyFolder(state);
const { privacyFolder } = this.treeFoldersStore;
/*if (privacyFolder && privacyFolder.id === +folderId) {
const isEncryptionSupported = isEncryptionSupport(state);
if (privacyFolder && privacyFolder.id === +folderId) {
const isEncryptionSupported = authStore.settingsStore.isEncryptionSupport;
if (!isEncryptionSupported) {
filterData.treeFolders = createTreeFolders(
@ -88,24 +105,23 @@ class FilesStore {
filterData
);
filterData.total = 0;
dispatch(setFilesFilter(filterData));
this.setFilesFilter(filterData); //TODO: FILTER
if (clearFilter) {
dispatch(setFolders([]));
dispatch(setFiles([]));
dispatch(setAction({ type: null }));
dispatch(setSelected("close")); //this.setSelected("close");
dispatch(
setSelectedFolder({
folders: [],
...privacyFolder,
pathParts: privacyFolder.pathParts,
...{ new: 0 },
})
);
this.setFolders([]);
this.setFiles([]);
this.fileActionStore.setAction({ type: null });
this.setSelected("close");
this.selectedFolderStore.setSelectedFolder({
folders: [],
...privacyFolder,
pathParts: privacyFolder.pathParts,
...{ new: 0 },
});
}
return Promise.resolve();
}
}*/
}
return api.files.getFolder(folderId, filter).then((data) => {
const isEncryptionSupport = authStore.settingsStore.isEncryptionSupport;
@ -137,6 +153,214 @@ class FilesStore {
});
};
isFileSelected = (selection, fileId, parentId) => {
const item = selection.find(
(x) => x.id === fileId && x.parentId === parentId
);
return item !== undefined;
};
selectFile = (file) => {
const { id, parentId } = file;
const isFileSelected = this.isFileSelected(this.selection, id, parentId);
if (!isFileSelected) this.selection.push(file);
};
deselectFile = (file) => {
const { id, parentId } = file;
const isFileSelected = this.isFileSelected(this.selection, id, parentId);
if (isFileSelected)
this.selection = this.selection.filter((x) => x.id !== id);
};
isCanShare = () => {
const folderType = this.selectedFolderStore.rootFolderType;
const isAdmin = authStore.isAdmin;
const isVisitor =
(authStore.userStore.user && authStore.userStore.user.isVisitor) || false;
if (isVisitor) {
return false;
}
switch (folderType) {
case FolderType.USER:
return true;
case FolderType.SHARE:
return false;
case FolderType.COMMON:
return isAdmin;
case FolderType.TRASH:
return false;
case FolderType.Favorites:
return false;
case FolderType.Recent:
return false;
case FolderType.Privacy:
return true;
default:
return false;
}
};
getFilesContextOptions = (item, canOpenPlayer, canShare) => {
const {
isRecycleBinFolder,
isPrivacyFolder,
isRecentFolder,
//isFavoritesFolder
} = this.treeFoldersStore;
const options = [];
const isVisitor =
(authStore.userStore.user && authStore.userStore.user.isVisitor) || false;
const canChangeOwner = this.getCanShareOwnerChange();
const haveAccess = this.getUserAccess();
const isRootFolder =
this.selectedFolderStore.pathParts &&
this.selectedFolderStore.pathParts.length <= 1;
const isFile = !!item.fileExst;
const isFavorite = item.fileStatus === 32;
const isFullAccess = item.access < 2;
const isThirdPartyFolder = item.providerKey && isRootFolder;
if (item.id <= 0) return [];
if (isRecycleBinFolder) {
options.push("download");
options.push("download-as");
options.push("restore");
options.push("separator0");
options.push("delete");
} else if (isPrivacyFolder) {
if (isFile) {
options.push("sharing-settings");
options.push("separator0");
options.push("show-version-history");
options.push("separator1");
}
options.push("download");
options.push("move");
options.push("rename");
options.push("separator2");
options.push("delete");
} else {
if (!isFile) {
options.push("open");
options.push("separator0");
}
//TODO: use canShare selector
if (
/*!(isRecentFolder || isFavoritesFolder || isVisitor) && */ canShare
) {
options.push("sharing-settings");
}
if (isFile && !isVisitor) {
options.push("send-by-email");
}
canChangeOwner && options.push("owner-change");
options.push("link-for-portal-users");
if (!isVisitor) {
options.push("separator1");
}
if (isFile) {
options.push("show-version-history");
if (!isVisitor) {
if (isFullAccess && !item.providerKey && !canOpenPlayer) {
options.push("finalize-version");
options.push("block-unblock-version");
}
options.push("separator2");
if (isRecentFolder) {
options.push("open-location");
}
if (!isFavorite) {
options.push("mark-as-favorite");
}
} else {
options.push("separator3");
}
if (canOpenPlayer) {
options.push("view");
} else {
options.push("edit");
options.push("preview");
}
options.push("download");
}
if (!isVisitor) {
!isThirdPartyFolder && haveAccess && options.push("move");
options.push("copy");
if (isFile) {
options.push("duplicate");
}
haveAccess && options.push("rename");
isThirdPartyFolder &&
haveAccess &&
options.push("change-thirdparty-info");
options.push("separator3");
haveAccess && options.push("delete");
} else {
options.push("copy");
}
}
if (isFavorite && !isRecycleBinFolder) {
options.push("remove-from-favorites");
}
return options;
};
getUserAccess = () => {
switch (this.selectedFolderStore.rootFolderType) {
case FolderType.USER:
return true;
case FolderType.SHARE:
return false;
case FolderType.COMMON:
return (
authStore.isAdmin ||
this.selection.some((x) => x.access === 0 || x.access === 1)
);
case FolderType.Privacy:
return true;
case FolderType.TRASH:
return true;
default:
return false;
}
};
getCanShareOwnerChange = () => {
const { commonFolder } = this.treeFoldersStore;
const pathParts = this.selectedFolderStore.pathParts;
const userId = authStore.userStore.user.id;
return (
(authStore.isAdmin ||
(this.selection.length && this.selection[0].createdBy.id === userId)) &&
pathParts &&
commonFolder &&
commonFolder.id === pathParts[0] &&
this.selection.length &&
!this.selection[0].providerKey
);
};
get filesList() {
const items =
this.folders && this.files
@ -176,8 +400,17 @@ class FilesStore {
providerKey,
} = item;
//const canOpenPlayer = isMediaOrImage(item.fileExst)(state);
//const contextOptions = getFilesContextOptions(item,isRecycleBin,isRecent,isFavorites,isVisitor,canOpenPlayer,canChangeOwner,haveAccess,canShare,isPrivacy,isRootFolder);
const canOpenPlayer = this.mediaViewersFormatsStore.isMediaOrImage(
item.fileExst
);
const canShare = this.isCanShare();
const contextOptions = this.getFilesContextOptions(
item,
canOpenPlayer,
canShare
);
const checked = this.isFileSelected(this.selection, id, parentId);
const selectedItem = this.selection.find(
@ -186,22 +419,23 @@ class FilesStore {
const isFolder = selectedItem ? false : fileExst ? false : true;
//const draggable = selectedItem && !isRecycleBin && selectedItem.id !== actionId;
const draggable =
selectedItem &&
!this.treeFoldersStore.isRecycleBinFolder &&
selectedItem.id !== this.fileActionStore.id;
let value = fileExst ? `file_${id}` : `folder_${id}`;
value += draggable ? "_draggable" : "";
//const isCanWebEdit = canWebEdit(item.fileExst)(state);
//const icon = getIcon(state, 24, fileExst, providerKey);
//value += draggable ? "_draggable" : "";
const isCanWebEdit = this.docserviceStore.canWebEdit(item.fileExst);
const icon = this.formatsStore.getIcon(24, fileExst, providerKey);
return {
access,
checked,
comment,
contentLength,
//contextOptions,
contextOptions,
created,
createdBy,
fileExst,
@ -210,7 +444,7 @@ class FilesStore {
fileType,
folderId,
foldersCount,
//icon,
icon,
id,
isFolder,
locked,
@ -218,7 +452,7 @@ class FilesStore {
parentId,
pureContentLength,
rootFolderType,
//selectedItem,
selectedItem,
shared,
title,
updated,
@ -229,36 +463,13 @@ class FilesStore {
viewUrl,
webUrl,
providerKey,
//draggable,
//canOpenPlayer,
//canWebEdit: isCanWebEdit,
//canShare,
draggable,
canOpenPlayer,
canWebEdit: isCanWebEdit,
canShare,
};
});
}
isFileSelected = (selection, fileId, parentId) => {
const item = selection.find(
(x) => x.id === fileId && x.parentId === parentId
);
return item !== undefined;
};
selectFile = (file) => {
console.log("selectFile", file);
const { id, parentId } = file;
const isFileSelected = this.isFileSelected(this.selection, id, parentId);
console.log("isFileSelected", isFileSelected);
if (!isFileSelected) this.selection.push(file);
};
deselectFile = (file) => {
const { id, parentId } = file;
const isFileSelected = this.isFileSelected(this.selection, id, parentId);
if (isFileSelected)
this.selection = this.selection.filter((x) => x.id !== id);
};
}
export default FilesStore;

View File

@ -0,0 +1,391 @@
import { makeObservable } from "mobx";
import { presentInArray } from "../store/files/selectors";
class FormatsStore {
archive = [
".zip",
".rar",
".ace",
".arc",
".arj",
".bh",
".cab",
".enc",
".gz",
".ha",
".jar",
".lha",
".lzh",
".pak",
".pk3",
".tar",
".tgz",
".gz",
".uu",
".uue",
".xxe",
".z",
".zoo",
];
image = [
".bmp",
".cod",
".gif",
".ief",
".jpe",
".jpg",
".tif",
".cmx",
".ico",
".pnm",
".pbm",
".ppm",
".psd",
".rgb",
".xbm",
".xpm",
".xwd",
".png",
".ai",
".jpeg",
];
sound = [
".aac",
".ac3",
".aiff",
".amr",
".ape",
".cda",
".flac",
".m4a",
".mid",
".mka",
".mp3",
".mpc",
".oga",
".ogg",
".pcm",
".ra",
".raw",
".wav",
".wma",
];
video = [
".3gp",
".asf",
".avi",
".f4v",
".fla",
".flv",
".m2ts",
".m4v",
".mkv",
".mov",
".mp4",
".mpeg",
".mpg",
".mts",
".ogv",
".svi",
".vob",
".webm",
".wmv",
];
html = [".htm", ".mht", ".html"];
ebook = [".fb2", ".ibk", ".prc", ".epub"];
document = [
".doc",
".docx",
".docm",
".dot",
".dotx",
".dotm",
".odt",
".fodt",
".ott",
".rtf",
".txt",
".html",
".htm",
".mht",
".pdf",
".djvu",
".fb2",
".epub",
".xps",
".doct",
".docy",
".gdoc",
];
presentation = [
".pps",
".ppsx",
".ppsm",
".ppt",
".pptx",
".pptm",
".pot",
".potx",
".potm",
".odp",
".fodp",
".otp",
".pptt",
".ppty",
".gslides",
];
spreadsheet = [
".xls",
".xlsx",
".xlsm",
".xlt",
".xltx",
".xltm",
".ods",
".fods",
".ots",
".csv",
".xlst",
".xlsy",
".xlsb",
".gsheet",
];
constructor() {
makeObservable(this, {});
}
/*
export const getArchiveFormats = (state) => {
return state.files.formats.archive;
};
export const getImageFormats = (state) => {
return state.files.formats.image;
};
export const getSoundFormats = (state) => {
return state.files.formats.sound;
};
export const getVideoFormats = (state) => {
return state.files.formats.video;
};
export const getHtmlFormats = (state) => {
return state.files.formats.html;
};
export const getEbookFormats = (state) => {
return state.files.formats.ebook;
};
export const getDocumentFormats = (state) => {
return state.files.formats.document;
};
export const getPresentationFormats = (state) => {
return state.files.formats.presentation;
};
export const getSpreadsheetFormats = (state) => {
return state.files.formats.spreadsheet;
};
*/
// canWebEdit = (extension) => {
// return createSelector(getEditedFormats, (formats) => {
// return presentInArray(formats, extension);
// });
// };
// canWebComment = (extension) => {
// return createSelector(getCommentedFormats, (formats) => {
// return presentInArray(formats, extension);
// });
// };
// canWebReview = (extension) => {
// return createSelector(getReviewedFormats, (formats) => {
// return presentInArray(formats, extension);
// });
// };
// canWebFilterEditing = (extension) => {
// return createSelector(getWebFilterFormats, (formats) => {
// return presentInArray(formats, extension);
// });
// };
// canFormFillingDocs = (extension) => {
// return createSelector(getFormFillingFormats, (formats) => {
// return presentInArray(formats, extension);
// });
// };
// canConvert = (extension) => {
// return createSelector(getConvertedFormats, (formats) => {
// return presentInArray(formats, extension);
// });
// };
isArchive = (extension) => presentInArray(this.archive, extension);
isImage = (extension) => presentInArray(this.image, extension);
isSound = (extension) => presentInArray(this.sound, extension);
// isVideo = (extension) => {
// return createSelector(getMediaViewerMediaFormats, (formats) => {
// return presentInArray(formats, extension);
// });
// };
isHtml = (extension) => presentInArray(this.html, extension);
isEbook = (extension) => presentInArray(this.ebook, extension);
isDocument = (extension) => presentInArray(this.document, extension);
isPresentation = (extension) => presentInArray(this.presentation, extension);
isSpreadsheet = (extension) => presentInArray(this.spreadsheet, extension);
getIcon = (size = 24, fileExst = null, providerKey = null) => {
if (fileExst) {
const isArchiveItem = this.isArchive(fileExst);
const isImageItem = this.isImage(fileExst);
const isSoundItem = this.isSound(fileExst);
const isHtmlItem = this.isHtml(fileExst);
const icon = this.getFileIcon(
fileExst,
size,
isArchiveItem,
isImageItem,
isSoundItem,
isHtmlItem
);
return icon;
} else {
return this.getFolderIcon(providerKey, size);
}
};
getFolderIcon = (providerKey, size = 32) => {
const folderPath = `images/icons/${size}`;
switch (providerKey) {
case "Box":
case "BoxNet":
return `${folderPath}/folder/box.svg`;
case "DropBox":
case "DropboxV2":
return `${folderPath}/folder/dropbox.svg`;
case "Google":
case "GoogleDrive":
return `${folderPath}/folder/google.svg`;
case "OneDrive":
return `${folderPath}/folder/onedrive.svg`;
case "SharePoint":
return `${folderPath}/folder/sharepoint.svg`;
case "Yandex":
return `${folderPath}/folder/yandex.svg`;
case "kDrive":
return `${folderPath}/folder/kdrive.svg`;
case "WebDav":
return `${folderPath}/folder/webdav.svg`;
default:
return `${folderPath}/folder.svg`;
}
};
getFileIcon = (
extension,
size = 32,
archive = false,
image = false,
sound = false,
html = false
) => {
const folderPath = `images/icons/${size}`;
if (archive) return `${folderPath}/file_archive.svg`;
if (image) return `${folderPath}/image.svg`;
if (sound) return `${folderPath}/sound.svg`;
if (html) return `${folderPath}/html.svg`;
switch (extension) {
case ".avi":
return `${folderPath}/avi.svg`;
case ".csv":
return `${folderPath}/csv.svg`;
case ".djvu":
return `${folderPath}/djvu.svg`;
case ".doc":
return `${folderPath}/doc.svg`;
case ".docx":
return `${folderPath}/docx.svg`;
case ".dvd":
return `${folderPath}/dvd.svg`;
case ".epub":
return `${folderPath}/epub.svg`;
case ".pb2":
return `${folderPath}/fb2.svg`;
case ".flv":
return `${folderPath}/flv.svg`;
case ".iaf":
return `${folderPath}/iaf.svg`;
case ".m2ts":
return `${folderPath}/m2ts.svg`;
case ".mht":
return `${folderPath}/mht.svg`;
case ".mkv":
return `${folderPath}/mkv.svg`;
case ".mov":
return `${folderPath}/mov.svg`;
case ".mp4":
return `${folderPath}/mp4.svg`;
case ".mpg":
return `${folderPath}/mpg.svg`;
case ".odp":
return `${folderPath}/odp.svg`;
case ".ods":
return `${folderPath}/ods.svg`;
case ".odt":
return `${folderPath}/odt.svg`;
case ".pdf":
return `${folderPath}/pdf.svg`;
case ".pps":
return `${folderPath}/pps.svg`;
case ".ppsx":
return `${folderPath}/ppsx.svg`;
case ".ppt":
return `${folderPath}/ppt.svg`;
case ".pptx":
return `${folderPath}/pptx.svg`;
case ".rtf":
return `${folderPath}/rtf.svg`;
case ".svg":
return `${folderPath}/svg.svg`;
case ".txt":
return `${folderPath}/txt.svg`;
case ".webm":
return `${folderPath}/webm.svg`;
case ".xls":
return `${folderPath}/xls.svg`;
case ".xlsx":
return `${folderPath}/xlsx.svg`;
case ".xps":
return `${folderPath}/xps.svg`;
case ".xml":
return `${folderPath}/xml.svg`;
default:
return `${folderPath}/file.svg`;
}
};
}
export default FormatsStore;

View File

@ -1,6 +1,5 @@
import { makeObservable, action, observable } from "mobx";
import { store, utils } from "asc-web-common";
import TreeFoldersStore from "./TreeFoldersStore";
import FilesStore from "./FilesStore";
import config from "../../package.json";
@ -11,18 +10,15 @@ class MainFilesStore {
isLoading = false;
dragging = false;
treeFoldersStore = null;
filesStore = null;
constructor() {
this.treeFoldersStore = new TreeFoldersStore();
this.filesStore = new FilesStore();
const pathname = window.location.pathname.toLowerCase();
this.isEditor = pathname.indexOf("doceditor") !== -1;
makeObservable(this, {
treeFoldersStore: observable,
filesStore: observable,
isLoaded: observable,
isLoading: observable,
@ -47,7 +43,7 @@ class MainFilesStore {
this.isLoading = isLoading;
};
initFiles = async () => {
initFiles = () => {
const isAuthenticated = authStore.isAuthenticated;
const {
getPortalCultures,
@ -71,17 +67,15 @@ class MainFilesStore {
if (!this.isEditor) {
requests.push(
getPortalCultures(),
this.treeFoldersStore.fetchTreeFolders()
this.filesStore.treeFoldersStore.fetchTreeFolders()
);
if (isDesktopClient) {
requests.push(getIsEncryptionSupport(), getEncryptionKeys());
}
}
return Promise.all(requests).finally(() => {
this.setIsLoaded(true);
utils.updateTempContent();
});
return Promise.all(requests);
};
}

View File

@ -0,0 +1,47 @@
import { makeObservable } from "mobx";
class MediaViewersFormatsStore {
images = [
".bmp",
".gif",
".jpeg",
".jpg",
".png",
".ico",
".tif",
".tiff",
".webp",
];
media = [
".aac",
".flac",
".m4a",
".mp3",
".oga",
".ogg",
".wav",
".f4v",
".m4v",
".mov",
".mp4",
".ogv",
".webm",
".avi",
".mpg",
".mpeg",
".wmv",
];
constructor() {
makeObservable(this, {});
}
isMediaOrImage = (fileExst) => {
if (this.media.includes(fileExst) || this.images.includes(fileExst)) {
return true;
}
return false;
};
}
export default MediaViewersFormatsStore;

View File

@ -1,15 +1,173 @@
import { makeAutoObservable } from "mobx";
import { api } from "asc-web-common";
import { makeObservable, observable, computed, action } from "mobx";
import { api, constants } from "asc-web-common";
import SelectedFolderStore from "./SelectedFolderStore";
const { FolderType } = constants;
class TreeFoldersStore {
selectedFolderStore = null;
treeFolders = [];
constructor() {
makeAutoObservable(this);
makeObservable(this, {
selectedFolderStore: observable,
treeFolders: observable,
myFolderId: computed,
//shareFolderId: computed,
//favoritesFolderId: computed,
//recentFolderId: computed,
commonFolderId: computed,
myFolder: computed,
shareFolder: computed,
favoritesFolder: computed,
recentFolder: computed,
privacyFolder: computed,
commonFolder: computed,
recycleBinFolder: computed,
isMyFolder: computed,
isShareFolder: computed,
isFavoritesFolder: computed,
isRecentFolder: computed,
isPrivacyFolder: computed,
isCommonFolder: computed,
isRecycleBinFolder: computed,
fetchTreeFolders: action,
setTreeFolders: action,
});
this.selectedFolderStore = new SelectedFolderStore();
}
fetchTreeFolders = async () => {
this.treeFolders = await api.files.getFoldersTree();
const treeFolders = await api.files.getFoldersTree();
this.setTreeFolders(treeFolders);
};
setTreeFolders = (treeFolders) => {
this.treeFolders = treeFolders;
};
/////////////////////////////////////TODO: FOLDER
get myFolder() {
return this.treeFolders.find((x) => x.rootFolderName === "@my");
}
get shareFolder() {
return this.treeFolders.find((x) => x.rootFolderName === "@share");
}
get favoritesFolder() {
return this.treeFolders.find((x) => x.rootFolderName === "@favorites");
}
get recentFolder() {
return this.treeFolders.find((x) => x.rootFolderName === "@recent");
}
get privacyFolder() {
return this.treeFolders.find(
(x) => x.rootFolderType === FolderType.Privacy
);
}
get commonFolder() {
return this.treeFolders.find((x) => x.rootFolderName === "@common");
}
get recycleBinFolder() {
return this.treeFolders.find((x) => x.rootFolderName === "@trash");
}
/////////////////////////////////////TODO: ID
get myFolderId() {
return this.myFolder ? this.myFolder.id : null;
}
// get shareFolderId() {
// return this.shareFolder ?this.shareFolder.id : null;
// }
// get favoritesFolderId() {
// return this.favoritesFolder ? this.favoritesFolder.id : null;
// }
// get recentFolderId() {
// return this.recentFolder ? this.recentFolder.id : null;
// }
get commonFolderId() {
return this.commonFolder ? this.commonFolder.id : null;
}
/////////////////////////////////////TODO: IS
get isMyFolder() {
return this.myFolder && this.myFolder.id === this.selectedFolderStore.id;
}
get isShareFolder() {
return (
this.shareFolder && this.shareFolder.id === this.selectedFolderStore.id
);
}
get isFavoritesFolder() {
return (
this.favoritesFolder &&
this.selectedFolderStore.id === this.favoritesFolder.id
);
}
get isRecentFolder() {
return (
this.recentFolder && this.selectedFolderStore.id === this.recentFolder.id
);
}
get isPrivacyFolder() {
return (
this.privacyFolder &&
this.privacyFolder.rootFolderType ===
this.selectedFolderStore.rootFolderType
);
}
get isCommonFolder() {
return (
this.commonFolder && this.commonFolder.id === this.selectedFolderStore.id
);
}
get isRecycleBinFolder() {
return (
this.recycleBinFolder &&
this.selectedFolderStore.id === this.recycleBinFolder.id
);
}
}
export default TreeFoldersStore;
/*
export const getMyDirectoryFolders = createSelector(getMyFolder, (myFolder) => {
if (myFolder) return myFolder.folders;
});
export const getCommonDirectoryFolders = createSelector(
getCommonFolder,
(commonFolder) => {
if (commonFolder) return commonFolder.folders;
}
);
*/

View File

@ -11,7 +11,7 @@ const {
isDesktopClient,
} = store.auth.selectors;
const presentInArray = (array, search, caseInsensitive = false) => {
export const presentInArray = (array, search, caseInsensitive = false) => {
let pattern = caseInsensitive ? search.toLowerCase() : search;
const result = array.findIndex((item) => item === pattern);
return result === -1 ? false : true;