UNPKG

@sms-frontend/components

Version:

SMS Design React UI Library.

670 lines (669 loc) 33.7 kB
var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; import React, { Component } from 'react'; import isEqualWith from 'lodash/isEqualWith'; import cs from '../_util/classNames'; import Node from './node'; import NodeList from './node-list'; import { isFunction } from '../_util/is'; import { ConfigContext } from '../ConfigProvider'; import { getAllCheckedKeysByCheck, getCheckedKeysByInitKeys, getTreeDataFromTreeChildren, } from './util'; import { TreeContext } from './context'; import mergeProps from '../_util/mergeProps'; var DefaultFieldNames = { key: 'key', title: 'title', children: 'children', selectable: 'selectable', disabled: 'disabled', disableCheckbox: 'disableCheckbox', checkable: 'checkable', isLeaf: 'isLeaf', }; var defaultProps = { selectable: true, autoExpandParent: true, checkedStrategy: 'all', allowDrop: function () { return true; }, fieldNames: DefaultFieldNames, }; var needMergeKeys = [ 'style', 'className', 'height', 'size', 'blockNode', 'autoExpandParent', 'checkedStrategy', 'fieldNames', 'icons', 'virtualListProps', 'showLine', 'selectable', 'allowDrop', ]; var Tree = /** @class */ (function (_super) { __extends(Tree, _super); function Tree(props, context) { var _this = _super.call(this, props, context) || this; // 依旧使用NodeInstance 是为了兼容1.x的一些用法,改动较大 _this.cacheNodes = {}; _this.key2nodeProps = {}; _this.indeterminateKeys = []; _this.getMergedProps = function (baseProps) { var componentConfig = _this.context.componentConfig; var props = mergeProps(baseProps || _this.props, defaultProps, componentConfig === null || componentConfig === void 0 ? void 0 : componentConfig.Tree); return Object.keys(props).reduce(function (total, key) { if (needMergeKeys.indexOf(key) > -1) { total[key] = props[key]; } return total; }, {}); }; // index: 第几个dom元素, 如果传入的是字符串,会作为 node 的 key去查找。 // nodeProps 参数似乎咩有什么用。。。但是不知道外部有没有调用,就当key用吧。。 _this.scrollIntoView = function (_index, nodeProps) { var index = _index; if (typeof _index === 'string' || nodeProps) { // 作为key index = _index || nodeProps._key; } if (_this.nodeListRef) { _this.nodeListRef.scrollIntoView(index, nodeProps || _this.key2nodeProps[index]); } }; _this.getTreeData = function () { return 'treeData' in _this.props ? _this.props.treeData : getTreeDataFromTreeChildren(_this.props.children); }; // 以下外部传入的属性改变时,需要更新nodeList _this.needUpdateTreeData = function (prevProps, props) { var keys = [ 'fieldNames', 'selectable', 'draggable', 'checkStrictly', 'showLine', 'blockNode', 'checkable', 'treeData', 'children', ]; return keys.some(function (key) { return isEqualWith(prevProps[key], props[key]); }); }; // 根据 fieldNames 获取节点数据 _this.getFieldInfo = function (data) { var mergedProps = _this.getMergedProps(); var selectable = mergedProps.selectable; // fieldsNames 仅在treeData时生效。 var fieldNames = __assign(__assign({}, DefaultFieldNames), ('treeData' in _this.props ? mergedProps.fieldNames : {})); var result = { children: data[fieldNames.children], selectable: fieldNames.selectable in data ? data[fieldNames.selectable] : selectable, checkable: fieldNames.checkable in data ? data[fieldNames.checkable] : _this.props.checkable, title: data[fieldNames.title], disabled: data[fieldNames.disabled], disableCheckbox: data[fieldNames.disableCheckbox], isLeaf: data[fieldNames.isLeaf], key: data[fieldNames.key], }; if (!(fieldNames.key in data)) { delete result.key; } return result; }; _this.getNodeList = function (treedata, prefix) { _this.key2nodeProps = {}; var prefixCls = prefix || _this.context.getPrefixCls('tree'); var nodeList = []; var currentIndex = 0; var _a = _this.getMergedProps(), showLine = _a.showLine, blockNode = _a.blockNode; var loop = function (treeData, father) { var totalLength = treeData.length; return treeData.map(function (data, index) { var _a = _this.getFieldInfo(data), children = _a.children, selectable = _a.selectable, checkable = _a.checkable, _b = _a.key, key = _b === void 0 ? ((father === null || father === void 0 ? void 0 : father._key) || '') + "-" + index : _b, rest = __rest(_a, ["children", "selectable", "checkable", "key"]); var nodeProps = __assign(__assign(__assign({ // data 中含有dataRef时,优先级较高 dataRef: data, draggable: _this.props.draggable, selectable: selectable, checkable: checkable, showLine: showLine, blockNode: blockNode }, data), rest), { key: key, children: children, _key: key, _index: currentIndex++, parentKey: father ? father._key : undefined, pathParentKeys: (father && father.pathParentKeys) || [], _level: father._level || 0, // 保存node在sowLine模式下是否显示缩进线。如果父节点是其所在层级的最后一个节点,那么所有的子节点(包括孙子节点等)在父节点所在层级的缩进格都不显示缩进线。 _lineless: father && father._lineless ? __spreadArray(__spreadArray([], __read((father._lineless || [])), false), [father._isTail], false) : [] }); if (totalLength === index + 1) { nodeProps.className = cs(prefixCls + "-node-is-tail", nodeProps.className); } nodeList.push(nodeProps); _this.key2nodeProps[key] = nodeProps; if (children && children.length) { _this.key2nodeProps[key].children = loop(children, { _key: key, _level: nodeProps._level + 1, _lineless: nodeProps._lineless, _isTail: totalLength === index + 1, pathParentKeys: __spreadArray(__spreadArray([], __read(((father === null || father === void 0 ? void 0 : father.pathParentKeys) || [])), false), [key], false), }); } return nodeProps; }); }; loop(treedata || [], {}); return nodeList; }; _this.getInitExpandedKeys = function (keys) { if (!_this.getMergedProps().autoExpandParent) { return keys || []; } if (!keys) { return Object.keys(_this.key2nodeProps).filter(function (key) { var props = _this.key2nodeProps[key]; return props.children && props.children.length; }); } var expandedKeys = {}; keys.forEach(function (key) { var item = _this.key2nodeProps[key]; if (!item) { return; } expandedKeys[key] = 1; if (item.pathParentKeys) { item.pathParentKeys.forEach(function (x) { expandedKeys[x] = 1; }); } }); return Object.keys(expandedKeys); }; _this.getInitCheckedKeys = function (keys) { if (!_this.props.checkStrictly) { var _a = getCheckedKeysByInitKeys(keys, _this.key2nodeProps), checkedKeys = _a.checkedKeys, indeterminateKeys = _a.indeterminateKeys; _this.indeterminateKeys = indeterminateKeys; return checkedKeys; } _this.indeterminateKeys = []; return keys; }; _this.handleSelect = function (key, e) { var onSelect = _this.props.onSelect; var extra = { e: e, node: _this.cacheNodes[key] }; if (_this.props.multiple) { var selectedKeys = __spreadArray([], __read(_this.state.selectedKeys), false); var index = selectedKeys.indexOf(key); if (index > -1) { selectedKeys.splice(index, 1); extra.selected = false; } else { extra.selected = true; selectedKeys.push(key); } extra.selectedNodes = selectedKeys.map(function (x) { return _this.cacheNodes[x]; }); if (!('selectedKeys' in _this.props)) { _this.setState({ selectedKeys: selectedKeys }); } onSelect && onSelect(selectedKeys, extra); } else { extra.selected = true; extra.selectedNodes = [_this.cacheNodes[key]]; if (!('selectedKeys' in _this.props)) { _this.setState({ selectedKeys: [key] }); } onSelect && onSelect([key], extra); } }; _this.handleCheck = function (checked, key, e) { var checkedStrategy = _this.getMergedProps().checkedStrategy; var _a = _this.props, onCheck = _a.onCheck, checkStrictly = _a.checkStrictly; var extra = { e: e, node: _this.cacheNodes[key] }; var checkedKeys = _this.state.checkedKeys; if (checkStrictly) { if (checked) { checkedKeys = checkedKeys.concat(key); } else { checkedKeys = checkedKeys.filter(function (item) { return item !== key; }); } if (!('checkedKeys' in _this.props)) { _this.setState({ checkedKeys: checkedKeys }); } } else { // 找到所有允许勾选的子节点 var _b = getAllCheckedKeysByCheck(key, checked, checkedKeys, _this.key2nodeProps, _this.indeterminateKeys), newCheckedKeys = _b.checkedKeys, indeterminateKeys = _b.indeterminateKeys; checkedKeys = newCheckedKeys; _this.indeterminateKeys = indeterminateKeys; if (!('checkedKeys' in _this.props)) { _this.setState({ checkedKeys: checkedKeys }); } if (checkedStrategy === Tree.SHOW_PARENT) { checkedKeys = checkedKeys.filter(function (x) { var item = _this.key2nodeProps[x]; if (!item || checkedKeys.indexOf(item.parentKey) === -1) { return true; } }); } else if (checkedStrategy === Tree.SHOW_CHILD) { checkedKeys = checkedKeys.filter(function (x) { var item = _this.key2nodeProps[x]; if (!item || !item.children || !item.children.length) { return true; } }); } } onCheck && onCheck(checkedKeys, __assign({ checkedNodes: checkedKeys.map(function (x) { return _this.cacheNodes[x]; }).filter(function (x) { return x; }), checked: checked }, extra)); }; _this.handleLoadMore = function (node) { var loadMore = _this.props.loadMore; if (isFunction(loadMore)) { var _a = _this.state, _b = _a.loadingKeys, loadingKeys = _b === void 0 ? [] : _b, loadedKeys = _a.loadedKeys; _this.setState({ loadingKeys: Array.from(new Set(__spreadArray(__spreadArray([], __read(loadingKeys), false), [node._key], false))), loadedKeys: loadedKeys.filter(function (x) { return x !== node._key; }), }, function () { return __awaiter(_this, void 0, void 0, function () { var e_1; return __generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 2, , 3]); return [4 /*yield*/, loadMore(this.cacheNodes[node._key])]; case 1: _a.sent(); this.setState({ loadedKeys: Array.from(new Set(__spreadArray(__spreadArray([], __read(this.state.loadedKeys), false), [node._key], false))), loadingKeys: this.state.loadingKeys.filter(function (x) { return x !== node._key; }), }); this.handleExpand(!node.expanded, node._key); return [3 /*break*/, 3]; case 2: e_1 = _a.sent(); console.error('[tree]load data error: ', e_1); this.setState({ loadingKeys: this.state.loadingKeys.filter(function (x) { return x !== node._key; }), }); return [3 /*break*/, 3]; case 3: return [2 /*return*/]; } }); }); }); } }; _this.handleNodeDragStart = function (e, node) { _this.dragNode = _this.cacheNodes[node._key]; _this.dropPosition = 0; var onDragStart = _this.props.onDragStart; onDragStart && onDragStart(e, _this.cacheNodes[node._key]); }; _this.handleNodeDragEnd = function (e, node) { _this.dragNode = null; _this.dropPosition = 0; var onDragEnd = _this.props.onDragEnd; onDragEnd && onDragEnd(e, _this.cacheNodes[node._key]); }; _this.handleNodeDragOver = function (e, node, dropPosition) { _this.dropPosition = dropPosition; var onDragOver = _this.props.onDragOver; onDragOver && onDragOver(e, _this.cacheNodes[node._key]); }; _this.handleNodeDragLeave = function (e, node) { // this.dropNode = null; _this.dropPosition = 0; var onDragLeave = _this.props.onDragLeave; onDragLeave && onDragLeave(e, _this.cacheNodes[node._key]); }; _this.isChildOfNode = function (node, target) { var current = _this.key2nodeProps[node.parentKey]; while (current) { var _key = current._key, parentKey = current.parentKey; if (_key === target.props._key) { return true; } if (parentKey === _key) return; current = _this.key2nodeProps[parentKey]; } }; _this.isSameNode = function (node1, node2) { // 对比 node if (node1 === undefined || node2 === undefined) return false; if (node1 === node2) return true; // 对比 node.key var key1 = node1.key; var key2 = node2.key; if (key1 !== undefined || key2 !== undefined) return key1 === key2; // 对比 node.props._key var _key1 = node1.props._key; var _key2 = node2.props._key; if (_key1 === undefined && _key2 === undefined) return false; return _key1 === _key2; }; _this.handleNodeDrop = function (e, node, dropPosition) { if (_this.dragNode) { var allowDrop = _this.getMergedProps().allowDrop; var onDrop = _this.props.onDrop; var nodeInstance = _this.cacheNodes[node._key]; if (onDrop && !_this.isChildOfNode(node, _this.dragNode) && !_this.isSameNode(_this.dragNode, nodeInstance)) { if (allowDrop && !allowDrop({ dropNode: nodeInstance, dropPosition: dropPosition })) { return; } onDrop({ dragNode: _this.dragNode, dropNode: nodeInstance, dropPosition: dropPosition, e: e, }); } } }; _this.handleAllowDrop = function (node, dropPosition) { var allowDrop = _this.getMergedProps().allowDrop; var isAllowDrop = true; if (typeof allowDrop === 'function') { isAllowDrop = allowDrop({ dropNode: _this.cacheNodes[node._key], dropPosition: dropPosition }); } return isAllowDrop; }; _this.handleExpand = function (expanded, key) { var _a = _this.state, currentExpandKeys = _a.currentExpandKeys, _b = _a.expandedKeys, expandedKeys = _b === void 0 ? [] : _b; var onExpand = _this.props.onExpand; if (currentExpandKeys.indexOf(key) > -1) { // 如果当前key节点正在展开/收起,不执行操作。 return; } var newExpandedKeys = []; if (expanded) { newExpandedKeys = Array.from(new Set(__spreadArray(__spreadArray([], __read(expandedKeys), false), [key], false))); } else { newExpandedKeys = expandedKeys.filter(function (k) { return k !== key; }); } if (!('expandedKeys' in _this.props)) { _this.setState({ expandedKeys: newExpandedKeys, currentExpandKeys: __spreadArray(__spreadArray([], __read(currentExpandKeys), false), [key], false), }); } onExpand && onExpand(newExpandedKeys, { expanded: expanded, node: _this.cacheNodes[key], expandedNodes: newExpandedKeys.map(function (x) { return _this.cacheNodes[x]; }).filter(function (x) { return x; }), }); }; // 传入构建好的expandedKeysSet _this.getNodeProps = function (nodeProps, expandedKeysSet) { var autoExpandParent = _this.getMergedProps().autoExpandParent; var loadMore = _this.props.loadMore; var _a = _this.state, selectedKeys = _a.selectedKeys, expandedKeys = _a.expandedKeys, checkedKeys = _a.checkedKeys, _b = _a.loadingKeys, loadingKeys = _b === void 0 ? [] : _b, _c = _a.loadedKeys, loadedKeys = _c === void 0 ? [] : _c; var hasChildren = nodeProps.children && nodeProps.children.length; var otherProps = { isLeaf: !hasChildren, autoExpandParent: hasChildren ? autoExpandParent : false, expanded: expandedKeysSet ? expandedKeysSet.has(nodeProps._key) : expandedKeys.indexOf(nodeProps._key) > -1, }; if (loadMore) { var loaded = loadedKeys.indexOf(nodeProps._key) > -1; otherProps.loaded = loaded; otherProps.isLeaf = hasChildren ? false : nodeProps.isLeaf; } return __assign(__assign(__assign({}, nodeProps), otherProps), { selected: selectedKeys && selectedKeys.indexOf(nodeProps._key) > -1, indeterminated: _this.indeterminateKeys.indexOf(nodeProps._key) > -1, loading: loadingKeys.indexOf(nodeProps._key) > -1, checked: checkedKeys && checkedKeys.indexOf(nodeProps._key) > -1, selectedKeys: selectedKeys, checkedKeys: checkedKeys, loadingKeys: loadingKeys, loadedKeys: loadedKeys, expandedKeys: _this.state.expandedKeys, childrenData: nodeProps.children || [], children: null }); }; _this.handleExpandEnd = function (key) { var currentExpandKeys = _this.state.currentExpandKeys; if (currentExpandKeys.indexOf(key) > -1) { _this.setState({ currentExpandKeys: currentExpandKeys.filter(function (v) { return v !== key; }), }); } }; // 获取tree的state数据,在子组件里使用。 _this.getTreeState = function () { return _this.state; }; _this.state = {}; var treeData = _this.getTreeData(); var nodeList = _this.getNodeList(treeData, context.getPrefixCls('tree')); _this.state = { selectedKeys: props.selectedKeys || props.defaultSelectedKeys || [], checkedKeys: _this.getInitCheckedKeys(props.checkedKeys || props.defaultCheckedKeys || []), expandedKeys: _this.getInitExpandedKeys(props.expandedKeys || props.defaultExpandedKeys), loadedKeys: [], loadingKeys: [], currentExpandKeys: [], nodeList: nodeList, }; return _this; } Tree.getDerivedStateFromProps = function (nextProps, state) { var newState = {}; if ('selectedKeys' in nextProps && !isEqualWith(nextProps.selectedKeys, state.selectedKeys)) { newState.selectedKeys = nextProps.selectedKeys || []; } if (Object.keys(newState).length) { return newState; } return null; }; Tree.prototype.componentDidUpdate = function (prevProps) { // 类似 componentWillReceiveProps 周期 var _this = this; var prevMergedProps = this.getMergedProps(prevProps); var mergedProps = this.getMergedProps(); if (prevProps !== this.props || !isEqualWith(prevMergedProps, mergedProps)) { var newState_1 = {}; if (this.needUpdateTreeData(__assign({ prevMergedProps: prevMergedProps }, prevProps), __assign(__assign({}, mergedProps), this.props))) { var treeData = this.getTreeData(); var nodeList = this.getNodeList(treeData); newState_1.treeData = treeData; newState_1.nodeList = nodeList; } // 说明treeData变了,需要比较下内部checkedKeys if (newState_1.treeData || ('checkedKeys' in this.props && !isEqualWith(prevProps.checkedKeys, this.props.checkedKeys))) { var currentCheckedKeys = 'checkedKeys' in this.props ? this.props.checkedKeys : this.state.checkedKeys; var keys = this.getInitCheckedKeys(currentCheckedKeys || []); if (!isEqualWith(keys, this.state.checkedKeys)) { newState_1.checkedKeys = keys; } } if ('expandedKeys' in this.props && !isEqualWith(this.props.expandedKeys, prevProps.expandedKeys)) { newState_1.expandedKeys = this.props.expandedKeys; // 比较前后expandKeys的改变,去重,得到需要收起/展开的动画 // 例如 [...[1, 2, 3], ...[1, 3, 4]] 。那么 2 会收起,4会展开。 // 如果父节点正在执行收起/展开逻辑,子节点不需要出现在 currentExpandKeys 数组。 newState_1.currentExpandKeys = __spreadArray(__spreadArray([], __read(newState_1.expandedKeys), false), __read(this.state.expandedKeys), false).reduce(function (total, next) { var index = total.indexOf(next); if (index === -1) { total.push(next); } else { total.splice(index, 1); } return total; }, []) .filter(function (key, _, array) { var _a; if (_this.key2nodeProps[key]) { var pathParentKeys = _this.key2nodeProps[key].pathParentKeys; if (pathParentKeys.some(function (x) { return array.indexOf(x) > -1; })) { return false; } return (_a = _this.key2nodeProps[key].children) === null || _a === void 0 ? void 0 : _a.length; } }); } var currentExpandKeys = newState_1.currentExpandKeys || this.state.currentExpandKeys; if (newState_1.treeData && currentExpandKeys) { newState_1.currentExpandKeys = currentExpandKeys.filter(function (key) { var item = newState_1.treeData.find(function (node) { return node._key === key; }); return item && item.children && item.children.length; }); } if (Object.keys(newState_1).length) { this.setState(newState_1); } } }; Tree.prototype.render = function () { var _a; var _this = this; // render 之前重置掉,在NodeList里会进行赋值。 this.cacheNodes = {}; var _b = this.getMergedProps(), className = _b.className, showLine = _b.showLine, size = _b.size, _virtualListProps = _b.virtualListProps, height = _b.height, style = _b.style, icons = _b.icons; var _c = this.props, loadMore = _c.loadMore, checkable = _c.checkable; // 兼容旧 APi : height var virtualListProps = _virtualListProps ? __assign({ threshold: 100 }, _virtualListProps) : height ? { height: height, threshold: 100 } : { threshold: null, }; var getPrefixCls = this.context.getPrefixCls; var prefixCls = getPrefixCls('tree'); return (React.createElement(TreeContext.Provider, { value: { icons: icons, key2nodeProps: this.key2nodeProps, getFieldInfo: this.getFieldInfo, getTreeState: this.getTreeState, getNodeProps: this.getNodeProps, onExpandEnd: this.handleExpandEnd, onSelect: this.handleSelect, onCheck: this.handleCheck, onNodeDragStart: this.handleNodeDragStart, onNodeDragEnd: this.handleNodeDragEnd, onNodeDragLeave: this.handleNodeDragLeave, onNodeDragOver: this.handleNodeDragOver, onNodeDrop: this.handleNodeDrop, onExpand: this.handleExpand, renderExtra: this.props.renderExtra, renderTitle: this.props.renderTitle, loadMore: loadMore && this.handleLoadMore, allowDrop: this.handleAllowDrop, virtualListProps: virtualListProps, } }, React.createElement(NodeList, { ref: function (node) { _this.nodeListRef = node; }, className: cs(prefixCls, (_a = {}, _a[prefixCls + "-checkable"] = checkable, _a[prefixCls + "-show-line"] = showLine, _a[prefixCls + "-size-" + size] = size, _a), className), style: style, filterNode: this.props.filterNode, virtualListProps: virtualListProps, expandedKeys: this.state.expandedKeys, currentExpandKeys: this.state.currentExpandKeys, getNodeProps: this.getNodeProps, nodeList: this.state.nodeList, saveCacheNode: function (node) { _this.cacheNodes[node.key] = node; } }))); }; Tree.displayName = 'Tree'; Tree.SHOW_PARENT = 'parent'; Tree.SHOW_ALL = 'all'; Tree.SHOW_CHILD = 'child'; Tree.Node = Node; Tree.contextType = ConfigContext; return Tree; }(Component)); export default Tree;