{"version":3,"file":"conductUtil.cjs","sources":["../../../../../../../packages/vue-components/vc-tree/src/utils/conductUtil.ts"],"sourcesContent":["import type { Key } from '@antdv/types';\nimport type { BasicDataNode, DataEntity, DataNode, GetCheckDisabled } from '../interface';\nimport { note } from '@antdv/utils';\n\ninterface ConductReturnType {\n  checkedKeys: Key[];\n  halfCheckedKeys: Key[];\n}\n\nfunction removeFromCheckedKeys(halfCheckedKeys: Set<Key>, checkedKeys: Set<Key>) {\n  const filteredKeys = new Set<Key>();\n  halfCheckedKeys.forEach((key) => {\n    if (!checkedKeys.has(key))\n      filteredKeys.add(key);\n  });\n  return filteredKeys;\n}\n\nexport function isCheckDisabled<TreeDataType>(node: TreeDataType) {\n  const { disabled, disableCheckbox, checkable } = (node || {}) as DataNode;\n  return !!(disabled || disableCheckbox) || checkable === false;\n}\n\n// Fill miss keys\nfunction fillConductCheck<TreeDataType extends BasicDataNode = DataNode>(\n  keys: Set<Key>,\n  levelEntities: Map<number, Set<DataEntity<TreeDataType>>>,\n  maxLevel: number,\n  syntheticGetCheckDisabled: GetCheckDisabled<TreeDataType>,\n): ConductReturnType {\n  const checkedKeys = new Set<Key>(keys);\n  const halfCheckedKeys = new Set<Key>();\n\n  // Add checked keys top to bottom\n  for (let level = 0; level <= maxLevel; level += 1) {\n    const entities = levelEntities.get(level) || new Set();\n    entities.forEach((entity) => {\n      const { key, node, children = [] } = entity;\n\n      if (checkedKeys.has(key) && !syntheticGetCheckDisabled(node)) {\n        children\n          .filter(childEntity => !syntheticGetCheckDisabled(childEntity.node))\n          .forEach((childEntity) => {\n            checkedKeys.add(childEntity.key);\n          });\n      }\n    });\n  }\n\n  // Add checked keys from bottom to top\n  const visitedKeys = new Set<Key>();\n  for (let level = maxLevel; level >= 0; level -= 1) {\n    const entities = levelEntities.get(level) || new Set();\n    entities.forEach((entity) => {\n      const { parent, node } = entity;\n\n      // Skip if no need to check\n      if (syntheticGetCheckDisabled(node) || !entity.parent || visitedKeys.has(entity.parent.key))\n        return;\n\n      // Skip if parent is disabled\n      if (syntheticGetCheckDisabled(entity.parent.node)) {\n        visitedKeys.add(parent.key);\n        return;\n      }\n\n      let allChecked = true;\n      let partialChecked = false;\n\n      (parent.children || [])\n        .filter(childEntity => !syntheticGetCheckDisabled(childEntity.node))\n        .forEach(({ key }) => {\n          const checked = checkedKeys.has(key);\n          if (allChecked && !checked)\n            allChecked = false;\n\n          if (!partialChecked && (checked || halfCheckedKeys.has(key)))\n            partialChecked = true;\n        });\n\n      if (allChecked)\n        checkedKeys.add(parent.key);\n\n      if (partialChecked)\n        halfCheckedKeys.add(parent.key);\n\n      visitedKeys.add(parent.key);\n    });\n  }\n\n  return {\n    checkedKeys: Array.from(checkedKeys),\n    halfCheckedKeys: Array.from(removeFromCheckedKeys(halfCheckedKeys, checkedKeys)),\n  };\n}\n\n// Remove useless key\nfunction cleanConductCheck<TreeDataType extends BasicDataNode = DataNode>(\n  keys: Set<Key>,\n  halfKeys: Key[],\n  levelEntities: Map<number, Set<DataEntity<TreeDataType>>>,\n  maxLevel: number,\n  syntheticGetCheckDisabled: GetCheckDisabled<TreeDataType>,\n): ConductReturnType {\n  const checkedKeys = new Set<Key>(keys);\n  let halfCheckedKeys = new Set<Key>(halfKeys);\n\n  // Remove checked keys from top to bottom\n  for (let level = 0; level <= maxLevel; level += 1) {\n    const entities = levelEntities.get(level) || new Set();\n    entities.forEach((entity) => {\n      const { key, node, children = [] } = entity;\n\n      if (!checkedKeys.has(key) && !halfCheckedKeys.has(key) && !syntheticGetCheckDisabled(node)) {\n        children\n          .filter(childEntity => !syntheticGetCheckDisabled(childEntity.node))\n          .forEach((childEntity) => {\n            checkedKeys.delete(childEntity.key);\n          });\n      }\n    });\n  }\n\n  // Remove checked keys form bottom to top\n  halfCheckedKeys = new Set<Key>();\n  const visitedKeys = new Set<Key>();\n  for (let level = maxLevel; level >= 0; level -= 1) {\n    const entities = levelEntities.get(level) || new Set();\n\n    entities.forEach((entity) => {\n      const { parent, node } = entity;\n\n      // Skip if no need to check\n      if (syntheticGetCheckDisabled(node) || !entity.parent || visitedKeys.has(entity.parent.key))\n        return;\n\n      // Skip if parent is disabled\n      if (syntheticGetCheckDisabled(entity.parent.node)) {\n        visitedKeys.add(parent.key);\n        return;\n      }\n\n      let allChecked = true;\n      let partialChecked = false;\n\n      (parent.children || [])\n        .filter(childEntity => !syntheticGetCheckDisabled(childEntity.node))\n        .forEach(({ key }) => {\n          const checked = checkedKeys.has(key);\n          if (allChecked && !checked)\n            allChecked = false;\n\n          if (!partialChecked && (checked || halfCheckedKeys.has(key)))\n            partialChecked = true;\n        });\n\n      if (!allChecked)\n        checkedKeys.delete(parent.key);\n\n      if (partialChecked)\n        halfCheckedKeys.add(parent.key);\n\n      visitedKeys.add(parent.key);\n    });\n  }\n\n  return {\n    checkedKeys: Array.from(checkedKeys),\n    halfCheckedKeys: Array.from(removeFromCheckedKeys(halfCheckedKeys, checkedKeys)),\n  };\n}\n\n/**\n * Conduct with keys.\n * @param keyList current key list\n * @param keyEntities key - dataEntity map\n * @param mode `fill` to fill missing key, `clean` to remove useless key\n */\nexport function conductCheck<TreeDataType extends BasicDataNode = DataNode>(\n  keyList: Key[],\n  checked: true | { checked: false; halfCheckedKeys: Key[] },\n  keyEntities: Record<Key, DataEntity<TreeDataType>>,\n  maxLevel: number,\n  levelEntities: Map<number, Set<DataEntity<TreeDataType>>>,\n  getCheckDisabled?: GetCheckDisabled<TreeDataType>,\n): ConductReturnType {\n  const warningMissKeys: Key[] = [];\n\n  let syntheticGetCheckDisabled: GetCheckDisabled<TreeDataType>;\n  if (getCheckDisabled)\n    syntheticGetCheckDisabled = getCheckDisabled;\n  else\n    syntheticGetCheckDisabled = isCheckDisabled;\n\n  // We only handle exist keys\n  const keys = new Set<Key>(\n    keyList.filter((key) => {\n      const hasEntity = !!keyEntities[key];\n      if (!hasEntity)\n        warningMissKeys.push(key);\n\n      return hasEntity;\n    }),\n  );\n\n  note(\n    !warningMissKeys.length,\n    `Tree missing follow keys: ${warningMissKeys\n      .slice(0, 100)\n      .map(key => `'${key}'`)\n      .join(', ')}`,\n  );\n\n  let result: ConductReturnType;\n  if (checked === true) {\n    result = fillConductCheck<TreeDataType>(\n      keys,\n      levelEntities,\n      maxLevel,\n      syntheticGetCheckDisabled,\n    );\n  } else {\n    result = cleanConductCheck(\n      keys,\n      checked.halfCheckedKeys,\n      levelEntities,\n      maxLevel,\n      syntheticGetCheckDisabled,\n    );\n  }\n\n  return result;\n}\n"],"names":["note"],"mappings":"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"}