1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
8 |
|
9 | var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
|
10 |
|
11 | exports.browser = browser;
|
12 | exports.getOffset = getOffset;
|
13 | exports.loopAllChildren = loopAllChildren;
|
14 | exports.isInclude = isInclude;
|
15 | exports.filterParentPosition = filterParentPosition;
|
16 | exports.handleCheckState = handleCheckState;
|
17 | exports.getCheck = getCheck;
|
18 | exports.getStrictlyValue = getStrictlyValue;
|
19 | exports.arraysEqual = arraysEqual;
|
20 | exports.closest = closest;
|
21 | exports.isTreeNode = isTreeNode;
|
22 | exports.toArray = toArray;
|
23 | exports.getNodeChildren = getNodeChildren;
|
24 | exports.warnOnlyTreeNode = warnOnlyTreeNode;
|
25 | exports.convertListToTree = convertListToTree;
|
26 | exports.throttle = throttle;
|
27 |
|
28 | var _react = require('react');
|
29 |
|
30 | var _react2 = _interopRequireDefault(_react);
|
31 |
|
32 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
33 |
|
34 | function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
|
35 |
|
36 | function browser(navigator) {
|
37 | var tem = void 0;
|
38 | var ua = navigator.userAgent;
|
39 | var M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
|
40 | if (/trident/i.test(M[1])) {
|
41 | tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
|
42 | return 'IE ' + (tem[1] || '');
|
43 | }
|
44 | if (M[1] === 'Chrome') {
|
45 | tem = ua.match(/\b(OPR|Edge)\/(\d+)/);
|
46 | if (tem) return tem.slice(1).join(' ').replace('OPR', 'Opera');
|
47 | }
|
48 | M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];
|
49 | tem = ua.match(/version\/(\d+)/i);
|
50 | if (tem) {
|
51 | M.splice(1, 1, tem[1]);
|
52 | }
|
53 | return M.join(' ');
|
54 | }
|
55 |
|
56 |
|
57 |
|
58 |
|
59 |
|
60 |
|
61 |
|
62 |
|
63 |
|
64 |
|
65 |
|
66 |
|
67 |
|
68 |
|
69 |
|
70 |
|
71 |
|
72 |
|
73 |
|
74 |
|
75 |
|
76 |
|
77 |
|
78 |
|
79 |
|
80 |
|
81 |
|
82 |
|
83 |
|
84 |
|
85 | function getOffset(ele) {
|
86 | var doc = void 0,
|
87 | win = void 0,
|
88 | docElem = void 0,
|
89 | rect = void 0;
|
90 |
|
91 | if (!ele.getClientRects().length) {
|
92 | return { top: 0, left: 0 };
|
93 | }
|
94 |
|
95 | rect = ele.getBoundingClientRect();
|
96 |
|
97 | if (rect.width || rect.height) {
|
98 | doc = ele.ownerDocument;
|
99 | win = doc.defaultView;
|
100 | docElem = doc.documentElement;
|
101 |
|
102 | return {
|
103 | top: rect.top + win.pageYOffset - docElem.clientTop,
|
104 | left: rect.left + win.pageXOffset - docElem.clientLeft
|
105 | };
|
106 | }
|
107 |
|
108 | return rect;
|
109 | }
|
110 |
|
111 |
|
112 | function getChildrenlength(children) {
|
113 | var len = 1;
|
114 | if (Array.isArray(children)) {
|
115 | len = children.length;
|
116 | }
|
117 | return len;
|
118 | }
|
119 |
|
120 | function getSiblingPosition(index, len, siblingPosition) {
|
121 | if (len === 1) {
|
122 | siblingPosition.first = true;
|
123 | siblingPosition.last = true;
|
124 | } else {
|
125 | siblingPosition.first = index === 0;
|
126 | siblingPosition.last = index === len - 1;
|
127 | }
|
128 | return siblingPosition;
|
129 | }
|
130 |
|
131 | function loopAllChildren(childs, callback, parent) {
|
132 | var baseNum = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
|
133 |
|
134 | var loop = function loop(children, level, _parent) {
|
135 | var len = getChildrenlength(children);
|
136 | _react2["default"].Children.forEach(children, function (item, index) {
|
137 | var pos = level + '-' + (index + parseInt(baseNum));
|
138 | if (item.props.children && item.type && item.type.isTreeNode) {
|
139 | loop(item.props.children, pos, { node: item, pos: pos });
|
140 | }
|
141 | callback(item, index, pos, item.key || pos, getSiblingPosition(index, len, {}), _parent);
|
142 | });
|
143 | };
|
144 | loop(childs, 0, parent);
|
145 | }
|
146 |
|
147 | function isInclude(smallArray, bigArray) {
|
148 | return smallArray.every(function (ii, i) {
|
149 | return ii === bigArray[i];
|
150 | });
|
151 | }
|
152 |
|
153 |
|
154 |
|
155 |
|
156 | function filterParentPosition(arr) {
|
157 | var levelObj = {};
|
158 | arr.forEach(function (item) {
|
159 | var posLen = item.split('-').length;
|
160 | if (!levelObj[posLen]) {
|
161 | levelObj[posLen] = [];
|
162 | }
|
163 | levelObj[posLen].push(item);
|
164 | });
|
165 | var levelArr = Object.keys(levelObj).sort();
|
166 |
|
167 | var _loop = function _loop(i) {
|
168 | if (levelArr[i + 1]) {
|
169 | levelObj[levelArr[i]].forEach(function (ii) {
|
170 | var _loop2 = function _loop2(j) {
|
171 | levelObj[levelArr[j]].forEach(function (_i, index) {
|
172 | if (isInclude(ii.split('-'), _i.split('-'))) {
|
173 | levelObj[levelArr[j]][index] = null;
|
174 | }
|
175 | });
|
176 | levelObj[levelArr[j]] = levelObj[levelArr[j]].filter(function (p) {
|
177 | return p;
|
178 | });
|
179 | };
|
180 |
|
181 | for (var j = i + 1; j < levelArr.length; j++) {
|
182 | _loop2(j);
|
183 | }
|
184 | });
|
185 | }
|
186 | };
|
187 |
|
188 | for (var i = 0; i < levelArr.length; i++) {
|
189 | _loop(i);
|
190 | }
|
191 | var nArr = [];
|
192 | levelArr.forEach(function (i) {
|
193 | nArr = nArr.concat(levelObj[i]);
|
194 | });
|
195 | return nArr;
|
196 | }
|
197 |
|
198 |
|
199 |
|
200 |
|
201 |
|
202 | function stripTail(str) {
|
203 | var arr = str.match(/(.+)(-[^-]+)$/);
|
204 | var st = '';
|
205 | if (arr && arr.length === 3) {
|
206 | st = arr[1];
|
207 | }
|
208 | return st;
|
209 | }
|
210 | function splitPosition(pos) {
|
211 | return pos.split('-');
|
212 | }
|
213 |
|
214 | function handleCheckState(obj, checkedPositionArr, checkIt) {
|
215 |
|
216 | var objKeys = Object.keys(obj);
|
217 |
|
218 | objKeys.forEach(function (i, index) {
|
219 | var iArr = splitPosition(i);
|
220 | var saved = false;
|
221 | checkedPositionArr.forEach(function (_pos) {
|
222 |
|
223 | var _posArr = splitPosition(_pos);
|
224 | if (iArr.length > _posArr.length && isInclude(_posArr, iArr)) {
|
225 | obj[i].halfChecked = false;
|
226 | obj[i].checked = checkIt;
|
227 | objKeys[index] = null;
|
228 | }
|
229 | if (iArr[0] === _posArr[0] && iArr[1] === _posArr[1]) {
|
230 |
|
231 | saved = true;
|
232 | }
|
233 | });
|
234 | if (!saved) {
|
235 | objKeys[index] = null;
|
236 | }
|
237 | });
|
238 |
|
239 |
|
240 | objKeys = objKeys.filter(function (i) {
|
241 | return i;
|
242 | });
|
243 |
|
244 | var _loop3 = function _loop3(_pIndex) {
|
245 |
|
246 | var loop = function loop(__pos) {
|
247 | var _posLen = splitPosition(__pos).length;
|
248 | if (_posLen <= 2) {
|
249 |
|
250 | return;
|
251 | }
|
252 | var sibling = 0;
|
253 | var siblingChecked = 0;
|
254 | var parentPosition = stripTail(__pos);
|
255 | objKeys.forEach(function (i /* , index*/) {
|
256 | var iArr = splitPosition(i);
|
257 | if (iArr.length === _posLen && isInclude(splitPosition(parentPosition), iArr)) {
|
258 | sibling++;
|
259 | if (obj[i].checked) {
|
260 | siblingChecked++;
|
261 | var _i = checkedPositionArr.indexOf(i);
|
262 | if (_i > -1) {
|
263 | checkedPositionArr.splice(_i, 1);
|
264 | if (_i <= _pIndex) {
|
265 | _pIndex--;
|
266 | }
|
267 | }
|
268 | } else if (obj[i].halfChecked) {
|
269 | siblingChecked += 0.5;
|
270 | }
|
271 |
|
272 | }
|
273 | });
|
274 |
|
275 | var parent = obj[parentPosition];
|
276 |
|
277 |
|
278 | if (siblingChecked === 0) {
|
279 | parent.checked = false;
|
280 | parent.halfChecked = false;
|
281 | } else if (siblingChecked === sibling) {
|
282 | parent.checked = true;
|
283 | parent.halfChecked = false;
|
284 | } else {
|
285 | parent.halfChecked = true;
|
286 | parent.checked = false;
|
287 | }
|
288 | loop(parentPosition);
|
289 | };
|
290 | loop(checkedPositionArr[_pIndex], _pIndex);
|
291 | pIndex = _pIndex;
|
292 | };
|
293 |
|
294 | for (var pIndex = 0; pIndex < checkedPositionArr.length; pIndex++) {
|
295 | _loop3(pIndex);
|
296 | }
|
297 |
|
298 | }
|
299 |
|
300 | function getCheck(treeNodesStates) {
|
301 | var halfCheckedKeys = [];
|
302 | var checkedKeys = [];
|
303 | var checkedNodes = [];
|
304 | var checkedNodesPositions = [];
|
305 | Object.keys(treeNodesStates).forEach(function (item) {
|
306 | var itemObj = treeNodesStates[item];
|
307 | if (itemObj.checked) {
|
308 | checkedKeys.push(itemObj.key);
|
309 | checkedNodes.push(itemObj.node);
|
310 | checkedNodesPositions.push({ node: itemObj.node, pos: item });
|
311 | } else if (itemObj.halfChecked) {
|
312 | halfCheckedKeys.push(itemObj.key);
|
313 | }
|
314 | });
|
315 | return {
|
316 | halfCheckedKeys: halfCheckedKeys, checkedKeys: checkedKeys, checkedNodes: checkedNodes, checkedNodesPositions: checkedNodesPositions, treeNodesStates: treeNodesStates
|
317 | };
|
318 | }
|
319 |
|
320 | function getStrictlyValue(checkedKeys, halfChecked) {
|
321 | if (halfChecked) {
|
322 | return { checked: checkedKeys, halfChecked: halfChecked };
|
323 | }
|
324 | return checkedKeys;
|
325 | }
|
326 |
|
327 | function arraysEqual(a, b) {
|
328 | if (a === b) return true;
|
329 | if (a === null || typeof a === 'undefined' || b === null || typeof b === 'undefined') {
|
330 | return false;
|
331 | }
|
332 | if (a.length !== b.length) return false;
|
333 |
|
334 |
|
335 |
|
336 |
|
337 | for (var i = 0; i < a.length; ++i) {
|
338 | if (a[i] !== b[i]) return false;
|
339 | }
|
340 | return true;
|
341 | }
|
342 |
|
343 | function closest(el, selector) {
|
344 | var matchesSelector = el.matches || el.webkitMatchesSelector || el.mozMatchesSelector || el.msMatchesSelector;
|
345 |
|
346 | while (el) {
|
347 | if (matchesSelector.call(el, selector)) {
|
348 | return el;
|
349 | } else {
|
350 | el = el.parentElement;
|
351 | }
|
352 | }
|
353 | return null;
|
354 | }
|
355 |
|
356 | function isTreeNode(node) {
|
357 | return node && node.type && node.type.isTreeNode;
|
358 | }
|
359 |
|
360 | function toArray(children) {
|
361 | var ret = [];
|
362 | _react2["default"].Children.forEach(children, function (c) {
|
363 | ret.push(c);
|
364 | });
|
365 | return ret;
|
366 | }
|
367 |
|
368 | function getNodeChildren(children) {
|
369 | return toArray(children).filter(isTreeNode);
|
370 | }
|
371 |
|
372 | var onlyTreeNodeWarned = false;
|
373 |
|
374 | function warnOnlyTreeNode() {
|
375 | if (onlyTreeNodeWarned) return;
|
376 | onlyTreeNodeWarned = true;
|
377 | console.warn('Tree only accept TreeNode as children.');
|
378 | }
|
379 |
|
380 |
|
381 |
|
382 |
|
383 |
|
384 |
|
385 |
|
386 | function convertListToTree(treeData, attr, flatTreeKeysMap) {
|
387 | var tree = [];
|
388 | var resData = treeData,
|
389 |
|
390 | resKeysMap = {},
|
391 |
|
392 | treeKeysMap = {};
|
393 | resData.map(function (element) {
|
394 | var key = attr.id;
|
395 | resKeysMap[element[key]] = element;
|
396 | });
|
397 |
|
398 | var findParentNode = function findParentNode(node) {
|
399 | var parentKey = node[attr.parendId];
|
400 | if (parentKey !== attr.rootId) {
|
401 |
|
402 | var item = flatTreeKeysMap[parentKey];
|
403 |
|
404 | if (resKeysMap.hasOwnProperty(item[attr.id])) return;
|
405 | resData.unshift(item);
|
406 | resKeysMap[item[attr.id]] = item;
|
407 | findParentNode(item);
|
408 | } else {
|
409 |
|
410 | if (!treeKeysMap.hasOwnProperty(node[attr.id])) {
|
411 | var key = node.key,
|
412 | title = node.title,
|
413 | children = node.children,
|
414 | isLeaf = node.isLeaf,
|
415 | otherProps = _objectWithoutProperties(node, ['key', 'title', 'children', 'isLeaf']);
|
416 |
|
417 | var obj = {
|
418 | key: key,
|
419 | title: title,
|
420 | isLeaf: isLeaf,
|
421 | children: []
|
422 | };
|
423 | tree.push(_extends(obj, _extends({}, otherProps)));
|
424 | treeKeysMap[key] = node;
|
425 | }
|
426 | }
|
427 | };
|
428 |
|
429 | for (var i = 0; i < resData.length; i++) {
|
430 | var item = resData[i];
|
431 | if (item[attr.parendId] === attr.rootId && !treeKeysMap.hasOwnProperty(item[attr.id])) {
|
432 |
|
433 | var key = item.key,
|
434 | title = item.title,
|
435 | children = item.children,
|
436 | otherProps = _objectWithoutProperties(item, ['key', 'title', 'children']);
|
437 |
|
438 | var obj = {
|
439 | key: item[attr.id],
|
440 | title: item[attr.name],
|
441 | isLeaf: item[attr.isLeaf],
|
442 | children: []
|
443 | };
|
444 | tree.push(_extends(obj, _extends({}, otherProps)));
|
445 | treeKeysMap[key] = item;
|
446 | resData.splice(i, 1);
|
447 | i--;
|
448 | } else {
|
449 |
|
450 | findParentNode(item);
|
451 | }
|
452 | }
|
453 |
|
454 | var run = function run(treeArrs) {
|
455 | if (resData.length > 0) {
|
456 | for (var _i2 = 0; _i2 < treeArrs.length; _i2++) {
|
457 | for (var j = 0; j < resData.length; j++) {
|
458 | var _item = resData[j];
|
459 | if (treeArrs[_i2].key === _item[attr.parendId]) {
|
460 | var _key = _item.key,
|
461 | _title = _item.title,
|
462 | _children = _item.children,
|
463 | _otherProps = _objectWithoutProperties(_item, ['key', 'title', 'children']);
|
464 |
|
465 | var _obj = {
|
466 | key: _item[attr.id],
|
467 | title: _item[attr.name],
|
468 | isLeaf: _item[attr.isLeaf],
|
469 | children: []
|
470 | };
|
471 | treeArrs[_i2].children.push(_extends(_obj, _extends({}, _otherProps)));
|
472 | resData.splice(j, 1);
|
473 | j--;
|
474 | }
|
475 | }
|
476 | run(treeArrs[_i2].children);
|
477 | }
|
478 | }
|
479 | };
|
480 | run(tree);
|
481 | return tree;
|
482 | }
|
483 |
|
484 | function isObject(value) {
|
485 | var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);
|
486 | return value != null && (type == 'object' || type == 'function');
|
487 | }
|
488 |
|
489 |
|
490 |
|
491 |
|
492 |
|
493 |
|
494 |
|
495 | function throttle(fn, wait) {
|
496 | var last = void 0;
|
497 | return function () {
|
498 | var now = Date.now();
|
499 | if (!last) {
|
500 | fn.apply(this, arguments);
|
501 | last = now;
|
502 | return;
|
503 | }
|
504 | if (now - last >= wait) {
|
505 | fn.apply(this, arguments);
|
506 | last = now;
|
507 | }
|
508 | };
|
509 | } |
\ | No newline at end of file |