dictUtil.js 2.1 KB

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