element-plus
Version:
A Component Library for Vue 3
1 lines • 13.8 kB
Source Map (JSON)
{"version":3,"file":"useCheck.mjs","sources":["../../../../../../../packages/components/tree-v2/src/composables/useCheck.ts"],"sourcesContent":["import { getCurrentInstance, nextTick, ref, watch } from 'vue'\nimport {\n NODE_CHECK,\n NODE_CHECK_CHANGE,\n SetOperationEnum,\n} from '../virtual-tree'\n\nimport type { CheckboxValueType } from '@element-plus/components/checkbox'\nimport type { Ref } from 'vue'\nimport type { Tree, TreeKey, TreeNode, TreeNodeData, TreeProps } from '../types'\n\nexport function useCheck(props: TreeProps, tree: Ref<Tree | undefined>) {\n const checkedKeys = ref<Set<TreeKey>>(new Set())\n const indeterminateKeys = ref<Set<TreeKey>>(new Set())\n const { emit } = getCurrentInstance()!\n\n watch(\n [() => tree.value, () => props.defaultCheckedKeys],\n () => {\n return nextTick(() => {\n _setCheckedKeys(props.defaultCheckedKeys)\n })\n },\n {\n immediate: true,\n }\n )\n\n const updateCheckedKeys = () => {\n if (!tree.value || !props.showCheckbox || props.checkStrictly) {\n return\n }\n const { levelTreeNodeMap, maxLevel } = tree.value\n const checkedKeySet = checkedKeys.value\n const indeterminateKeySet = new Set<TreeKey>()\n // It is easier to determine the indeterminate state by\n // traversing from bottom to top\n // leaf nodes not have indeterminate status and can be skipped\n for (let level = maxLevel; level >= 1; --level) {\n const nodes = levelTreeNodeMap.get(level)\n if (!nodes) continue\n nodes.forEach((node) => {\n const children = node.children\n let isEffectivelyChecked =\n !node.isLeaf || node.disabled || checkedKeySet.has(node.key)\n if (children) {\n // Whether all child nodes are selected\n let allChecked = true\n // Whether a child node is selected\n let hasChecked = false\n for (const childNode of children) {\n const key = childNode.key\n if (!childNode.isEffectivelyChecked) {\n isEffectivelyChecked = false\n }\n if (checkedKeySet.has(key)) {\n hasChecked = true\n } else if (indeterminateKeySet.has(key)) {\n allChecked = false\n hasChecked = true\n break\n } else {\n allChecked = false\n }\n }\n if (allChecked) {\n checkedKeySet.add(node.key)\n } else if (hasChecked) {\n indeterminateKeySet.add(node.key)\n checkedKeySet.delete(node.key)\n } else {\n checkedKeySet.delete(node.key)\n indeterminateKeySet.delete(node.key)\n }\n }\n node.isEffectivelyChecked = isEffectivelyChecked\n })\n }\n indeterminateKeys.value = indeterminateKeySet\n }\n\n const isChecked = (node: TreeNode) => checkedKeys.value.has(node.key)\n\n const isIndeterminate = (node: TreeNode) =>\n indeterminateKeys.value.has(node.key)\n\n const toggleCheckbox = (\n node: TreeNode,\n isChecked: CheckboxValueType,\n nodeClick = true,\n immediateUpdate = true\n ) => {\n const checkedKeySet = checkedKeys.value\n const children = node.children\n if (!props.checkStrictly && nodeClick && children?.length) {\n isChecked = children.some((node) => !node.isEffectivelyChecked)\n }\n\n const toggle = (node: TreeNode, checked: CheckboxValueType) => {\n checkedKeySet[checked ? SetOperationEnum.ADD : SetOperationEnum.DELETE](\n node.key\n )\n const children = node.children\n if (!props.checkStrictly && children) {\n children.forEach((childNode) => {\n if (!childNode.disabled || childNode.children) {\n toggle(childNode, checked)\n }\n })\n }\n }\n toggle(node, isChecked)\n if (immediateUpdate) {\n updateCheckedKeys()\n }\n if (nodeClick) {\n afterNodeCheck(node, isChecked)\n }\n }\n\n const afterNodeCheck = (node: TreeNode, checked: CheckboxValueType) => {\n const { checkedNodes, checkedKeys } = getChecked()\n const { halfCheckedNodes, halfCheckedKeys } = getHalfChecked()\n emit(NODE_CHECK, node.data, {\n checkedKeys,\n checkedNodes,\n halfCheckedKeys,\n halfCheckedNodes,\n })\n emit(NODE_CHECK_CHANGE, node.data, checked)\n }\n\n // expose\n function getCheckedKeys(leafOnly = false): TreeKey[] {\n return getChecked(leafOnly).checkedKeys\n }\n\n function getCheckedNodes(leafOnly = false): TreeNodeData[] {\n return getChecked(leafOnly).checkedNodes\n }\n\n function getHalfCheckedKeys(): TreeKey[] {\n return getHalfChecked().halfCheckedKeys\n }\n\n function getHalfCheckedNodes(): TreeNodeData[] {\n return getHalfChecked().halfCheckedNodes\n }\n\n function getChecked(leafOnly = false): {\n checkedKeys: TreeKey[]\n checkedNodes: TreeNodeData[]\n } {\n const checkedNodes: TreeNodeData[] = []\n const keys: TreeKey[] = []\n if (tree?.value && props.showCheckbox) {\n const { treeNodeMap } = tree.value\n checkedKeys.value.forEach((key) => {\n const node = treeNodeMap.get(key)\n if (node && (!leafOnly || (leafOnly && node.isLeaf))) {\n keys.push(key)\n checkedNodes.push(node.data)\n }\n })\n }\n return {\n checkedKeys: keys,\n checkedNodes,\n }\n }\n\n function getHalfChecked(): {\n halfCheckedKeys: TreeKey[]\n halfCheckedNodes: TreeNodeData[]\n } {\n const halfCheckedNodes: TreeNodeData[] = []\n const halfCheckedKeys: TreeKey[] = []\n if (tree?.value && props.showCheckbox) {\n const { treeNodeMap } = tree.value\n indeterminateKeys.value.forEach((key) => {\n const node = treeNodeMap.get(key)\n if (node) {\n halfCheckedKeys.push(key)\n halfCheckedNodes.push(node.data)\n }\n })\n }\n return {\n halfCheckedNodes,\n halfCheckedKeys,\n }\n }\n\n function setCheckedKeys(keys: TreeKey[]) {\n checkedKeys.value.clear()\n indeterminateKeys.value.clear()\n nextTick(() => {\n _setCheckedKeys(keys)\n })\n }\n\n function setChecked(key: TreeKey, isChecked: boolean) {\n if (tree?.value && props.showCheckbox) {\n const node = tree.value.treeNodeMap.get(key)\n if (node) {\n toggleCheckbox(node, isChecked, false)\n }\n }\n }\n\n function _setCheckedKeys(keys: TreeKey[]) {\n if (tree?.value) {\n const { treeNodeMap } = tree.value\n if (props.showCheckbox && treeNodeMap && keys?.length > 0) {\n for (const key of keys) {\n const node = treeNodeMap.get(key)\n if (node && !isChecked(node)) {\n toggleCheckbox(node, true, false, false)\n }\n }\n updateCheckedKeys()\n }\n }\n }\n\n return {\n updateCheckedKeys,\n toggleCheckbox,\n isChecked,\n isIndeterminate,\n // expose\n getCheckedKeys,\n getCheckedNodes,\n getHalfCheckedKeys,\n getHalfCheckedNodes,\n setChecked,\n setCheckedKeys,\n }\n}\n"],"names":["isChecked","node","children","checkedKeys"],"mappings":"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"}