UNPKG

2.25 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports.calcRangeKeys = calcRangeKeys;
9exports.convertDirectoryKeysToNodes = convertDirectoryKeysToNodes;
10
11var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
12
13var Record;
14
15(function (Record) {
16 Record[Record["None"] = 0] = "None";
17 Record[Record["Start"] = 1] = "Start";
18 Record[Record["End"] = 2] = "End";
19})(Record || (Record = {}));
20
21function traverseNodesKey(treeData, callback) {
22 function processNode(dataNode) {
23 var key = dataNode.key,
24 children = dataNode.children;
25
26 if (callback(key, dataNode) !== false) {
27 traverseNodesKey(children || [], callback);
28 }
29 }
30
31 treeData.forEach(processNode);
32}
33/** 计算选中范围,只考虑expanded情况以优化性能 */
34
35
36function calcRangeKeys(_ref) {
37 var treeData = _ref.treeData,
38 expandedKeys = _ref.expandedKeys,
39 startKey = _ref.startKey,
40 endKey = _ref.endKey;
41 var keys = [];
42 var record = Record.None;
43
44 if (startKey && startKey === endKey) {
45 return [startKey];
46 }
47
48 if (!startKey || !endKey) {
49 return [];
50 }
51
52 function matchKey(key) {
53 return key === startKey || key === endKey;
54 }
55
56 traverseNodesKey(treeData, function (key) {
57 if (record === Record.End) {
58 return false;
59 }
60
61 if (matchKey(key)) {
62 // Match test
63 keys.push(key);
64
65 if (record === Record.None) {
66 record = Record.Start;
67 } else if (record === Record.Start) {
68 record = Record.End;
69 return false;
70 }
71 } else if (record === Record.Start) {
72 // Append selection
73 keys.push(key);
74 }
75
76 if (expandedKeys.indexOf(key) === -1) {
77 return false;
78 }
79
80 return true;
81 });
82 return keys;
83}
84
85function convertDirectoryKeysToNodes(treeData, keys) {
86 var restKeys = (0, _toConsumableArray2["default"])(keys);
87 var nodes = [];
88 traverseNodesKey(treeData, function (key, node) {
89 var index = restKeys.indexOf(key);
90
91 if (index !== -1) {
92 nodes.push(node);
93 restKeys.splice(index, 1);
94 }
95
96 return !!restKeys.length;
97 });
98 return nodes;
99}
\No newline at end of file