1 | import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
2 | import { isArray, isNil } from '@antv/util';
|
3 |
|
4 | function cloneElement(element, props) {
|
5 | if (!element) return element;
|
6 | return _objectSpread(_objectSpread({}, element), {}, {
|
7 | props: _objectSpread(_objectSpread({}, element.props), props)
|
8 | });
|
9 | }
|
10 |
|
11 | function map(children, fn) {
|
12 | if (!children) {
|
13 | return fn(children);
|
14 | }
|
15 |
|
16 | if (isArray(children)) {
|
17 | return children.map(function (child) {
|
18 | return map(child, fn);
|
19 | });
|
20 | }
|
21 |
|
22 | return fn(children);
|
23 | }
|
24 |
|
25 | function compareArray(nextElements, lastElements, callback) {
|
26 | var keyed = {};
|
27 | var nextLength = nextElements.length;
|
28 | var lastLength = lastElements.length;
|
29 |
|
30 | for (var i = 0, len = lastLength; i < len; i++) {
|
31 | var element = lastElements[i];
|
32 |
|
33 | if (element && !isNil(element.key)) {
|
34 | var key = element.key;
|
35 | keyed[key] = element;
|
36 | }
|
37 | }
|
38 |
|
39 |
|
40 | for (var _i = 0, _len = Math.max(nextLength, lastLength); _i < _len; _i++) {
|
41 | var _element = nextElements[_i];
|
42 |
|
43 | if (!_element) {
|
44 | compare(_element, lastElements[_i], callback);
|
45 | continue;
|
46 | }
|
47 |
|
48 | var _key = _element.key;
|
49 |
|
50 | if (!isNil(_element.key)) {
|
51 | var lastElement = keyed[_key];
|
52 | if (lastElement) delete keyed[_key];
|
53 | compare(_element, lastElement, callback);
|
54 | continue;
|
55 | }
|
56 |
|
57 | compare(_element, lastElements[_i], callback);
|
58 | }
|
59 |
|
60 |
|
61 | Object.keys(keyed).forEach(function (key) {
|
62 | compare(null, keyed[key], callback);
|
63 | });
|
64 | }
|
65 |
|
66 |
|
67 | function compare(nextElement, lastElement, callback) {
|
68 |
|
69 | if (!nextElement || !lastElement) {
|
70 | callback(nextElement, lastElement);
|
71 | return;
|
72 | }
|
73 |
|
74 | if (isArray(nextElement) || isArray(lastElement)) {
|
75 | var nextElementArray = isArray(nextElement) ? nextElement : [nextElement];
|
76 | var lastElementArray = isArray(lastElement) ? lastElement : [lastElement];
|
77 | compareArray(nextElementArray, lastElementArray, callback);
|
78 | return;
|
79 | }
|
80 |
|
81 | callback(nextElement, lastElement);
|
82 | }
|
83 |
|
84 | function toArray(element) {
|
85 | if (!element) {
|
86 | return element;
|
87 | }
|
88 |
|
89 | if (!isArray(element)) {
|
90 | return [element];
|
91 | }
|
92 |
|
93 | var newArray = [];
|
94 |
|
95 | for (var i = 0, len = element.length; i < len; i++) {
|
96 | var item = element[i];
|
97 |
|
98 | if (isArray(item)) {
|
99 |
|
100 | newArray = newArray.concat(toArray(item));
|
101 | } else {
|
102 | newArray.push(item);
|
103 | }
|
104 | }
|
105 |
|
106 | return newArray;
|
107 | }
|
108 |
|
109 | var Children = {
|
110 | cloneElement: cloneElement,
|
111 | map: map,
|
112 | toArray: toArray,
|
113 | compare: compare
|
114 | };
|
115 | export default Children; |
\ | No newline at end of file |