8e369686c6b5f252d42ada5024165e1634438eeca13f1a4803e116c409d8ea66f66c5350457f344ea5cdec94a461653d31ba435b013d1db009481b84095942 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import { ref, computed } from 'vue';
  2. import { isFunction } from '@vue/shared';
  3. function useFilter(props, tree) {
  4. const hiddenNodeKeySet = ref(/* @__PURE__ */ new Set([]));
  5. const hiddenExpandIconKeySet = ref(/* @__PURE__ */ new Set([]));
  6. const filterable = computed(() => {
  7. return isFunction(props.filterMethod);
  8. });
  9. function doFilter(query) {
  10. var _a;
  11. if (!filterable.value) {
  12. return;
  13. }
  14. const expandKeySet = /* @__PURE__ */ new Set();
  15. const hiddenExpandIconKeys = hiddenExpandIconKeySet.value;
  16. const hiddenKeys = hiddenNodeKeySet.value;
  17. const family = [];
  18. const nodes = ((_a = tree.value) == null ? void 0 : _a.treeNodes) || [];
  19. const filter = props.filterMethod;
  20. hiddenKeys.clear();
  21. function traverse(nodes2) {
  22. nodes2.forEach((node) => {
  23. family.push(node);
  24. if (filter == null ? void 0 : filter(query, node.data, node)) {
  25. family.forEach((member) => {
  26. expandKeySet.add(member.key);
  27. member.expanded = true;
  28. });
  29. } else {
  30. node.expanded = false;
  31. if (node.isLeaf) {
  32. hiddenKeys.add(node.key);
  33. }
  34. }
  35. const children = node.children;
  36. if (children) {
  37. traverse(children);
  38. }
  39. if (!node.isLeaf) {
  40. if (!expandKeySet.has(node.key)) {
  41. hiddenKeys.add(node.key);
  42. } else if (children) {
  43. let allHidden = true;
  44. for (const childNode of children) {
  45. if (!hiddenKeys.has(childNode.key)) {
  46. allHidden = false;
  47. break;
  48. }
  49. }
  50. if (allHidden) {
  51. hiddenExpandIconKeys.add(node.key);
  52. } else {
  53. hiddenExpandIconKeys.delete(node.key);
  54. }
  55. }
  56. }
  57. family.pop();
  58. });
  59. }
  60. traverse(nodes);
  61. return expandKeySet;
  62. }
  63. function isForceHiddenExpandIcon(node) {
  64. return hiddenExpandIconKeySet.value.has(node.key);
  65. }
  66. return {
  67. hiddenExpandIconKeySet,
  68. hiddenNodeKeySet,
  69. doFilter,
  70. isForceHiddenExpandIcon
  71. };
  72. }
  73. export { useFilter };
  74. //# sourceMappingURL=useFilter.mjs.map