useTreeData.js 1.7 KB

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