import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { gettext, permission } from '../../utils/constants'; import { Dropdown, DropdownMenu, DropdownToggle, DropdownItem } from 'reactstrap'; import TreeView from '../../components/tree-view/tree-view'; import Logo from '../../components/logo'; import Loading from '../../components/loading'; import ModalPortal from '../../components/modal-portal'; import Delete from '../../components/dialog/delete-dialog'; import Rename from '../../components/dialog/rename-dialog'; import CreateFolder from '../../components/dialog/create-folder-dialog'; import CreateFile from '../../components/dialog/create-file-dialog'; const propTypes = { currentNode: PropTypes.object, isTreeDataLoading: PropTypes.bool.isRequired, treeData: PropTypes.object.isRequired, currentPath: PropTypes.string.isRequired, closeSideBar: PropTypes.bool.isRequired, onCloseSide: PropTypes.func.isRequired, onNodeClick: PropTypes.func.isRequired, onNodeCollapse: PropTypes.func.isRequired, onNodeExpanded: PropTypes.func.isRequired, onRenameNode: PropTypes.func.isRequired, onDeleteNode: PropTypes.func.isRequired, onAddFileNode: PropTypes.func.isRequired, onAddFolderNode: PropTypes.func.isRequired, }; class SidePanel extends Component { constructor(props) { super(props); this.state = { opNode: null, isLoadFailed: false, isMenuIconShow: false, isHeaderMenuShow: false, isDeleteDialogShow: false, isAddFileDialogShow: false, isAddFolderDialogShow: false, isRenameDialogShow: false, }; this.isNodeMenuShow = true; } UNSAFE_componentWillReceiveProps(nextProps) { this.setState({opNode: nextProps.currentNode}); } onMouseEnter = () => { this.setState({isMenuIconShow: true}); }; onMouseLeave = () => { this.setState({isMenuIconShow: false}); }; onDropdownToggleClick = (e) => { e.preventDefault(); this.toggleOperationMenu(); }; toggleOperationMenu = () => { this.setState({isHeaderMenuShow: !this.state.isHeaderMenuShow}); }; onNodeClick = (node) => { this.setState({opNode: node}); this.props.onNodeClick(node); }; onMenuItemClick = (operation, node) => { this.setState({opNode: node}); switch (operation) { case 'New Folder': this.onAddFolderToggle(); break; case 'New File': this.onAddFileToggle(); break; case 'Rename': this.onRenameToggle(); break; case 'Delete': this.onDeleteToggle(); break; } }; onAddFileToggle = (type) => { if (type === 'root') { let root = this.props.treeData.root; this.setState({ isAddFileDialogShow: !this.state.isAddFileDialogShow, opNode: root, }); } else { this.setState({isAddFileDialogShow: !this.state.isAddFileDialogShow}); } }; onAddFolderToggle = (type) => { if (type === 'root') { let root = this.props.treeData.root; this.setState({ isAddFolderDialogShow: !this.state.isAddFolderDialogShow, opNode: root, }); } else { this.setState({isAddFolderDialogShow: !this.state.isAddFolderDialogShow}); } }; onRenameToggle = () => { this.setState({isRenameDialogShow: !this.state.isRenameDialogShow}); }; onDeleteToggle = () => { this.setState({isDeleteDialogShow: !this.state.isDeleteDialogShow}); }; onAddFolderNode = (dirPath) => { this.setState({isAddFolderDialogShow: !this.state.isAddFolderDialogShow}); this.props.onAddFolderNode(dirPath); }; onRenameNode = (newName) => { this.setState({isRenameDialogShow: !this.state.isRenameDialogShow}); let node = this.state.opNode; this.props.onRenameNode(node, newName); }; onDeleteNode = () => { this.setState({isDeleteDialogShow: !this.state.isDeleteDialogShow}); let node = this.state.opNode; this.props.onDeleteNode(node); }; checkDuplicatedName = (newName) => { let node = this.state.opNode; // root node to new node conditions: parentNode is null, let parentNode = node.parentNode ? node.parentNode : node; let childrenObject = parentNode.children.map(item => { return item.object; }); let isDuplicated = childrenObject.some(object => { return object.name === newName; }); return isDuplicated; }; render() { return (
{this.state.isAddFolderDialogShow && ( )} {this.state.isAddFileDialogShow && ( )} {this.state.isRenameDialogShow && ( )} {this.state.isDeleteDialogShow && ( )}
); } } SidePanel.propTypes = propTypes; export default SidePanel;