dictUtil.js 2.4 KB

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