import React, { Component } from 'react'; import ReactDom from 'react-dom'; import { Router, navigate } from '@gatsbyjs/reach-router'; import MediaQuery from 'react-responsive'; import { Modal } from 'reactstrap'; import { siteRoot } from './utils/constants'; import { Utils } from './utils/utils'; import SystemNotification from './components/system-notification'; import SidePanel from './components/side-panel'; import MainPanel from './components/main-panel'; import FilesActivities from './pages/dashboard/files-activities'; import MyFileActivities from './pages/dashboard/my-file-activities'; import Starred from './pages/starred/starred'; import LinkedDevices from './pages/linked-devices/linked-devices'; import ShareAdminLibraries from './pages/share-admin/libraries'; import ShareAdminFolders from './pages/share-admin/folders'; import ShareAdminShareLinks from './pages/share-admin/share-links'; import ShareAdminUploadLinks from './pages/share-admin/upload-links'; import SharedLibraries from './pages/shared-libs/shared-libs'; import ShareWithOCM from './pages/share-with-ocm/shared-with-ocm'; import OCMViaWebdav from './pages/ocm-via-webdav/ocm-via-webdav'; import OCMRepoDir from './pages/share-with-ocm/remote-dir-view'; import MyLibraries from './pages/my-libs/my-libs'; import MyLibDeleted from './pages/my-libs/my-libs-deleted'; import PublicSharedView from './pages/shared-with-all'; import LibContentView from './pages/lib-content-view/lib-content-view'; import Group from './pages/groups/group-view'; import Groups from './pages/groups/groups-view'; import InvitationsView from './pages/invitations/invitations-view'; import Wikis from './pages/wikis/wikis'; import Libraries from './pages/libraries'; import MainContentWrapper from './components/main-content-wrapper'; import './css/layout.css'; import './css/toolbar.css'; import './css/search.css'; const FilesActivitiesWrapper = MainContentWrapper(FilesActivities); const MyFileActivitiesWrapper = MainContentWrapper(MyFileActivities); const StarredWrapper = MainContentWrapper(Starred); const LinkedDevicesWrapper = MainContentWrapper(LinkedDevices); const SharedLibrariesWrapper = MainContentWrapper(SharedLibraries); const SharedWithOCMWrapper = MainContentWrapper(ShareWithOCM); const OCMViaWebdavWrapper = MainContentWrapper(OCMViaWebdav); const ShareAdminLibrariesWrapper = MainContentWrapper(ShareAdminLibraries); const ShareAdminFoldersWrapper = MainContentWrapper(ShareAdminFolders); class App extends Component { constructor(props) { super(props); this.state = { isOpen: false, isSidePanelClosed: false, currentTab: '', pathPrefix: [], }; this.dirViewPanels = ['libraries', 'my-libs', 'shared-libs', 'org']; // and group window.onpopstate = this.onpopstate; } onpopstate = (event) => { if (event.state && event.state.currentTab && event.state.pathPrefix) { let { currentTab, pathPrefix } = event.state; this.setState({currentTab, pathPrefix}); } }; UNSAFE_componentWillMount() { if (!Utils.isDesktop()) { this.setState({ isSidePanelClosed: true }); } } navigateClientUrlToLib = () =>{ if (window.location.hash && window.location.hash.indexOf('common/lib') != -1){ let splitUrlArray = window.location.hash.split('/'); let repoID = splitUrlArray[splitUrlArray.length - 2]; let url = siteRoot + 'library/' + repoID + '/'; navigate(url, {repalce: true}); } }; componentDidMount() { // url from client e.g. http://127.0.0.1:8000/#common/lib/34e7fb92-e91d-499d-bcde-c30ea8af9828/ // navigate to library page http://127.0.0.1:8000/library/34e7fb92-e91d-499d-bcde-c30ea8af9828/ this.navigateClientUrlToLib(); let currentTab; // when visit the siteRoot page, highlight the 'Files' tab in the side nav. if (location.pathname == siteRoot) { currentTab = 'libraries'; } else { let href = window.location.href.split('/'); currentTab = href[href.length - 2]; } this.setState({currentTab: currentTab}); } onCloseSidePanel = () => { this.setState({ isSidePanelClosed: !this.state.isSidePanelClosed }); }; onShowSidePanel = () => { this.setState({ isSidePanelClosed: !this.state.isSidePanelClosed }); }; onSearchedClick = (selectedItem) => { if (selectedItem.is_dir === true) { this.setState({currentTab: '', pathPrefix: []}); let url = siteRoot + 'library/' + selectedItem.repo_id + '/' + selectedItem.repo_name + selectedItem.path; navigate(url, {repalce: true}); } else { let url = siteRoot + 'lib/' + selectedItem.repo_id + '/file' + Utils.encodePath(selectedItem.path); let isWeChat = Utils.isWeChat(); if (!isWeChat) { let newWindow = window.open('about:blank'); newWindow.location.href = url; } else { location.href = url; } } }; onGroupChanged = (groupID) => { setTimeout(function(){ let url; if (groupID) { url = siteRoot + 'group/' + groupID + '/'; } else { url = siteRoot + 'libraries/'; } window.location = url.toString(); }, 1); }; tabItemClick = (tabName, groupID) => { let pathPrefix = []; if (groupID || this.dirViewPanels.indexOf(tabName) > -1) { pathPrefix = this.generatorPrefix(tabName, groupID); } this.setState({ currentTab: tabName, pathPrefix: pathPrefix }, () => { let { currentTab, pathPrefix } = this.state; window.history.replaceState({currentTab: currentTab, pathPrefix: pathPrefix}, null); }); if (!Utils.isDesktop() && !this.state.isSidePanelClosed) { this.setState({ isSidePanelClosed: true }); } }; generatorPrefix = (tabName, groupID) => { let pathPrefix = []; if (groupID) { let navTab = { url: siteRoot + 'group/' + groupID + '/', showName: tabName, name: tabName, id: groupID, }; pathPrefix.push(navTab); } else { let navTab = { url: siteRoot + tabName + '/', showName: this.getTabShowName(tabName), name: tabName, id: null, }; pathPrefix.push(navTab); } return pathPrefix; }; getTabShowName = (tabName) => { switch (tabName) { case 'libraries': { return 'Files'; } case 'my-libs': { return 'My Libraries'; } case 'shared-libs': { return 'Shared with me'; } case 'org': { return 'Shared with all'; } } }; toggleSidePanel = () => { this.setState({ isSidePanelClosed: !this.state.isSidePanelClosed }); }; render() { let { currentTab, isSidePanelClosed } = this.state; return (
); } } ReactDom.render(, document.getElementById('wrapper'));