{"version":3,"file":"use-selected.mjs","sources":["../../../../../../../packages/components/tree/src/hooks/use-selected.ts"],"sourcesContent":["import { computed, getCurrentInstance, ref } from 'vue'\nimport type { Ref } from 'vue'\nimport type { TreeNode } from '../type'\nimport { isArray } from '../../../../utils/is'\n\nexport const useSelected = ({\n  selected,\n  multiple,\n  nodeValueMap\n}: {\n  selected: Ref<(string | number)[] | undefined>\n  multiple: Ref<boolean>\n  nodeValueMap: Map<string | number, TreeNode>\n}) => {\n  const instance = getCurrentInstance()\n\n  const hasUpdateSelectedEvent = computed(() => instance?.vnode?.props?.['onUpdate:selected'])\n  const innerSelectedValues = ref<(string | number)[]>([])\n  const focusNodeValues = ref<(string | number)[]>([])\n\n  const selectedValues = computed(() => {\n    const values = selected.value ?? innerSelectedValues.value\n    return isArray(values) ? values : [values]\n  })\n\n  const updateSelectedValues = (values: (string | number)[]) => {\n    if (hasUpdateSelectedEvent.value) {\n      instance?.emit('update:selected', values)\n    }\n\n    instance?.emit('change-selected', values)\n  }\n\n  const exposed: Record<string, Function> = {\n    getSelectedNodes() {\n      return selectedValues.value.map((value) => nodeValueMap.get(value))\n    },\n    getNodesByValues(values: (string | number)[]) {\n      return values.map((value) => nodeValueMap.get(value))\n    }\n  }\n\n  if (instance?.exposed) {\n    Object.keys(exposed).forEach((method) => {\n      instance.exposed![method] = exposed[method]\n    })\n  }\n\n  const handleNodeSelected = (node: TreeNode) => {\n    const value = node.value\n    if (multiple.value) {\n      const origin = selectedValues.value.slice()\n      const index = origin.findIndex((val) => val === value)\n      if (~index) {\n        origin.splice(index, 1)\n      } else {\n        origin.push(value)\n      }\n      updateSelectedValues(origin)\n    } else {\n      updateSelectedValues([value])\n    }\n\n    focusNodeValues.value = [value]\n  }\n\n  return { handleNodeSelected, selectedValues, focusNodeValues }\n}\n"],"names":[],"mappings":"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"}