import React, { Fragment } from 'react'; import PropTypes from 'prop-types'; import { Utils } from '../../utils/utils'; import { gettext, siteRoot } from '../../utils/constants'; import { seafileAPI } from '../../utils/seafile-api'; import ModalPortal from '../modal-portal'; import CreateFolder from '../../components/dialog/create-folder-dialog'; import CreateFile from '../../components/dialog/create-file-dialog'; import ShareDialog from '../../components/dialog/share-dialog'; const propTypes = { isViewFile: PropTypes.bool, // just for view file, permission: PropTypes.string, //just for view file, and premission is file permission path: PropTypes.string.isRequired, repoID: PropTypes.string.isRequired, onAddFile: PropTypes.func.isRequired, onAddFolder: PropTypes.func.isRequired, onUploadFile: PropTypes.func.isRequired, onUploadFolder: PropTypes.func.isRequired, isDraft: PropTypes.bool, hasDraft: PropTypes.bool, }; class DirOperationToolbar extends React.Component { constructor(props) { super(props); this.state = { fileType: '.md', isCreateFileDialogShow: false, isCreateFolderDialogShow: false, isUploadMenuShow: false, isCreateMenuShow: false, isShareDialogShow: false, operationMenuStyle: '', }; } componentDidMount() { document.addEventListener('click', this.hideOperationMenu); } componentWillUnmount() { document.removeEventListener('click', this.hideOperationMenu); } hideOperationMenu = () => { this.setState({ isUploadMenuShow: false, isCreateMenuShow: false, }); } toggleOperationMenu = (e) => { e.nativeEvent.stopImmediatePropagation(); let targetRect = e.target.getClientRects()[0]; let left = targetRect.x; let top = targetRect.y + targetRect.height; let style = {position: 'fixed', display: 'block', left: left, top: top}; this.setState({operationMenuStyle: style}); } onEditClick = (e) => { e.preventDefault(); let { path, repoID } = this.props; window.location.href= siteRoot + 'lib/' + repoID + '/file' + path + '?mode=edit'; } onNewDraft = (e) => { e.preventDefault(); let { path, repoID } = this.props; seafileAPI.createDraft(repoID, path).then(res => { window.location.href = siteRoot + 'lib/' + res.data.origin_repo_id + '/file' + res.data.draft_file_path + '?mode=edit'; }); } onUploadClick = (e) => { this.toggleOperationMenu(e); this.setState({ isUploadMenuShow: true, isCreateMenuShow: false, }); } onUploadFile = (e) => { this.setState({isUploadMenuShow: false}); this.props.onUploadFile(e); } onUploadFolder = (e) => { this.setState({isUploadMenuShow: false}); this.props.onUploadFolder(e); } onCreateClick = (e) => { this.toggleOperationMenu(e); this.setState({ isCreateMenuShow: true, isUploadMenuShow: false, }); } onShareClick = (e) => { e.nativeEvent.stopImmediatePropagation(); //for document event this.setState({ isShareDialogShow: !this.state.isShareDialogShow }); } onCreateFolderToggle = () => { this.setState({isCreateFolderDialogShow: !this.state.isCreateFolderDialogShow}); } onCreateFileToggle = () => { this.setState({ isCreateFileDialogShow: !this.state.isCreateFileDialogShow, fileType: '', }); } onCreateMarkdownToggle = () => { this.setState({ isCreateFileDialogShow: !this.state.isCreateFileDialogShow, fileType: '.md' }); } onCreateExcelToggle = () => { this.setState({ isCreateFileDialogShow: !this.state.isCreateFileDialogShow, fileType: '.xlsx' }); } onCreatePPTToggle = () => { this.setState({ isCreateFileDialogShow: !this.state.isCreateFileDialogShow, fileType: '.pptx' }); } onCreateWordToggle = () => { this.setState({ isCreateFileDialogShow: !this.state.isCreateFileDialogShow, fileType: '.docx' }); } onAddFile = (filePath, isDraft) => { this.setState({isCreateFileDialogShow: false}); this.props.onAddFile(filePath, isDraft); } onAddFolder = (dirPath) => { this.setState({isCreateFolderDialogShow: false}); this.props.onAddFolder(dirPath); } onViewReview = () => { this.props.goReviewPage(); } onViewDraft = () => { this.props.goDraftPage(); } render() { let { path, isViewFile } = this.props; let itemType = isViewFile ? 'file' : 'dir'; let itemName = isViewFile ? Utils.getFileName(path) : Utils.getFolderName(path); return (
{(this.props.isViewFile && this.props.permission === 'rw' && !this.props.hasDraft ) && ( )} {(this.props.isViewFile && !this.props.isDraft && !this.props.hasDraft) && ( )} {!this.props.isViewFile && ( {Utils.isSupportUploadFolder() ? : } )}
{this.state.isUploadMenuShow && ( )} {this.state.isCreateMenuShow && ( )} {this.state.isCreateFileDialogShow && ( )} {this.state.isCreateFolderDialogShow && ( )} {this.state.isShareDialogShow && }
); } } DirOperationToolbar.propTypes = propTypes; export default DirOperationToolbar;