import React, { Component, Fragment } from 'react'; import PropTypes from 'prop-types'; import cookie from 'react-cookies'; import { gettext, repoID, serviceUrl, slug } from '../../utils/constants'; import { seafileAPI } from '../../utils/seafile-api'; import { Utils } from '../../utils/utils'; import Repo from '../../models/repo'; import CommonToolbar from '../../components/toolbar/common-toolbar'; import ViewModeToolbar from '../../components/toolbar/view-mode-toolbar'; import DirOperationToolBar from '../../components/toolbar/dir-operation-toolbar'; import MutipleDirOperationToolbar from '../../components/toolbar/mutilple-dir-operation-toolbar'; import CurDirPath from '../../components/cur-dir-path'; import MarkdownViewer from '../../components/markdown-viewer'; import DirentListView from '../../components/dirent-list-view/dirent-list-view'; import DirentDetail from '../../components/dirent-detail/dirent-details'; import FileUploader from '../../components/file-uploader/file-uploader'; const propTypes = { content: PropTypes.string, lastModified: PropTypes.string, latestContributor: PropTypes.string, permission: PropTypes.string, path: PropTypes.string.isRequired, // whether the file or dir corresponding to the path exist pathExist: PropTypes.bool.isRequired, isFileLoading: PropTypes.bool.isRequired, isViewFile: PropTypes.bool.isRequired, isDirentListLoading: PropTypes.bool.isRequired, isDirentSelected: PropTypes.bool.isRequired, isAllDirentSelected: PropTypes.bool.isRequired, direntList: PropTypes.array.isRequired, selectedDirentList: PropTypes.array.isRequired, updateDirent: PropTypes.func.isRequired, onSideNavMenuClick: PropTypes.func.isRequired, onSearchedClick: PropTypes.func.isRequired, onMainNavBarClick: PropTypes.func.isRequired, onLinkClick: PropTypes.func.isRequired, onItemClick: PropTypes.func.isRequired, onAllDirentSelected: PropTypes.func.isRequired, onItemSelected: PropTypes.func.isRequired, onItemDelete: PropTypes.func.isRequired, onItemRename: PropTypes.func.isRequired, onItemMove: PropTypes.func.isRequired, onItemCopy: PropTypes.func.isRequired, onAddFile: PropTypes.func.isRequired, onAddFolder: PropTypes.func.isRequired, onFileTagChanged: PropTypes.func.isRequired, onItemsMove: PropTypes.func.isRequired, onItemsCopy: PropTypes.func.isRequired, onItemsDelete: PropTypes.func.isRequired, }; class MainPanel extends Component { constructor(props) { super(props); this.state = { currentMode: 'wiki', isDirentDetailShow: false, currentDirent: null, direntPath: '', currentRepo: null, isRepoOwner: false, }; } componentDidMount() { seafileAPI.getRepoInfo(repoID).then(res => { let repo = new Repo(res.data); seafileAPI.getAccountInfo().then(res => { let user_email = res.data.email; let isRepoOwner = repo.owner_email === user_email; this.setState({ currentRepo: repo, isRepoOwner: isRepoOwner, }); }); }); } switchViewMode = (mode) => { cookie.save('view_mode', mode, { path: '/' }); let dirPath = this.props.isViewFile ? Utils.getDirName(this.props.path) : this.props.path; window.location.href = serviceUrl + '/#common/lib/' + repoID + dirPath; } onSideNavMenuClick = () => { this.props.onSideNavMenuClick(); } onMainNavBarClick = (path) => { this.props.onMainNavBarClick(path); } onItemDetails = (dirent, direntPath) => { this.setState({ currentDirent: dirent, direntPath: direntPath, isDirentDetailShow: true, }); } onItemDetailsClose = () => { this.setState({isDirentDetailShow: false}); } onFileTagChanged = (dirent, direntPath) => { this.props.onFileTagChanged(dirent, direntPath); } onUploadFile = (e) => { e.nativeEvent.stopImmediatePropagation(); this.uploader.onFileUpload(); } onUploadFolder = (e) => { e.nativeEvent.stopImmediatePropagation(); this.uploader.onFolderUpload(); } onFileSuccess = (file) => { // todo } render() { return (
{this.props.isDirentSelected ? : }
{ !this.props.pathExist ?

{gettext('Folder does not exist.')}

: { this.props.isViewFile ? : this.uploader = uploader} dragAndDrop={true} path={this.props.path} onFileSuccess={this.onFileSuccess} direntList={this.props.direntList} /> } }
{ this.state.isDirentDetailShow &&
}
); } } MainPanel.propTypes = propTypes; export default MainPanel;