index.jsx 2.01 KB
Newer Older
皮倩雯's avatar
皮倩雯 committed
1 2 3 4
/*
 * @Description:
 * @Author: leizhe
 * @Date: 2022-03-04 18:33:24
5
 * @LastEditTime: 2022-04-27 14:26:14
皮倩雯's avatar
皮倩雯 committed
6 7
 * @LastEditors: leizhe
 */
张烨's avatar
张烨 committed
8 9 10 11 12 13 14 15 16 17
import { Tree } from 'antd';
import { uniq, remove } from 'lodash';
import React, { useState, useEffect } from 'react';

const getChildKeys = tree => {
  let childKeys = tree.children?.map(c => getChildKeys(c)).flat(Infinity) || [];
  return [tree.key, ...childKeys];
};

export default props => {
皮倩雯's avatar
皮倩雯 committed
18
  const { expandedKeys, onExpand, onSelect, selectedKeys, keepTree, ...rest } = props;
张烨's avatar
张烨 committed
19
  const [epKeys, setEpKeys] = useState([expandedKeys]);
20
  useEffect(() => {
21
    console.log(expandedKeys);
皮倩雯's avatar
皮倩雯 committed
22 23 24 25 26
    if (!expandedKeys || expandedKeys == null) {
      setEpKeys(['0-0']);
    } else {
      setEpKeys([expandedKeys]);
    }
27
  }, [expandedKeys]);
张烨's avatar
张烨 committed
28 29

  const handleExpand = (keys, { expanded, node }) => {
皮倩雯's avatar
皮倩雯 committed
30 31 32 33 34 35 36 37
    if (keepTree && keepTree.indexOf(node.key) != -1 && epKeys.indexOf(node.key) == -1) {
      setEpKeys([node.key]);
    } else {
      if (!expanded) {
        let childKeys = getChildKeys(node);
        remove(keys, k => childKeys.includes(k));
      }
      setEpKeys(keys);
张烨's avatar
张烨 committed
38 39 40 41
    }
  };

  const handleSelect = (keys, e) => {
皮倩雯's avatar
皮倩雯 committed
42 43
    if (keepTree && keepTree.indexOf(keys[0]) != -1 && epKeys.indexOf(keys[0]) == -1) {
      setEpKeys(keys);
张烨's avatar
张烨 committed
44
    } else {
皮倩雯's avatar
皮倩雯 committed
45 46 47 48 49 50
      let result = [];
      if (keys.length > 0 && epKeys.includes(keys[0])) {
        remove(epKeys, k => keys.includes(k));
        result = [...epKeys];
      } else if (keys[0]) {
        result = [...epKeys, keys[0]];
张烨's avatar
张烨 committed
51
      } else {
皮倩雯's avatar
皮倩雯 committed
52 53 54 55 56 57
        if (epKeys.includes(e.node.key)) {
          remove(epKeys, k => k === e.node.key);
        } else {
          epKeys.push(e.node.key);
        }
        result = [...epKeys];
张烨's avatar
张烨 committed
58
      }
皮倩雯's avatar
皮倩雯 committed
59 60
      console.log(result, 'result');
      setEpKeys(result);
张烨's avatar
张烨 committed
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
    }
    // eslint-disable-next-line no-unused-expressions
    onSelect && onSelect(keys, e);
  };

  return (
    <Tree
      onSelect={handleSelect}
      onExpand={handleExpand}
      expandedKeys={epKeys}
      selectedKeys={selectedKeys}
      {...rest}
    />
  );
};