useTreeData.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.default = useTreeData;
  7. var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
  8. var _vue = require("vue");
  9. var _legacyUtil = require("../utils/legacyUtil");
  10. function parseSimpleTreeData(treeData, _ref) {
  11. var id = _ref.id,
  12. pId = _ref.pId,
  13. rootPId = _ref.rootPId;
  14. var keyNodes = {};
  15. var rootNodeList = [];
  16. // Fill in the map
  17. var nodeList = treeData.map(function (node) {
  18. var clone = (0, _objectSpread2.default)({}, node);
  19. var key = clone[id];
  20. keyNodes[key] = clone;
  21. clone.key = clone.key || key;
  22. return clone;
  23. });
  24. // Connect tree
  25. nodeList.forEach(function (node) {
  26. var parentKey = node[pId];
  27. var parent = keyNodes[parentKey];
  28. // Fill parent
  29. if (parent) {
  30. parent.children = parent.children || [];
  31. parent.children.push(node);
  32. }
  33. // Fill root tree node
  34. if (parentKey === rootPId || !parent && rootPId === null) {
  35. rootNodeList.push(node);
  36. }
  37. });
  38. return rootNodeList;
  39. }
  40. /**
  41. * Convert `treeData` or `children` into formatted `treeData`.
  42. * Will not re-calculate if `treeData` or `children` not change.
  43. */
  44. function useTreeData(treeData, children, simpleMode) {
  45. var mergedTreeData = (0, _vue.shallowRef)();
  46. (0, _vue.watch)([simpleMode, treeData, children], function () {
  47. var simpleModeValue = simpleMode.value;
  48. if (treeData.value) {
  49. mergedTreeData.value = simpleMode.value ? parseSimpleTreeData((0, _vue.toRaw)(treeData.value), (0, _objectSpread2.default)({
  50. id: 'id',
  51. pId: 'pId',
  52. rootPId: null
  53. }, simpleModeValue !== true ? simpleModeValue : {})) : (0, _vue.toRaw)(treeData.value).slice();
  54. } else {
  55. mergedTreeData.value = (0, _legacyUtil.convertChildrenToData)((0, _vue.toRaw)(children.value));
  56. }
  57. }, {
  58. immediate: true,
  59. deep: true
  60. });
  61. return mergedTreeData;
  62. }