dictUtil.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
  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 _treeUtil = require("rc-tree/lib/utils/treeUtil");
  10. const RECORD_NONE = 0;
  11. const RECORD_START = 1;
  12. const RECORD_END = 2;
  13. function traverseNodesKey(treeData, callback, fieldNames) {
  14. const {
  15. key: fieldKey,
  16. children: fieldChildren
  17. } = fieldNames;
  18. function processNode(dataNode) {
  19. const key = dataNode[fieldKey];
  20. const children = dataNode[fieldChildren];
  21. if (callback(key, dataNode) !== false) {
  22. traverseNodesKey(children || [], callback, fieldNames);
  23. }
  24. }
  25. treeData.forEach(processNode);
  26. }
  27. /** 计算选中范围,只考虑expanded情况以优化性能 */
  28. function calcRangeKeys({
  29. treeData,
  30. expandedKeys,
  31. startKey,
  32. endKey,
  33. fieldNames
  34. }) {
  35. const keys = [];
  36. let record = RECORD_NONE;
  37. if (startKey && startKey === endKey) {
  38. return [startKey];
  39. }
  40. if (!startKey || !endKey) {
  41. return [];
  42. }
  43. function matchKey(key) {
  44. return key === startKey || key === endKey;
  45. }
  46. traverseNodesKey(treeData, key => {
  47. if (record === RECORD_END) {
  48. return false;
  49. }
  50. if (matchKey(key)) {
  51. // Match test
  52. keys.push(key);
  53. if (record === RECORD_NONE) {
  54. record = RECORD_START;
  55. } else if (record === RECORD_START) {
  56. record = RECORD_END;
  57. return false;
  58. }
  59. } else if (record === RECORD_START) {
  60. // Append selection
  61. keys.push(key);
  62. }
  63. return expandedKeys.includes(key);
  64. }, (0, _treeUtil.fillFieldNames)(fieldNames));
  65. return keys;
  66. }
  67. function convertDirectoryKeysToNodes(treeData, keys, fieldNames) {
  68. const restKeys = (0, _toConsumableArray2.default)(keys);
  69. const nodes = [];
  70. traverseNodesKey(treeData, (key, node) => {
  71. const index = restKeys.indexOf(key);
  72. if (index !== -1) {
  73. nodes.push(node);
  74. restKeys.splice(index, 1);
  75. }
  76. return !!restKeys.length;
  77. }, (0, _treeUtil.fillFieldNames)(fieldNames));
  78. return nodes;
  79. }