index.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import React, { Component } from 'react';
  2. import { Modal, Tree } from 'antd';
  3. import { ContextMenuTrigger } from 'react-contextmenu';
  4. import ContextMenuLayout from '../../layouts/ContextMenuLayout';
  5. import './index.less';
  6. class TreeManage extends Component {
  7. constructor(props) {
  8. super(props);
  9. this.state = {
  10. itemTrigger: [],
  11. };
  12. }
  13. getItem(item, level, index, length) {
  14. if (item.children && item.children.length > 0) {
  15. return (
  16. <Tree.TreeNode key={item.key} title={this.getItemWrap(item, level, index, length)}>
  17. {item.children.map((subItem, i) => {
  18. return this.getItem(subItem, level + 1, i, item.children.length);
  19. })}
  20. </Tree.TreeNode>
  21. );
  22. }
  23. return <Tree.TreeNode key={item.key} title={this.getItemWrap(item, level, index, length)} />;
  24. }
  25. getItemWrap(item, level, index, length) {
  26. if (item.trigger === false || this.props.trigger === false) {
  27. return item.title;
  28. }
  29. return (
  30. <ContextMenuTrigger collect={() => ({ item, level, index, length })} holdToDisplay={-1} id="tree-manage-trigger">
  31. {item.title}
  32. </ContextMenuTrigger>
  33. );
  34. }
  35. onTriggerShow(e) {
  36. this.setState({ itemTrigger: this.props.triggerMenu(e) });
  37. }
  38. onTriggerHide() {
  39. this.setState({ itemTrigger: [] });
  40. }
  41. onTriggerClick() {}
  42. render() {
  43. const { treeData = [] } = this.props;
  44. const { itemTrigger = [] } = this.state;
  45. return (
  46. <Modal
  47. className="tree-modal"
  48. visible
  49. title={this.props.title}
  50. footer={null}
  51. closable={!!this.props.onCancel}
  52. onCancel={this.props.onCancel}
  53. >
  54. <div className="body">
  55. {this.props.children && this.props.children}
  56. {treeData.length > 0 && (
  57. <Tree showLine autoExpandParent defaultExpandAll {...this.props.tree} onSelect={this.props.onSelect}>
  58. {treeData.map((item, index) => {
  59. return this.getItem(item, 1, index, treeData.length);
  60. })}
  61. </Tree>
  62. )}
  63. </div>
  64. {this.props.trigger !== false && (
  65. <ContextMenuLayout
  66. id="tree-manage-trigger"
  67. itemTrigger={itemTrigger}
  68. onTriggerShow={e => this.onTriggerShow(e)}
  69. onTriggerHide={() => this.onTriggerHide()}
  70. />
  71. )}
  72. </Modal>
  73. );
  74. }
  75. }
  76. export default TreeManage;