import React, { Fragment } from 'react'; import PropTypes from 'prop-types'; import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap'; import { Utils } from '../../utils/utils'; import { gettext } from '../../utils/constants'; 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'; import ViewModeToolbar from './view-mode-toolbar'; const propTypes = { path: PropTypes.string.isRequired, repoID: PropTypes.string.isRequired, repoName: PropTypes.string.isRequired, repoEncrypted: PropTypes.bool.isRequired, enableDirPrivateShare: PropTypes.bool.isRequired, userPerm: PropTypes.string.isRequired, isGroupOwnedRepo: PropTypes.bool.isRequired, showShareBtn: PropTypes.bool.isRequired, onAddFile: PropTypes.func.isRequired, onAddFolder: PropTypes.func.isRequired, onUploadFile: PropTypes.func.isRequired, onUploadFolder: PropTypes.func.isRequired, direntList: PropTypes.array.isRequired, currentMode: PropTypes.string.isRequired, switchViewMode: PropTypes.func.isRequired, }; class DirOperationToolbar extends React.Component { constructor(props) { super(props); this.state = { fileType: '.md', isCreateFileDialogShow: false, isCreateFolderDialogShow: false, isUploadMenuShow: false, isCreateMenuShow: false, isShareDialogShow: false, operationMenuStyle: '', isMobileOpMenuOpen: false }; } componentDidMount() { document.addEventListener('click', this.hideOperationMenu); } componentWillUnmount() { document.removeEventListener('click', this.hideOperationMenu); } toggleMobileOpMenu = () => { this.setState({isMobileOpMenuOpen: !this.state.isMobileOpMenuOpen}); } hideOperationMenu = () => { this.setState({ isUploadMenuShow: false, isCreateMenuShow: false, }); } toggleOperationMenu = (e) => { e.nativeEvent.stopImmediatePropagation(); let targetRect = e.target.getBoundingClientRect(); let left = targetRect.left; let top = targetRect.bottom; let style = {position: 'fixed', display: 'block', left: left, top: top}; this.setState({operationMenuStyle: style}); } 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 = () => { 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); } checkDuplicatedName = (newName) => { let direntList = this.props.direntList; let isDuplicated = direntList.some(object => { return object.name === newName; }); return isDuplicated; } render() { let { path, repoName, userPerm } = this.props; if (userPerm !== 'rw' && userPerm !== 'admin') { return ''; } let itemType = path === '/' ? 'library' : 'dir'; let itemName = path == '/' ? repoName : Utils.getFolderName(path); let content = null; if (Utils.isDesktop()) { let { showShareBtn } = this.props; content = ( {Utils.isSupportUploadFolder() ? : } {showShareBtn && } ); } else { content = ( {gettext('Upload')} {gettext('New Folder')} {gettext('New File')} ); } return (
{content}
{this.state.isUploadMenuShow && ( )} {this.state.isCreateMenuShow && ( )}
{Utils.isDesktop() && } {this.state.isCreateFileDialogShow && ( )} {this.state.isCreateFolderDialogShow && ( )} {this.state.isShareDialogShow && }
); } } DirOperationToolbar.propTypes = propTypes; export default DirOperationToolbar;