useTreeData.js 1.9 KB

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