import React, { createElement } from "react"; import PropTypes from "prop-types"; import createStyles from "../styles/createStyles"; const { Children } = React; const Arrow = ({ expanded, styles }) => ( ); interface IProps { expanded: boolean; onClick: () => void; nodeRenderer: (args: any) => JSX.Element; title?: any; shouldShowArrow: boolean; shouldShowPlaceholder: boolean; onContextMenu?: () => void; name?: string; data?: any; } class TreeNode extends React.PureComponent { constructor(props: IProps) { super(props); } static contextTypes = { theme: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired, }; render() { const { expanded = true, onClick = () => {}, onContextMenu, children, nodeRenderer = ({ name }) => {name}, title, shouldShowArrow = false, shouldShowPlaceholder = true, } = this.props; const { theme } = this.context; const styles = createStyles("TreeNode", theme); const renderedNode = createElement(nodeRenderer, this.props); const childNodes = expanded ? children : undefined; return (
  • {shouldShowArrow || Children.count(children) > 0 ? ( ) : ( shouldShowPlaceholder &&   )} {renderedNode}
      {childNodes}
  • ); } } export default TreeNode;