{"version":3,"file":"dictUtil.cjs","sources":["../../../../../../../packages/components/tree/src/utils/dictUtil.ts"],"sourcesContent":["import type { Key } from '@antdv/types';\nimport type { DataNode, FieldNames } from '@antdv/vue-components/vc-tree/src/interface';\n\nenum Record {\n  None,\n  Start,\n  End,\n}\n\nfunction traverseNodesKey(\n  treeData: DataNode[],\n  fieldNames: FieldNames,\n  callback: (key: Key | number | null, node: DataNode) => boolean,\n) {\n  function processNode(dataNode: DataNode) {\n    const key = dataNode[fieldNames.key];\n    const children = dataNode[fieldNames.children];\n    if (callback(key, dataNode) !== false)\n      traverseNodesKey(children || [], fieldNames, callback);\n  }\n\n  treeData.forEach(processNode);\n}\n\n/** 计算选中范围，只考虑expanded情况以优化性能 */\nexport function calcRangeKeys({\n  treeData,\n  expandedKeys,\n  startKey,\n  endKey,\n  fieldNames = {\n    title: 'title',\n    key: 'key',\n    children: 'children',\n  },\n}: {\n  treeData: DataNode[]\n  expandedKeys: Key[]\n  startKey?: Key\n  endKey?: Key\n  fieldNames?: FieldNames\n}): Key[] {\n  const keys: Key[] = [];\n  let record: Record = Record.None;\n\n  if (startKey && startKey === endKey)\n    return [startKey];\n\n  if (!startKey || !endKey)\n    return [];\n\n  function matchKey(key: Key) {\n    return key === startKey || key === endKey;\n  }\n\n  traverseNodesKey(treeData, fieldNames, (key: Key) => {\n    if (record === Record.End)\n      return false;\n\n    if (matchKey(key)) {\n      // Match test\n      keys.push(key);\n\n      if (record === Record.None) {\n        record = Record.Start;\n      } else if (record === Record.Start) {\n        record = Record.End;\n        return false;\n      }\n    } else if (record === Record.Start) {\n      // Append selection\n      keys.push(key);\n    }\n\n    return expandedKeys.includes(key);\n  });\n\n  return keys;\n}\n\nexport function convertDirectoryKeysToNodes(\n  treeData: DataNode[],\n  keys: Key[],\n  fieldNames: FieldNames,\n) {\n  const restKeys: Key[] = [...keys];\n  const nodes: DataNode[] = [];\n  traverseNodesKey(treeData, fieldNames, (key: Key, node: DataNode) => {\n    const index = restKeys.indexOf(key);\n    if (index !== -1) {\n      nodes.push(node);\n      restKeys.splice(index, 1);\n    }\n\n    return !!restKeys.length;\n  });\n  return nodes;\n}\n"],"names":["Record"],"mappings":"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"}