import React from 'react'; import MenuControl from '../menu-component/node-menu-control' function sortByType(a, b) { if (a.type == "dir" && b.type != "dir") { return -1; } else if (a.type != "dir" && b.type == "dir") { return 1; } else { return a.name.localeCompare(b.name); } } class TreeNodeView extends React.Component { constructor(props) { super(props); this.state = { isMenuIconShow: false } } onClick = (e) => { // e.nativeEvent.stopImmediatePropagation(); let { node } = this.props; this.props.treeView.onNodeClick(e, node); } onMouseEnter = () => { if (!this.props.isNodeItemFrezee) { this.setState({ isMenuIconShow: true }) } } onMouseLeave = () => { if (!this.props.isNodeItemFrezee) { this.setState({ isMenuIconShow: false }) } } handleCollapse = (e) => { e.stopPropagation(); const { node } = this.props; if (this.props.treeView.toggleCollapse) { this.props.treeView.toggleCollapse(node); } } onDragStart = (e) => { const { node } = this.props; this.props.treeView.onDragStart(e, node); } onMenuControlClick = (e) => { e.stopPropagation(); e.nativeEvent.stopImmediatePropagation(); const { node } = this.props; this.props.treeView.onShowContextMenu(e, node); } hideMenuIcon = () => { this.setState({ isMenuIconShow: false }); } componentDidMount() { document.addEventListener('click', this.hideMenuIcon); } componentWillUnmount() { document.removeEventListener('click', this.hideMenuIcon); } renderCollapse = () => { const { node } = this.props; if (node.hasChildren()) { const { isExpanded } = node; return ( e.stopPropagation()} onClick={this.handleCollapse} /> ); } return null; } renderChildren = () => { const { node } = this.props; if (node.children && node.children.length) { const childrenStyles = { paddingLeft: this.props.paddingLeft }; var l = node.children.sort(sortByType); /* the `key` property is needed. Otherwise there is a warning in the console */ return (
{l.map(child => { return ( ); })}
); } return null; } renderMenuController() { if (this.props.permission === "rw") { return (
) } return; } getNodeTypeAndIcon() { const node = this.props.node; let icon = ''; let type = ''; if (node.type === 'dir') { icon = ; type = 'dir'; } else { let index = node.name.lastIndexOf("."); if (index === -1) { icon = ; type = 'file'; } else { type = node.name.substring(index).toLowerCase(); if (type === ".png" || type === ".jpg") { icon = ; type = 'image'; } else { icon = ; type = 'file'; } } } return { type, icon }; } render() { const styles = {}; let node = this.props.node; let { type, icon } = this.getNodeTypeAndIcon(); let hlClass = ""; if (node.path === this.props.currentFilePath) { hlClass = "tree-node-hight-light"; } let customClass = "tree-node " + hlClass; return (
{node.name}
{this.renderCollapse()} {icon}
{this.renderMenuController()}
{node.isExpanded ? this.renderChildren() : null}
); } } export default TreeNodeView;