1 | import _extends from "@babel/runtime/helpers/esm/extends";
|
2 | import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
3 | import _typeof from "@babel/runtime/helpers/esm/typeof";
|
4 | import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
5 | import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
6 | import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
7 | import _createClass from "@babel/runtime/helpers/esm/createClass";
|
8 | import _assertThisInitialized from "@babel/runtime/helpers/esm/assertThisInitialized";
|
9 | import _inherits from "@babel/runtime/helpers/esm/inherits";
|
10 | import _createSuper from "@babel/runtime/helpers/esm/createSuper";
|
11 |
|
12 |
|
13 | import * as React from 'react';
|
14 | import KeyCode from "rc-util/es/KeyCode";
|
15 | import warning from "rc-util/es/warning";
|
16 | import pickAttrs from "rc-util/es/pickAttrs";
|
17 | import classNames from 'classnames';
|
18 | import { TreeContext } from './contextTypes';
|
19 | import { getDragChildrenKeys, parseCheckedKeys, conductExpandParent, calcSelectedKeys, calcDropPosition, arrAdd, arrDel, posToArr } from './util';
|
20 | import { flattenTreeData, convertTreeToData, convertDataToEntities, warningWithoutKey, convertNodePropsToEventData, getTreeNodeProps, fillFieldNames } from './utils/treeUtil';
|
21 | import NodeList, { MOTION_KEY, MotionEntity } from './NodeList';
|
22 | import TreeNode from './TreeNode';
|
23 | import { conductCheck } from './utils/conductUtil';
|
24 | import DropIndicator from './DropIndicator';
|
25 | var MAX_RETRY_TIMES = 10;
|
26 | var Tree = function (_React$Component) {
|
27 | _inherits(Tree, _React$Component);
|
28 | var _super = _createSuper(Tree);
|
29 | function Tree() {
|
30 | var _this;
|
31 | _classCallCheck(this, Tree);
|
32 | for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {
|
33 | _args[_key] = arguments[_key];
|
34 | }
|
35 | _this = _super.call.apply(_super, [this].concat(_args));
|
36 | _this.destroyed = false;
|
37 | _this.delayedDragEnterLogic = void 0;
|
38 | _this.loadingRetryTimes = {};
|
39 | _this.state = {
|
40 | keyEntities: {},
|
41 | indent: null,
|
42 | selectedKeys: [],
|
43 | checkedKeys: [],
|
44 | halfCheckedKeys: [],
|
45 | loadedKeys: [],
|
46 | loadingKeys: [],
|
47 | expandedKeys: [],
|
48 | draggingNodeKey: null,
|
49 | dragChildrenKeys: [],
|
50 |
|
51 |
|
52 |
|
53 | dropTargetKey: null,
|
54 | dropPosition: null,
|
55 | dropContainerKey: null,
|
56 | dropLevelOffset: null,
|
57 | dropTargetPos: null,
|
58 | dropAllowed: true,
|
59 |
|
60 |
|
61 |
|
62 | dragOverNodeKey: null,
|
63 | treeData: [],
|
64 | flattenNodes: [],
|
65 | focused: false,
|
66 | activeKey: null,
|
67 | listChanging: false,
|
68 | prevProps: null,
|
69 | fieldNames: fillFieldNames()
|
70 | };
|
71 | _this.dragStartMousePosition = null;
|
72 | _this.dragNode = void 0;
|
73 | _this.currentMouseOverDroppableNodeKey = null;
|
74 | _this.listRef = React.createRef();
|
75 | _this.onNodeDragStart = function (event, node) {
|
76 | var _this$state = _this.state,
|
77 | expandedKeys = _this$state.expandedKeys,
|
78 | keyEntities = _this$state.keyEntities;
|
79 | var onDragStart = _this.props.onDragStart;
|
80 | var eventKey = node.props.eventKey;
|
81 | _this.dragNode = node;
|
82 | _this.dragStartMousePosition = {
|
83 | x: event.clientX,
|
84 | y: event.clientY
|
85 | };
|
86 | var newExpandedKeys = arrDel(expandedKeys, eventKey);
|
87 | _this.setState({
|
88 | draggingNodeKey: eventKey,
|
89 | dragChildrenKeys: getDragChildrenKeys(eventKey, keyEntities),
|
90 | indent: _this.listRef.current.getIndentWidth()
|
91 | });
|
92 | _this.setExpandedKeys(newExpandedKeys);
|
93 | window.addEventListener('dragend', _this.onWindowDragEnd);
|
94 | onDragStart === null || onDragStart === void 0 ? void 0 : onDragStart({
|
95 | event: event,
|
96 | node: convertNodePropsToEventData(node.props)
|
97 | });
|
98 | };
|
99 | |
100 |
|
101 |
|
102 |
|
103 |
|
104 |
|
105 |
|
106 | _this.onNodeDragEnter = function (event, node) {
|
107 | var _this$state2 = _this.state,
|
108 | expandedKeys = _this$state2.expandedKeys,
|
109 | keyEntities = _this$state2.keyEntities,
|
110 | dragChildrenKeys = _this$state2.dragChildrenKeys,
|
111 | flattenNodes = _this$state2.flattenNodes,
|
112 | indent = _this$state2.indent;
|
113 | var _this$props = _this.props,
|
114 | onDragEnter = _this$props.onDragEnter,
|
115 | onExpand = _this$props.onExpand,
|
116 | allowDrop = _this$props.allowDrop,
|
117 | direction = _this$props.direction;
|
118 | var _node$props = node.props,
|
119 | pos = _node$props.pos,
|
120 | eventKey = _node$props.eventKey;
|
121 | var _assertThisInitialize = _assertThisInitialized(_this),
|
122 | dragNode = _assertThisInitialize.dragNode;
|
123 |
|
124 | if (_this.currentMouseOverDroppableNodeKey !== eventKey) {
|
125 | _this.currentMouseOverDroppableNodeKey = eventKey;
|
126 | }
|
127 | if (!dragNode) {
|
128 | _this.resetDragState();
|
129 | return;
|
130 | }
|
131 | var _calcDropPosition = calcDropPosition(event, dragNode, node, indent, _this.dragStartMousePosition, allowDrop, flattenNodes, keyEntities, expandedKeys, direction),
|
132 | dropPosition = _calcDropPosition.dropPosition,
|
133 | dropLevelOffset = _calcDropPosition.dropLevelOffset,
|
134 | dropTargetKey = _calcDropPosition.dropTargetKey,
|
135 | dropContainerKey = _calcDropPosition.dropContainerKey,
|
136 | dropTargetPos = _calcDropPosition.dropTargetPos,
|
137 | dropAllowed = _calcDropPosition.dropAllowed,
|
138 | dragOverNodeKey = _calcDropPosition.dragOverNodeKey;
|
139 | if (
|
140 |
|
141 | dragChildrenKeys.indexOf(dropTargetKey) !== -1 ||
|
142 |
|
143 | !dropAllowed) {
|
144 | _this.resetDragState();
|
145 | return;
|
146 | }
|
147 |
|
148 | if (!_this.delayedDragEnterLogic) {
|
149 | _this.delayedDragEnterLogic = {};
|
150 | }
|
151 | Object.keys(_this.delayedDragEnterLogic).forEach(function (key) {
|
152 | clearTimeout(_this.delayedDragEnterLogic[key]);
|
153 | });
|
154 | if (dragNode.props.eventKey !== node.props.eventKey) {
|
155 |
|
156 |
|
157 |
|
158 |
|
159 | event.persist();
|
160 | _this.delayedDragEnterLogic[pos] = window.setTimeout(function () {
|
161 | if (_this.state.draggingNodeKey === null) return;
|
162 | var newExpandedKeys = _toConsumableArray(expandedKeys);
|
163 | var entity = keyEntities[node.props.eventKey];
|
164 | if (entity && (entity.children || []).length) {
|
165 | newExpandedKeys = arrAdd(expandedKeys, node.props.eventKey);
|
166 | }
|
167 | if (!('expandedKeys' in _this.props)) {
|
168 | _this.setExpandedKeys(newExpandedKeys);
|
169 | }
|
170 | onExpand === null || onExpand === void 0 ? void 0 : onExpand(newExpandedKeys, {
|
171 | node: convertNodePropsToEventData(node.props),
|
172 | expanded: true,
|
173 | nativeEvent: event.nativeEvent
|
174 | });
|
175 | }, 800);
|
176 | }
|
177 |
|
178 | if (dragNode.props.eventKey === dropTargetKey && dropLevelOffset === 0) {
|
179 | _this.resetDragState();
|
180 | return;
|
181 | }
|
182 |
|
183 | _this.setState({
|
184 | dragOverNodeKey: dragOverNodeKey,
|
185 | dropPosition: dropPosition,
|
186 | dropLevelOffset: dropLevelOffset,
|
187 | dropTargetKey: dropTargetKey,
|
188 | dropContainerKey: dropContainerKey,
|
189 | dropTargetPos: dropTargetPos,
|
190 | dropAllowed: dropAllowed
|
191 | });
|
192 | onDragEnter === null || onDragEnter === void 0 ? void 0 : onDragEnter({
|
193 | event: event,
|
194 | node: convertNodePropsToEventData(node.props),
|
195 | expandedKeys: expandedKeys
|
196 | });
|
197 | };
|
198 | _this.onNodeDragOver = function (event, node) {
|
199 | var _this$state3 = _this.state,
|
200 | dragChildrenKeys = _this$state3.dragChildrenKeys,
|
201 | flattenNodes = _this$state3.flattenNodes,
|
202 | keyEntities = _this$state3.keyEntities,
|
203 | expandedKeys = _this$state3.expandedKeys,
|
204 | indent = _this$state3.indent;
|
205 | var _this$props2 = _this.props,
|
206 | onDragOver = _this$props2.onDragOver,
|
207 | allowDrop = _this$props2.allowDrop,
|
208 | direction = _this$props2.direction;
|
209 | var _assertThisInitialize2 = _assertThisInitialized(_this),
|
210 | dragNode = _assertThisInitialize2.dragNode;
|
211 | if (!dragNode) {
|
212 | return;
|
213 | }
|
214 | var _calcDropPosition2 = calcDropPosition(event, dragNode, node, indent, _this.dragStartMousePosition, allowDrop, flattenNodes, keyEntities, expandedKeys, direction),
|
215 | dropPosition = _calcDropPosition2.dropPosition,
|
216 | dropLevelOffset = _calcDropPosition2.dropLevelOffset,
|
217 | dropTargetKey = _calcDropPosition2.dropTargetKey,
|
218 | dropContainerKey = _calcDropPosition2.dropContainerKey,
|
219 | dropAllowed = _calcDropPosition2.dropAllowed,
|
220 | dropTargetPos = _calcDropPosition2.dropTargetPos,
|
221 | dragOverNodeKey = _calcDropPosition2.dragOverNodeKey;
|
222 | if (dragChildrenKeys.indexOf(dropTargetKey) !== -1 || !dropAllowed) {
|
223 |
|
224 |
|
225 | return;
|
226 | }
|
227 |
|
228 | if (dragNode.props.eventKey === dropTargetKey && dropLevelOffset === 0) {
|
229 | if (!(_this.state.dropPosition === null && _this.state.dropLevelOffset === null && _this.state.dropTargetKey === null && _this.state.dropContainerKey === null && _this.state.dropTargetPos === null && _this.state.dropAllowed === false && _this.state.dragOverNodeKey === null)) {
|
230 | _this.resetDragState();
|
231 | }
|
232 | } else if (!(dropPosition === _this.state.dropPosition && dropLevelOffset === _this.state.dropLevelOffset && dropTargetKey === _this.state.dropTargetKey && dropContainerKey === _this.state.dropContainerKey && dropTargetPos === _this.state.dropTargetPos && dropAllowed === _this.state.dropAllowed && dragOverNodeKey === _this.state.dragOverNodeKey)) {
|
233 | _this.setState({
|
234 | dropPosition: dropPosition,
|
235 | dropLevelOffset: dropLevelOffset,
|
236 | dropTargetKey: dropTargetKey,
|
237 | dropContainerKey: dropContainerKey,
|
238 | dropTargetPos: dropTargetPos,
|
239 | dropAllowed: dropAllowed,
|
240 | dragOverNodeKey: dragOverNodeKey
|
241 | });
|
242 | }
|
243 | onDragOver === null || onDragOver === void 0 ? void 0 : onDragOver({
|
244 | event: event,
|
245 | node: convertNodePropsToEventData(node.props)
|
246 | });
|
247 | };
|
248 | _this.onNodeDragLeave = function (event, node) {
|
249 |
|
250 |
|
251 | if (_this.currentMouseOverDroppableNodeKey === node.props.eventKey && !event.currentTarget.contains(event.relatedTarget)) {
|
252 | _this.resetDragState();
|
253 | _this.currentMouseOverDroppableNodeKey = null;
|
254 | }
|
255 | var onDragLeave = _this.props.onDragLeave;
|
256 | onDragLeave === null || onDragLeave === void 0 ? void 0 : onDragLeave({
|
257 | event: event,
|
258 | node: convertNodePropsToEventData(node.props)
|
259 | });
|
260 | };
|
261 |
|
262 |
|
263 | _this.onWindowDragEnd = function (event) {
|
264 | _this.onNodeDragEnd(event, null, true);
|
265 | window.removeEventListener('dragend', _this.onWindowDragEnd);
|
266 | };
|
267 |
|
268 | _this.onNodeDragEnd = function (event, node) {
|
269 | var onDragEnd = _this.props.onDragEnd;
|
270 | _this.setState({
|
271 | dragOverNodeKey: null
|
272 | });
|
273 | _this.cleanDragState();
|
274 | onDragEnd === null || onDragEnd === void 0 ? void 0 : onDragEnd({
|
275 | event: event,
|
276 | node: convertNodePropsToEventData(node.props)
|
277 | });
|
278 | _this.dragNode = null;
|
279 | window.removeEventListener('dragend', _this.onWindowDragEnd);
|
280 | };
|
281 | _this.onNodeDrop = function (event, node) {
|
282 | var _this$getActiveItem;
|
283 | var outsideTree = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
284 | var _this$state4 = _this.state,
|
285 | dragChildrenKeys = _this$state4.dragChildrenKeys,
|
286 | dropPosition = _this$state4.dropPosition,
|
287 | dropTargetKey = _this$state4.dropTargetKey,
|
288 | dropTargetPos = _this$state4.dropTargetPos,
|
289 | dropAllowed = _this$state4.dropAllowed;
|
290 | if (!dropAllowed) return;
|
291 | var onDrop = _this.props.onDrop;
|
292 | _this.setState({
|
293 | dragOverNodeKey: null
|
294 | });
|
295 | _this.cleanDragState();
|
296 | if (dropTargetKey === null) return;
|
297 | var abstractDropNodeProps = _objectSpread(_objectSpread({}, getTreeNodeProps(dropTargetKey, _this.getTreeNodeRequiredProps())), {}, {
|
298 | active: ((_this$getActiveItem = _this.getActiveItem()) === null || _this$getActiveItem === void 0 ? void 0 : _this$getActiveItem.key) === dropTargetKey,
|
299 | data: _this.state.keyEntities[dropTargetKey].node
|
300 | });
|
301 | var dropToChild = dragChildrenKeys.indexOf(dropTargetKey) !== -1;
|
302 | warning(!dropToChild, "Can not drop to dragNode's children node. This is a bug of rc-tree. Please report an issue.");
|
303 | var posArr = posToArr(dropTargetPos);
|
304 | var dropResult = {
|
305 | event: event,
|
306 | node: convertNodePropsToEventData(abstractDropNodeProps),
|
307 | dragNode: _this.dragNode ? convertNodePropsToEventData(_this.dragNode.props) : null,
|
308 | dragNodesKeys: [_this.dragNode.props.eventKey].concat(dragChildrenKeys),
|
309 | dropToGap: dropPosition !== 0,
|
310 | dropPosition: dropPosition + Number(posArr[posArr.length - 1])
|
311 | };
|
312 | if (!outsideTree) {
|
313 | onDrop === null || onDrop === void 0 ? void 0 : onDrop(dropResult);
|
314 | }
|
315 | _this.dragNode = null;
|
316 | };
|
317 | _this.cleanDragState = function () {
|
318 | var draggingNodeKey = _this.state.draggingNodeKey;
|
319 | if (draggingNodeKey !== null) {
|
320 | _this.setState({
|
321 | draggingNodeKey: null,
|
322 | dropPosition: null,
|
323 | dropContainerKey: null,
|
324 | dropTargetKey: null,
|
325 | dropLevelOffset: null,
|
326 | dropAllowed: true,
|
327 | dragOverNodeKey: null
|
328 | });
|
329 | }
|
330 | _this.dragStartMousePosition = null;
|
331 | _this.currentMouseOverDroppableNodeKey = null;
|
332 | };
|
333 | _this.triggerExpandActionExpand = function (e, treeNode) {
|
334 | var _this$state5 = _this.state,
|
335 | expandedKeys = _this$state5.expandedKeys,
|
336 | flattenNodes = _this$state5.flattenNodes;
|
337 | var expanded = treeNode.expanded,
|
338 | key = treeNode.key,
|
339 | isLeaf = treeNode.isLeaf;
|
340 | if (isLeaf || e.shiftKey || e.metaKey || e.ctrlKey) {
|
341 | return;
|
342 | }
|
343 | var node = flattenNodes.filter(function (nodeItem) {
|
344 | return nodeItem.key === key;
|
345 | })[0];
|
346 | var eventNode = convertNodePropsToEventData(_objectSpread(_objectSpread({}, getTreeNodeProps(key, _this.getTreeNodeRequiredProps())), {}, {
|
347 | data: node.data
|
348 | }));
|
349 | _this.setExpandedKeys(expanded ? arrDel(expandedKeys, key) : arrAdd(expandedKeys, key));
|
350 | _this.onNodeExpand(e, eventNode);
|
351 | };
|
352 | _this.onNodeClick = function (e, treeNode) {
|
353 | var _this$props3 = _this.props,
|
354 | onClick = _this$props3.onClick,
|
355 | expandAction = _this$props3.expandAction;
|
356 | if (expandAction === 'click') {
|
357 | _this.triggerExpandActionExpand(e, treeNode);
|
358 | }
|
359 | onClick === null || onClick === void 0 ? void 0 : onClick(e, treeNode);
|
360 | };
|
361 | _this.onNodeDoubleClick = function (e, treeNode) {
|
362 | var _this$props4 = _this.props,
|
363 | onDoubleClick = _this$props4.onDoubleClick,
|
364 | expandAction = _this$props4.expandAction;
|
365 | if (expandAction === 'doubleClick') {
|
366 | _this.triggerExpandActionExpand(e, treeNode);
|
367 | }
|
368 | onDoubleClick === null || onDoubleClick === void 0 ? void 0 : onDoubleClick(e, treeNode);
|
369 | };
|
370 | _this.onNodeSelect = function (e, treeNode) {
|
371 | var selectedKeys = _this.state.selectedKeys;
|
372 | var _this$state6 = _this.state,
|
373 | keyEntities = _this$state6.keyEntities,
|
374 | fieldNames = _this$state6.fieldNames;
|
375 | var _this$props5 = _this.props,
|
376 | onSelect = _this$props5.onSelect,
|
377 | multiple = _this$props5.multiple;
|
378 | var selected = treeNode.selected;
|
379 | var key = treeNode[fieldNames.key];
|
380 | var targetSelected = !selected;
|
381 |
|
382 | if (!targetSelected) {
|
383 | selectedKeys = arrDel(selectedKeys, key);
|
384 | } else if (!multiple) {
|
385 | selectedKeys = [key];
|
386 | } else {
|
387 | selectedKeys = arrAdd(selectedKeys, key);
|
388 | }
|
389 |
|
390 | var selectedNodes = selectedKeys.map(function (selectedKey) {
|
391 | var entity = keyEntities[selectedKey];
|
392 | if (!entity) return null;
|
393 | return entity.node;
|
394 | }).filter(function (node) {
|
395 | return node;
|
396 | });
|
397 | _this.setUncontrolledState({
|
398 | selectedKeys: selectedKeys
|
399 | });
|
400 | onSelect === null || onSelect === void 0 ? void 0 : onSelect(selectedKeys, {
|
401 | event: 'select',
|
402 | selected: targetSelected,
|
403 | node: treeNode,
|
404 | selectedNodes: selectedNodes,
|
405 | nativeEvent: e.nativeEvent
|
406 | });
|
407 | };
|
408 | _this.onNodeCheck = function (e, treeNode, checked) {
|
409 | var _this$state7 = _this.state,
|
410 | keyEntities = _this$state7.keyEntities,
|
411 | oriCheckedKeys = _this$state7.checkedKeys,
|
412 | oriHalfCheckedKeys = _this$state7.halfCheckedKeys;
|
413 | var _this$props6 = _this.props,
|
414 | checkStrictly = _this$props6.checkStrictly,
|
415 | onCheck = _this$props6.onCheck;
|
416 | var key = treeNode.key;
|
417 |
|
418 | var checkedObj;
|
419 | var eventObj = {
|
420 | event: 'check',
|
421 | node: treeNode,
|
422 | checked: checked,
|
423 | nativeEvent: e.nativeEvent
|
424 | };
|
425 | if (checkStrictly) {
|
426 | var checkedKeys = checked ? arrAdd(oriCheckedKeys, key) : arrDel(oriCheckedKeys, key);
|
427 | var halfCheckedKeys = arrDel(oriHalfCheckedKeys, key);
|
428 | checkedObj = {
|
429 | checked: checkedKeys,
|
430 | halfChecked: halfCheckedKeys
|
431 | };
|
432 | eventObj.checkedNodes = checkedKeys.map(function (checkedKey) {
|
433 | return keyEntities[checkedKey];
|
434 | }).filter(function (entity) {
|
435 | return entity;
|
436 | }).map(function (entity) {
|
437 | return entity.node;
|
438 | });
|
439 | _this.setUncontrolledState({
|
440 | checkedKeys: checkedKeys
|
441 | });
|
442 | } else {
|
443 |
|
444 | var _conductCheck = conductCheck([].concat(_toConsumableArray(oriCheckedKeys), [key]), true, keyEntities),
|
445 | _checkedKeys = _conductCheck.checkedKeys,
|
446 | _halfCheckedKeys = _conductCheck.halfCheckedKeys;
|
447 |
|
448 | if (!checked) {
|
449 | var keySet = new Set(_checkedKeys);
|
450 | keySet.delete(key);
|
451 | var _conductCheck2 = conductCheck(Array.from(keySet), {
|
452 | checked: false,
|
453 | halfCheckedKeys: _halfCheckedKeys
|
454 | }, keyEntities);
|
455 | _checkedKeys = _conductCheck2.checkedKeys;
|
456 | _halfCheckedKeys = _conductCheck2.halfCheckedKeys;
|
457 | }
|
458 | checkedObj = _checkedKeys;
|
459 |
|
460 | eventObj.checkedNodes = [];
|
461 | eventObj.checkedNodesPositions = [];
|
462 | eventObj.halfCheckedKeys = _halfCheckedKeys;
|
463 | _checkedKeys.forEach(function (checkedKey) {
|
464 | var entity = keyEntities[checkedKey];
|
465 | if (!entity) return;
|
466 | var node = entity.node,
|
467 | pos = entity.pos;
|
468 | eventObj.checkedNodes.push(node);
|
469 | eventObj.checkedNodesPositions.push({
|
470 | node: node,
|
471 | pos: pos
|
472 | });
|
473 | });
|
474 | _this.setUncontrolledState({
|
475 | checkedKeys: _checkedKeys
|
476 | }, false, {
|
477 | halfCheckedKeys: _halfCheckedKeys
|
478 | });
|
479 | }
|
480 | onCheck === null || onCheck === void 0 ? void 0 : onCheck(checkedObj, eventObj);
|
481 | };
|
482 | _this.onNodeLoad = function (treeNode) {
|
483 | var key = treeNode.key;
|
484 | var loadPromise = new Promise(function (resolve, reject) {
|
485 |
|
486 | _this.setState(function (_ref) {
|
487 | var _ref$loadedKeys = _ref.loadedKeys,
|
488 | loadedKeys = _ref$loadedKeys === void 0 ? [] : _ref$loadedKeys,
|
489 | _ref$loadingKeys = _ref.loadingKeys,
|
490 | loadingKeys = _ref$loadingKeys === void 0 ? [] : _ref$loadingKeys;
|
491 | var _this$props7 = _this.props,
|
492 | loadData = _this$props7.loadData,
|
493 | onLoad = _this$props7.onLoad;
|
494 | if (!loadData || loadedKeys.indexOf(key) !== -1 || loadingKeys.indexOf(key) !== -1) {
|
495 | return null;
|
496 | }
|
497 |
|
498 | var promise = loadData(treeNode);
|
499 | promise.then(function () {
|
500 | var currentLoadedKeys = _this.state.loadedKeys;
|
501 | var newLoadedKeys = arrAdd(currentLoadedKeys, key);
|
502 |
|
503 |
|
504 | onLoad === null || onLoad === void 0 ? void 0 : onLoad(newLoadedKeys, {
|
505 | event: 'load',
|
506 | node: treeNode
|
507 | });
|
508 | _this.setUncontrolledState({
|
509 | loadedKeys: newLoadedKeys
|
510 | });
|
511 | _this.setState(function (prevState) {
|
512 | return {
|
513 | loadingKeys: arrDel(prevState.loadingKeys, key)
|
514 | };
|
515 | });
|
516 | resolve();
|
517 | }).catch(function (e) {
|
518 | _this.setState(function (prevState) {
|
519 | return {
|
520 | loadingKeys: arrDel(prevState.loadingKeys, key)
|
521 | };
|
522 | });
|
523 |
|
524 | _this.loadingRetryTimes[key] = (_this.loadingRetryTimes[key] || 0) + 1;
|
525 | if (_this.loadingRetryTimes[key] >= MAX_RETRY_TIMES) {
|
526 | var currentLoadedKeys = _this.state.loadedKeys;
|
527 | warning(false, 'Retry for `loadData` many times but still failed. No more retry.');
|
528 | _this.setUncontrolledState({
|
529 | loadedKeys: arrAdd(currentLoadedKeys, key)
|
530 | });
|
531 | resolve();
|
532 | }
|
533 | reject(e);
|
534 | });
|
535 | return {
|
536 | loadingKeys: arrAdd(loadingKeys, key)
|
537 | };
|
538 | });
|
539 | });
|
540 |
|
541 | loadPromise.catch(function () {});
|
542 | return loadPromise;
|
543 | };
|
544 | _this.onNodeMouseEnter = function (event, node) {
|
545 | var onMouseEnter = _this.props.onMouseEnter;
|
546 | onMouseEnter === null || onMouseEnter === void 0 ? void 0 : onMouseEnter({
|
547 | event: event,
|
548 | node: node
|
549 | });
|
550 | };
|
551 | _this.onNodeMouseLeave = function (event, node) {
|
552 | var onMouseLeave = _this.props.onMouseLeave;
|
553 | onMouseLeave === null || onMouseLeave === void 0 ? void 0 : onMouseLeave({
|
554 | event: event,
|
555 | node: node
|
556 | });
|
557 | };
|
558 | _this.onNodeContextMenu = function (event, node) {
|
559 | var onRightClick = _this.props.onRightClick;
|
560 | if (onRightClick) {
|
561 | event.preventDefault();
|
562 | onRightClick({
|
563 | event: event,
|
564 | node: node
|
565 | });
|
566 | }
|
567 | };
|
568 | _this.onFocus = function () {
|
569 | var onFocus = _this.props.onFocus;
|
570 | _this.setState({
|
571 | focused: true
|
572 | });
|
573 | for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
574 | args[_key2] = arguments[_key2];
|
575 | }
|
576 | onFocus === null || onFocus === void 0 ? void 0 : onFocus.apply(void 0, args);
|
577 | };
|
578 | _this.onBlur = function () {
|
579 | var onBlur = _this.props.onBlur;
|
580 | _this.setState({
|
581 | focused: false
|
582 | });
|
583 | _this.onActiveChange(null);
|
584 | for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
585 | args[_key3] = arguments[_key3];
|
586 | }
|
587 | onBlur === null || onBlur === void 0 ? void 0 : onBlur.apply(void 0, args);
|
588 | };
|
589 | _this.getTreeNodeRequiredProps = function () {
|
590 | var _this$state8 = _this.state,
|
591 | expandedKeys = _this$state8.expandedKeys,
|
592 | selectedKeys = _this$state8.selectedKeys,
|
593 | loadedKeys = _this$state8.loadedKeys,
|
594 | loadingKeys = _this$state8.loadingKeys,
|
595 | checkedKeys = _this$state8.checkedKeys,
|
596 | halfCheckedKeys = _this$state8.halfCheckedKeys,
|
597 | dragOverNodeKey = _this$state8.dragOverNodeKey,
|
598 | dropPosition = _this$state8.dropPosition,
|
599 | keyEntities = _this$state8.keyEntities;
|
600 | return {
|
601 | expandedKeys: expandedKeys || [],
|
602 | selectedKeys: selectedKeys || [],
|
603 | loadedKeys: loadedKeys || [],
|
604 | loadingKeys: loadingKeys || [],
|
605 | checkedKeys: checkedKeys || [],
|
606 | halfCheckedKeys: halfCheckedKeys || [],
|
607 | dragOverNodeKey: dragOverNodeKey,
|
608 | dropPosition: dropPosition,
|
609 | keyEntities: keyEntities
|
610 | };
|
611 | };
|
612 |
|
613 |
|
614 | _this.setExpandedKeys = function (expandedKeys) {
|
615 | var _this$state9 = _this.state,
|
616 | treeData = _this$state9.treeData,
|
617 | fieldNames = _this$state9.fieldNames;
|
618 | var flattenNodes = flattenTreeData(treeData, expandedKeys, fieldNames);
|
619 | _this.setUncontrolledState({
|
620 | expandedKeys: expandedKeys,
|
621 | flattenNodes: flattenNodes
|
622 | }, true);
|
623 | };
|
624 | _this.onNodeExpand = function (e, treeNode) {
|
625 | var expandedKeys = _this.state.expandedKeys;
|
626 | var _this$state10 = _this.state,
|
627 | listChanging = _this$state10.listChanging,
|
628 | fieldNames = _this$state10.fieldNames;
|
629 | var _this$props8 = _this.props,
|
630 | onExpand = _this$props8.onExpand,
|
631 | loadData = _this$props8.loadData;
|
632 | var expanded = treeNode.expanded;
|
633 | var key = treeNode[fieldNames.key];
|
634 |
|
635 | if (listChanging) {
|
636 | return;
|
637 | }
|
638 |
|
639 | var index = expandedKeys.indexOf(key);
|
640 | var targetExpanded = !expanded;
|
641 | warning(expanded && index !== -1 || !expanded && index === -1, 'Expand state not sync with index check');
|
642 | if (targetExpanded) {
|
643 | expandedKeys = arrAdd(expandedKeys, key);
|
644 | } else {
|
645 | expandedKeys = arrDel(expandedKeys, key);
|
646 | }
|
647 | _this.setExpandedKeys(expandedKeys);
|
648 | onExpand === null || onExpand === void 0 ? void 0 : onExpand(expandedKeys, {
|
649 | node: treeNode,
|
650 | expanded: targetExpanded,
|
651 | nativeEvent: e.nativeEvent
|
652 | });
|
653 |
|
654 | if (targetExpanded && loadData) {
|
655 | var loadPromise = _this.onNodeLoad(treeNode);
|
656 | if (loadPromise) {
|
657 | loadPromise.then(function () {
|
658 |
|
659 | var newFlattenTreeData = flattenTreeData(_this.state.treeData, expandedKeys, fieldNames);
|
660 | _this.setUncontrolledState({
|
661 | flattenNodes: newFlattenTreeData
|
662 | });
|
663 | }).catch(function () {
|
664 | var currentExpandedKeys = _this.state.expandedKeys;
|
665 | var expandedKeysToRestore = arrDel(currentExpandedKeys, key);
|
666 | _this.setExpandedKeys(expandedKeysToRestore);
|
667 | });
|
668 | }
|
669 | }
|
670 | };
|
671 | _this.onListChangeStart = function () {
|
672 | _this.setUncontrolledState({
|
673 | listChanging: true
|
674 | });
|
675 | };
|
676 | _this.onListChangeEnd = function () {
|
677 | setTimeout(function () {
|
678 | _this.setUncontrolledState({
|
679 | listChanging: false
|
680 | });
|
681 | });
|
682 | };
|
683 |
|
684 | _this.onActiveChange = function (newActiveKey) {
|
685 | var activeKey = _this.state.activeKey;
|
686 | var onActiveChange = _this.props.onActiveChange;
|
687 | if (activeKey === newActiveKey) {
|
688 | return;
|
689 | }
|
690 | _this.setState({
|
691 | activeKey: newActiveKey
|
692 | });
|
693 | if (newActiveKey !== null) {
|
694 | _this.scrollTo({
|
695 | key: newActiveKey
|
696 | });
|
697 | }
|
698 | onActiveChange === null || onActiveChange === void 0 ? void 0 : onActiveChange(newActiveKey);
|
699 | };
|
700 | _this.getActiveItem = function () {
|
701 | var _this$state11 = _this.state,
|
702 | activeKey = _this$state11.activeKey,
|
703 | flattenNodes = _this$state11.flattenNodes;
|
704 | if (activeKey === null) {
|
705 | return null;
|
706 | }
|
707 | return flattenNodes.find(function (_ref2) {
|
708 | var key = _ref2.key;
|
709 | return key === activeKey;
|
710 | }) || null;
|
711 | };
|
712 | _this.offsetActiveKey = function (offset) {
|
713 | var _this$state12 = _this.state,
|
714 | flattenNodes = _this$state12.flattenNodes,
|
715 | activeKey = _this$state12.activeKey;
|
716 | var index = flattenNodes.findIndex(function (_ref3) {
|
717 | var key = _ref3.key;
|
718 | return key === activeKey;
|
719 | });
|
720 |
|
721 | if (index === -1 && offset < 0) {
|
722 | index = flattenNodes.length;
|
723 | }
|
724 | index = (index + offset + flattenNodes.length) % flattenNodes.length;
|
725 | var item = flattenNodes[index];
|
726 | if (item) {
|
727 | var key = item.key;
|
728 | _this.onActiveChange(key);
|
729 | } else {
|
730 | _this.onActiveChange(null);
|
731 | }
|
732 | };
|
733 | _this.onKeyDown = function (event) {
|
734 | var _this$state13 = _this.state,
|
735 | activeKey = _this$state13.activeKey,
|
736 | expandedKeys = _this$state13.expandedKeys,
|
737 | checkedKeys = _this$state13.checkedKeys,
|
738 | fieldNames = _this$state13.fieldNames;
|
739 | var _this$props9 = _this.props,
|
740 | onKeyDown = _this$props9.onKeyDown,
|
741 | checkable = _this$props9.checkable,
|
742 | selectable = _this$props9.selectable;
|
743 |
|
744 | switch (event.which) {
|
745 | case KeyCode.UP:
|
746 | {
|
747 | _this.offsetActiveKey(-1);
|
748 | event.preventDefault();
|
749 | break;
|
750 | }
|
751 | case KeyCode.DOWN:
|
752 | {
|
753 | _this.offsetActiveKey(1);
|
754 | event.preventDefault();
|
755 | break;
|
756 | }
|
757 | }
|
758 |
|
759 | var activeItem = _this.getActiveItem();
|
760 | if (activeItem && activeItem.data) {
|
761 | var treeNodeRequiredProps = _this.getTreeNodeRequiredProps();
|
762 | var expandable = activeItem.data.isLeaf === false || !!(activeItem.data[fieldNames.children] || []).length;
|
763 | var eventNode = convertNodePropsToEventData(_objectSpread(_objectSpread({}, getTreeNodeProps(activeKey, treeNodeRequiredProps)), {}, {
|
764 | data: activeItem.data,
|
765 | active: true
|
766 | }));
|
767 | switch (event.which) {
|
768 |
|
769 | case KeyCode.LEFT:
|
770 | {
|
771 |
|
772 | if (expandable && expandedKeys.includes(activeKey)) {
|
773 | _this.onNodeExpand({}, eventNode);
|
774 | } else if (activeItem.parent) {
|
775 | _this.onActiveChange(activeItem.parent.key);
|
776 | }
|
777 | event.preventDefault();
|
778 | break;
|
779 | }
|
780 | case KeyCode.RIGHT:
|
781 | {
|
782 |
|
783 | if (expandable && !expandedKeys.includes(activeKey)) {
|
784 | _this.onNodeExpand({}, eventNode);
|
785 | } else if (activeItem.children && activeItem.children.length) {
|
786 | _this.onActiveChange(activeItem.children[0].key);
|
787 | }
|
788 | event.preventDefault();
|
789 | break;
|
790 | }
|
791 |
|
792 | case KeyCode.ENTER:
|
793 | case KeyCode.SPACE:
|
794 | {
|
795 | if (checkable && !eventNode.disabled && eventNode.checkable !== false && !eventNode.disableCheckbox) {
|
796 | _this.onNodeCheck({}, eventNode, !checkedKeys.includes(activeKey));
|
797 | } else if (!checkable && selectable && !eventNode.disabled && eventNode.selectable !== false) {
|
798 | _this.onNodeSelect({}, eventNode);
|
799 | }
|
800 | break;
|
801 | }
|
802 | }
|
803 | }
|
804 | onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event);
|
805 | };
|
806 | |
807 |
|
808 |
|
809 | _this.setUncontrolledState = function (state) {
|
810 | var atomic = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
811 | var forceState = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
|
812 | if (!_this.destroyed) {
|
813 | var needSync = false;
|
814 | var allPassed = true;
|
815 | var newState = {};
|
816 | Object.keys(state).forEach(function (name) {
|
817 | if (name in _this.props) {
|
818 | allPassed = false;
|
819 | return;
|
820 | }
|
821 | needSync = true;
|
822 | newState[name] = state[name];
|
823 | });
|
824 | if (needSync && (!atomic || allPassed)) {
|
825 | _this.setState(_objectSpread(_objectSpread({}, newState), forceState));
|
826 | }
|
827 | }
|
828 | };
|
829 | _this.scrollTo = function (scroll) {
|
830 | _this.listRef.current.scrollTo(scroll);
|
831 | };
|
832 | return _this;
|
833 | }
|
834 | _createClass(Tree, [{
|
835 | key: "componentDidMount",
|
836 | value: function componentDidMount() {
|
837 | this.destroyed = false;
|
838 | this.onUpdated();
|
839 | }
|
840 | }, {
|
841 | key: "componentDidUpdate",
|
842 | value: function componentDidUpdate() {
|
843 | this.onUpdated();
|
844 | }
|
845 | }, {
|
846 | key: "onUpdated",
|
847 | value: function onUpdated() {
|
848 | var activeKey = this.props.activeKey;
|
849 | if (activeKey !== undefined && activeKey !== this.state.activeKey) {
|
850 | this.setState({
|
851 | activeKey: activeKey
|
852 | });
|
853 | if (activeKey !== null) {
|
854 | this.scrollTo({
|
855 | key: activeKey
|
856 | });
|
857 | }
|
858 | }
|
859 | }
|
860 | }, {
|
861 | key: "componentWillUnmount",
|
862 | value: function componentWillUnmount() {
|
863 | window.removeEventListener('dragend', this.onWindowDragEnd);
|
864 | this.destroyed = true;
|
865 | }
|
866 | }, {
|
867 | key: "resetDragState",
|
868 | value: function resetDragState() {
|
869 | this.setState({
|
870 | dragOverNodeKey: null,
|
871 | dropPosition: null,
|
872 | dropLevelOffset: null,
|
873 | dropTargetKey: null,
|
874 | dropContainerKey: null,
|
875 | dropTargetPos: null,
|
876 | dropAllowed: false
|
877 | });
|
878 | }
|
879 | }, {
|
880 | key: "render",
|
881 | value: function render() {
|
882 | var _classNames;
|
883 | var _this$state14 = this.state,
|
884 | focused = _this$state14.focused,
|
885 | flattenNodes = _this$state14.flattenNodes,
|
886 | keyEntities = _this$state14.keyEntities,
|
887 | draggingNodeKey = _this$state14.draggingNodeKey,
|
888 | activeKey = _this$state14.activeKey,
|
889 | dropLevelOffset = _this$state14.dropLevelOffset,
|
890 | dropContainerKey = _this$state14.dropContainerKey,
|
891 | dropTargetKey = _this$state14.dropTargetKey,
|
892 | dropPosition = _this$state14.dropPosition,
|
893 | dragOverNodeKey = _this$state14.dragOverNodeKey,
|
894 | indent = _this$state14.indent;
|
895 | var _this$props10 = this.props,
|
896 | prefixCls = _this$props10.prefixCls,
|
897 | className = _this$props10.className,
|
898 | style = _this$props10.style,
|
899 | showLine = _this$props10.showLine,
|
900 | focusable = _this$props10.focusable,
|
901 | _this$props10$tabInde = _this$props10.tabIndex,
|
902 | tabIndex = _this$props10$tabInde === void 0 ? 0 : _this$props10$tabInde,
|
903 | selectable = _this$props10.selectable,
|
904 | showIcon = _this$props10.showIcon,
|
905 | icon = _this$props10.icon,
|
906 | switcherIcon = _this$props10.switcherIcon,
|
907 | draggable = _this$props10.draggable,
|
908 | checkable = _this$props10.checkable,
|
909 | checkStrictly = _this$props10.checkStrictly,
|
910 | disabled = _this$props10.disabled,
|
911 | motion = _this$props10.motion,
|
912 | loadData = _this$props10.loadData,
|
913 | filterTreeNode = _this$props10.filterTreeNode,
|
914 | height = _this$props10.height,
|
915 | itemHeight = _this$props10.itemHeight,
|
916 | virtual = _this$props10.virtual,
|
917 | titleRender = _this$props10.titleRender,
|
918 | dropIndicatorRender = _this$props10.dropIndicatorRender,
|
919 | onContextMenu = _this$props10.onContextMenu,
|
920 | onScroll = _this$props10.onScroll,
|
921 | direction = _this$props10.direction,
|
922 | rootClassName = _this$props10.rootClassName,
|
923 | rootStyle = _this$props10.rootStyle;
|
924 | var domProps = pickAttrs(this.props, {
|
925 | aria: true,
|
926 | data: true
|
927 | });
|
928 |
|
929 | var draggableConfig;
|
930 | if (draggable) {
|
931 | if (_typeof(draggable) === 'object') {
|
932 | draggableConfig = draggable;
|
933 | } else if (typeof draggable === 'function') {
|
934 | draggableConfig = {
|
935 | nodeDraggable: draggable
|
936 | };
|
937 | } else {
|
938 | draggableConfig = {};
|
939 | }
|
940 | }
|
941 | return React.createElement(TreeContext.Provider, {
|
942 | value: {
|
943 | prefixCls: prefixCls,
|
944 | selectable: selectable,
|
945 | showIcon: showIcon,
|
946 | icon: icon,
|
947 | switcherIcon: switcherIcon,
|
948 | draggable: draggableConfig,
|
949 | draggingNodeKey: draggingNodeKey,
|
950 | checkable: checkable,
|
951 | checkStrictly: checkStrictly,
|
952 | disabled: disabled,
|
953 | keyEntities: keyEntities,
|
954 | dropLevelOffset: dropLevelOffset,
|
955 | dropContainerKey: dropContainerKey,
|
956 | dropTargetKey: dropTargetKey,
|
957 | dropPosition: dropPosition,
|
958 | dragOverNodeKey: dragOverNodeKey,
|
959 | indent: indent,
|
960 | direction: direction,
|
961 | dropIndicatorRender: dropIndicatorRender,
|
962 | loadData: loadData,
|
963 | filterTreeNode: filterTreeNode,
|
964 | titleRender: titleRender,
|
965 | onNodeClick: this.onNodeClick,
|
966 | onNodeDoubleClick: this.onNodeDoubleClick,
|
967 | onNodeExpand: this.onNodeExpand,
|
968 | onNodeSelect: this.onNodeSelect,
|
969 | onNodeCheck: this.onNodeCheck,
|
970 | onNodeLoad: this.onNodeLoad,
|
971 | onNodeMouseEnter: this.onNodeMouseEnter,
|
972 | onNodeMouseLeave: this.onNodeMouseLeave,
|
973 | onNodeContextMenu: this.onNodeContextMenu,
|
974 | onNodeDragStart: this.onNodeDragStart,
|
975 | onNodeDragEnter: this.onNodeDragEnter,
|
976 | onNodeDragOver: this.onNodeDragOver,
|
977 | onNodeDragLeave: this.onNodeDragLeave,
|
978 | onNodeDragEnd: this.onNodeDragEnd,
|
979 | onNodeDrop: this.onNodeDrop
|
980 | }
|
981 | }, React.createElement("div", {
|
982 | role: "tree",
|
983 | className: classNames(prefixCls, className, rootClassName, (_classNames = {}, _defineProperty(_classNames, "".concat(prefixCls, "-show-line"), showLine), _defineProperty(_classNames, "".concat(prefixCls, "-focused"), focused), _defineProperty(_classNames, "".concat(prefixCls, "-active-focused"), activeKey !== null), _classNames)),
|
984 | style: rootStyle
|
985 | }, React.createElement(NodeList, _extends({
|
986 | ref: this.listRef,
|
987 | prefixCls: prefixCls,
|
988 | style: style,
|
989 | data: flattenNodes,
|
990 | disabled: disabled,
|
991 | selectable: selectable,
|
992 | checkable: !!checkable,
|
993 | motion: motion,
|
994 | dragging: draggingNodeKey !== null,
|
995 | height: height,
|
996 | itemHeight: itemHeight,
|
997 | virtual: virtual,
|
998 | focusable: focusable,
|
999 | focused: focused,
|
1000 | tabIndex: tabIndex,
|
1001 | activeItem: this.getActiveItem(),
|
1002 | onFocus: this.onFocus,
|
1003 | onBlur: this.onBlur,
|
1004 | onKeyDown: this.onKeyDown,
|
1005 | onActiveChange: this.onActiveChange,
|
1006 | onListChangeStart: this.onListChangeStart,
|
1007 | onListChangeEnd: this.onListChangeEnd,
|
1008 | onContextMenu: onContextMenu,
|
1009 | onScroll: onScroll
|
1010 | }, this.getTreeNodeRequiredProps(), domProps))));
|
1011 | }
|
1012 | }], [{
|
1013 | key: "getDerivedStateFromProps",
|
1014 | value: function getDerivedStateFromProps(props, prevState) {
|
1015 | var prevProps = prevState.prevProps;
|
1016 | var newState = {
|
1017 | prevProps: props
|
1018 | };
|
1019 | function needSync(name) {
|
1020 | return !prevProps && name in props || prevProps && prevProps[name] !== props[name];
|
1021 | }
|
1022 |
|
1023 | var treeData;
|
1024 |
|
1025 | var fieldNames = prevState.fieldNames;
|
1026 | if (needSync('fieldNames')) {
|
1027 | fieldNames = fillFieldNames(props.fieldNames);
|
1028 | newState.fieldNames = fieldNames;
|
1029 | }
|
1030 |
|
1031 | if (needSync('treeData')) {
|
1032 | treeData = props.treeData;
|
1033 | } else if (needSync('children')) {
|
1034 | warning(false, '`children` of Tree is deprecated. Please use `treeData` instead.');
|
1035 | treeData = convertTreeToData(props.children);
|
1036 | }
|
1037 |
|
1038 | if (treeData) {
|
1039 | newState.treeData = treeData;
|
1040 | var entitiesMap = convertDataToEntities(treeData, {
|
1041 | fieldNames: fieldNames
|
1042 | });
|
1043 | newState.keyEntities = _objectSpread(_defineProperty({}, MOTION_KEY, MotionEntity), entitiesMap.keyEntities);
|
1044 |
|
1045 | if (process.env.NODE_ENV !== 'production') {
|
1046 | warningWithoutKey(treeData, fieldNames);
|
1047 | }
|
1048 | }
|
1049 | var keyEntities = newState.keyEntities || prevState.keyEntities;
|
1050 |
|
1051 | if (needSync('expandedKeys') || prevProps && needSync('autoExpandParent')) {
|
1052 | newState.expandedKeys = props.autoExpandParent || !prevProps && props.defaultExpandParent ? conductExpandParent(props.expandedKeys, keyEntities) : props.expandedKeys;
|
1053 | } else if (!prevProps && props.defaultExpandAll) {
|
1054 | var cloneKeyEntities = _objectSpread({}, keyEntities);
|
1055 | delete cloneKeyEntities[MOTION_KEY];
|
1056 | newState.expandedKeys = Object.keys(cloneKeyEntities).map(function (key) {
|
1057 | return cloneKeyEntities[key].key;
|
1058 | });
|
1059 | } else if (!prevProps && props.defaultExpandedKeys) {
|
1060 | newState.expandedKeys = props.autoExpandParent || props.defaultExpandParent ? conductExpandParent(props.defaultExpandedKeys, keyEntities) : props.defaultExpandedKeys;
|
1061 | }
|
1062 | if (!newState.expandedKeys) {
|
1063 | delete newState.expandedKeys;
|
1064 | }
|
1065 |
|
1066 | if (treeData || newState.expandedKeys) {
|
1067 | var flattenNodes = flattenTreeData(treeData || prevState.treeData, newState.expandedKeys || prevState.expandedKeys, fieldNames);
|
1068 | newState.flattenNodes = flattenNodes;
|
1069 | }
|
1070 |
|
1071 | if (props.selectable) {
|
1072 | if (needSync('selectedKeys')) {
|
1073 | newState.selectedKeys = calcSelectedKeys(props.selectedKeys, props);
|
1074 | } else if (!prevProps && props.defaultSelectedKeys) {
|
1075 | newState.selectedKeys = calcSelectedKeys(props.defaultSelectedKeys, props);
|
1076 | }
|
1077 | }
|
1078 |
|
1079 | if (props.checkable) {
|
1080 | var checkedKeyEntity;
|
1081 | if (needSync('checkedKeys')) {
|
1082 | checkedKeyEntity = parseCheckedKeys(props.checkedKeys) || {};
|
1083 | } else if (!prevProps && props.defaultCheckedKeys) {
|
1084 | checkedKeyEntity = parseCheckedKeys(props.defaultCheckedKeys) || {};
|
1085 | } else if (treeData) {
|
1086 |
|
1087 | checkedKeyEntity = parseCheckedKeys(props.checkedKeys) || {
|
1088 | checkedKeys: prevState.checkedKeys,
|
1089 | halfCheckedKeys: prevState.halfCheckedKeys
|
1090 | };
|
1091 | }
|
1092 | if (checkedKeyEntity) {
|
1093 | var _checkedKeyEntity = checkedKeyEntity,
|
1094 | _checkedKeyEntity$che = _checkedKeyEntity.checkedKeys,
|
1095 | checkedKeys = _checkedKeyEntity$che === void 0 ? [] : _checkedKeyEntity$che,
|
1096 | _checkedKeyEntity$hal = _checkedKeyEntity.halfCheckedKeys,
|
1097 | halfCheckedKeys = _checkedKeyEntity$hal === void 0 ? [] : _checkedKeyEntity$hal;
|
1098 | if (!props.checkStrictly) {
|
1099 | var conductKeys = conductCheck(checkedKeys, true, keyEntities);
|
1100 | checkedKeys = conductKeys.checkedKeys;
|
1101 | halfCheckedKeys = conductKeys.halfCheckedKeys;
|
1102 | }
|
1103 | newState.checkedKeys = checkedKeys;
|
1104 | newState.halfCheckedKeys = halfCheckedKeys;
|
1105 | }
|
1106 | }
|
1107 |
|
1108 | if (needSync('loadedKeys')) {
|
1109 | newState.loadedKeys = props.loadedKeys;
|
1110 | }
|
1111 | return newState;
|
1112 | }
|
1113 | }]);
|
1114 | return Tree;
|
1115 | }(React.Component);
|
1116 | Tree.defaultProps = {
|
1117 | prefixCls: 'rc-tree',
|
1118 | showLine: false,
|
1119 | showIcon: true,
|
1120 | selectable: true,
|
1121 | multiple: false,
|
1122 | checkable: false,
|
1123 | disabled: false,
|
1124 | checkStrictly: false,
|
1125 | draggable: false,
|
1126 | defaultExpandParent: true,
|
1127 | autoExpandParent: false,
|
1128 | defaultExpandAll: false,
|
1129 | defaultExpandedKeys: [],
|
1130 | defaultCheckedKeys: [],
|
1131 | defaultSelectedKeys: [],
|
1132 | dropIndicatorRender: DropIndicator,
|
1133 | allowDrop: function allowDrop() {
|
1134 | return true;
|
1135 | },
|
1136 | expandAction: false
|
1137 | };
|
1138 | Tree.TreeNode = TreeNode;
|
1139 | export default Tree; |
\ | No newline at end of file |