{"version":3,"file":"use-checked.mjs","sources":["../../../../../../../packages/components/tree/src/hooks/use-checked.ts"],"sourcesContent":["import type { Ref } from 'vue'\nimport { computed, getCurrentInstance, ref } from 'vue'\nimport type { TreeNode } from '../type'\nimport { dfs } from '../../../../utils/tree-traverse'\nexport const useChecked = ({\n  checked,\n  nodeValueMap,\n  nodeKeyMap,\n  checkStrictly\n}: {\n  checked: Ref<(string | number)[] | undefined>\n  nodeValueMap: Map<string | number, TreeNode>\n  nodeKeyMap: Map<string | number, TreeNode>\n  checkStrictly: Ref<boolean>\n}) => {\n  const instance = getCurrentInstance()\n  const innerCheckedValues = ref<(string | number)[]>([])\n  const hasUpdateCheckedEvent = computed(() => instance?.vnode?.props?.['onUpdate:checked'])\n  const checkedNodeKeys = computed(() => {\n    return transToNodeKeys(checked.value ?? innerCheckedValues.value)\n  })\n  const flattenNodes = computed(() => [...nodeValueMap.values()])\n\n  const getAllLeafNodes = (nodes: TreeNode[]) => {\n    const leafNodes: TreeNode[] = []\n    dfs(nodes, {\n      visitor(node) {\n        // 这里要去重\n        if (node.isLeaf && !leafNodes.includes(node)) {\n          leafNodes.push(node)\n        }\n      }\n    })\n    return leafNodes\n  }\n\n  const transToNodeKeys = (values: (string | number)[]) => {\n    if (checkStrictly.value) {\n      return values.map((value) => nodeValueMap.get(value)?.key).filter(Boolean) as string[]\n    } else {\n      const nodes = flattenNodes.value.filter((node) => values.includes(node.value))\n      const leafNodes = getAllLeafNodes(nodes)\n      return leafNodes.map((node) => node.key)\n    }\n  }\n\n  const updateCheckedNodeKeys = (keys: string[]) => {\n    // keys => values\n    const values = keys.map((key) => nodeKeyMap.get(key)).map((n) => n!.value)\n    if (hasUpdateCheckedEvent.value) {\n      instance?.emit('update:checked', values)\n    } else {\n      innerCheckedValues.value = values\n    }\n    instance?.emit('change-checked', values)\n  }\n\n  const toggleNodeCheckStatus = (node: TreeNode, checked: boolean) => {\n    const originKeys = checkedNodeKeys.value\n\n    let keys: string[] = []\n    if (!checkStrictly.value) {\n      // 产生关联关系\n      keys = getAllLeafNodes([node])\n        .filter((n) => !n.disabled)\n        .map((n) => n.key)\n    } else {\n      keys = [node.key]\n    }\n\n    if (checked) {\n      updateCheckedNodeKeys([...new Set(originKeys.concat(keys))])\n    } else {\n      updateCheckedNodeKeys(originKeys.filter((key) => !keys.includes(key)))\n    }\n  }\n\n  return {\n    checkedNodeKeys,\n    toggleNodeCheckStatus\n  }\n}\n"],"names":["checked"],"mappings":"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"}