{"version":3,"file":"useFilter.mjs","sources":["../../../../../../../packages/components/tree-v2/src/composables/useFilter.ts"],"sourcesContent":["import { computed, ref } from 'vue'\nimport { isFunction } from '@vue/shared'\nimport type { Ref } from 'vue'\nimport type { Tree, TreeKey, TreeNode, TreeProps } from '../types'\n\n// When the data volume is very large using filter will cause lag\n// I haven't found a better way to optimize it for now\n// Maybe this problem should be left to the server side\nexport function useFilter(props: TreeProps, tree: Ref<Tree | undefined>) {\n  const hiddenNodeKeySet = ref<Set<TreeKey>>(new Set([]))\n  const hiddenExpandIconKeySet = ref<Set<TreeKey>>(new Set([]))\n\n  const filterable = computed(() => {\n    return isFunction(props.filterMethod)\n  })\n\n  function doFilter(query: string) {\n    if (!filterable.value) {\n      return\n    }\n    const expandKeySet = new Set<TreeKey>()\n    const hiddenExpandIconKeys = hiddenExpandIconKeySet.value\n    const hiddenKeys = hiddenNodeKeySet.value\n    const family: TreeNode[] = []\n    const nodes = tree.value?.treeNodes || []\n    const filter = props.filterMethod\n    hiddenKeys.clear()\n    function traverse(nodes: TreeNode[]) {\n      nodes.forEach((node) => {\n        family.push(node)\n        if (filter?.(query, node.data)) {\n          family.forEach((member) => {\n            expandKeySet.add(member.key)\n          })\n        } else if (node.isLeaf) {\n          hiddenKeys.add(node.key)\n        }\n        const children = node.children\n        if (children) {\n          traverse(children)\n        }\n        if (!node.isLeaf) {\n          if (!expandKeySet.has(node.key)) {\n            hiddenKeys.add(node.key)\n          } else if (children) {\n            // If all child nodes are hidden, then the expand icon will be hidden\n            let allHidden = true\n            for (const childNode of children) {\n              if (!hiddenKeys.has(childNode.key)) {\n                allHidden = false\n                break\n              }\n            }\n            if (allHidden) {\n              hiddenExpandIconKeys.add(node.key)\n            } else {\n              hiddenExpandIconKeys.delete(node.key)\n            }\n          }\n        }\n        family.pop()\n      })\n    }\n    traverse(nodes)\n    return expandKeySet\n  }\n\n  function isForceHiddenExpandIcon(node: TreeNode): boolean {\n    return hiddenExpandIconKeySet.value.has(node.key)\n  }\n\n  return {\n    hiddenExpandIconKeySet,\n    hiddenNodeKeySet,\n    doFilter,\n    isForceHiddenExpandIcon,\n  }\n}\n"],"names":["nodes"],"mappings":";;;AAQgB,SAAA,SAAA,CAAU,OAAkB,IAA6B,EAAA;AACvE,EAAA,MAAM,mBAAmB,GAAkB,iBAAA,IAAI,GAAI,CAAA,EAAE,CAAC,CAAA,CAAA;AACtD,EAAA,MAAM,yBAAyB,GAAkB,iBAAA,IAAI,GAAI,CAAA,EAAE,CAAC,CAAA,CAAA;AAE5D,EAAM,MAAA,UAAA,GAAa,SAAS,MAAM;AAChC,IAAO,OAAA,UAAA,CAAW,MAAM,YAAY,CAAA,CAAA;AAAA,GACrC,CAAA,CAAA;AAED,EAAA,SAAS,SAAS,KAAe,EAAA;AAC/B,IAAI,IAAA,CAAC,WAAW,KAAO,EAAA;AACrB,MAAA,OAAA;AAAA,KACF;AACA,IAAM,MAAA,YAAA,uBAAmB,GAAa,EAAA,CAAA;AACtC,IAAA,MAAM,uBAAuB,sBAAuB,CAAA,KAAA,CAAA;AACpD,IAAA,MAAM,aAAa,gBAAiB,CAAA,KAAA,CAAA;AACpC,IAAA,MAAM,SAAqB,EAAC,CAAA;AAC5B,IAAA,MAAM,KAAQ,GAAA,IAAA,CAAK,KAAO,EAAA,SAAA,IAAa,EAAC,CAAA;AACxC,IAAA,MAAM,SAAS,KAAM,CAAA,YAAA,CAAA;AACrB,IAAA,UAAA,CAAW,KAAM,EAAA,CAAA;AACjB,IAAA,SAAS,SAASA,MAAmB,EAAA;AACnC,MAAAA,MAAAA,CAAM,OAAQ,CAAA,CAAC,IAAS,KAAA;AACtB,QAAA,MAAA,CAAO,KAAK,IAAI,CAAA,CAAA;AAChB,QAAA,IAAI,MAAS,GAAA,KAAA,EAAO,IAAK,CAAA,IAAI,CAAG,EAAA;AAC9B,UAAO,MAAA,CAAA,OAAA,CAAQ,CAAC,MAAW,KAAA;AACzB,YAAa,YAAA,CAAA,GAAA,CAAI,OAAO,GAAG,CAAA,CAAA;AAAA,WAC5B,CAAA,CAAA;AAAA,SACH,MAAA,IAAW,KAAK,MAAQ,EAAA;AACtB,UAAW,UAAA,CAAA,GAAA,CAAI,KAAK,GAAG,CAAA,CAAA;AAAA,SACzB;AACA,QAAA,MAAM,WAAW,IAAK,CAAA,QAAA,CAAA;AACtB,QAAA,IAAI,QAAU,EAAA;AACZ,UAAA,QAAA,CAAS,QAAQ,CAAA,CAAA;AAAA,SACnB;AACA,QAAI,IAAA,CAAC,KAAK,MAAQ,EAAA;AAChB,UAAA,IAAI,CAAC,YAAA,CAAa,GAAI,CAAA,IAAA,CAAK,GAAG,CAAG,EAAA;AAC/B,YAAW,UAAA,CAAA,GAAA,CAAI,KAAK,GAAG,CAAA,CAAA;AAAA,qBACd,QAAU,EAAA;AAEnB,YAAA,IAAI,SAAY,GAAA,IAAA,CAAA;AAChB,YAAA,KAAA,MAAW,aAAa,QAAU,EAAA;AAChC,cAAA,IAAI,CAAC,UAAA,CAAW,GAAI,CAAA,SAAA,CAAU,GAAG,CAAG,EAAA;AAClC,gBAAY,SAAA,GAAA,KAAA,CAAA;AACZ,gBAAA,MAAA;AAAA,eACF;AAAA,aACF;AACA,YAAA,IAAI,SAAW,EAAA;AACb,cAAqB,oBAAA,CAAA,GAAA,CAAI,KAAK,GAAG,CAAA,CAAA;AAAA,aAC5B,MAAA;AACL,cAAqB,oBAAA,CAAA,MAAA,CAAO,KAAK,GAAG,CAAA,CAAA;AAAA,aACtC;AAAA,WACF;AAAA,SACF;AACA,QAAA,MAAA,CAAO,GAAI,EAAA,CAAA;AAAA,OACZ,CAAA,CAAA;AAAA,KACH;AACA,IAAA,QAAA,CAAS,KAAK,CAAA,CAAA;AACd,IAAO,OAAA,YAAA,CAAA;AAAA,GACT;AAEA,EAAA,SAAS,wBAAwB,IAAyB,EAAA;AACxD,IAAA,OAAO,sBAAuB,CAAA,KAAA,CAAM,GAAI,CAAA,IAAA,CAAK,GAAG,CAAA,CAAA;AAAA,GAClD;AAEA,EAAO,OAAA;AAAA,IACL,sBAAA;AAAA,IACA,gBAAA;AAAA,IACA,QAAA;AAAA,IACA,uBAAA;AAAA,GACF,CAAA;AACF;;;;"}