{"version":3,"file":"treeUtil.cjs","sources":["../../../../../../../packages/vue-components/vc-tree/src/utils/treeUtil.ts"],"sourcesContent":["import type { Key, VueNode } from '@antdv/types';\nimport type {\n  BasicDataNode,\n  DataEntity,\n  DataNode,\n  EventDataNode,\n  FieldNames,\n  FlattenNode,\n  GetKey,\n  NodeElement,\n} from '../interface';\nimport type { TreeNodeProps } from '../props';\nimport { camelize, filterEmpty, omit, warning } from '@antdv/utils';\n\nimport { getPosition, isTreeNode } from '../util';\n\nexport function getKey(key: Key, pos: string) {\n  if (key !== null && key !== undefined)\n    return key;\n\n  return pos;\n}\n\nexport function fillFieldNames(fieldNames?: FieldNames): Required<FieldNames> {\n  const { title, _title, key, children } = fieldNames || {};\n  const mergedTitle = title || 'title';\n\n  return {\n    title: mergedTitle,\n    _title: _title || [mergedTitle],\n    key: key || 'key',\n    children: children || 'children',\n  };\n}\n\n/**\n * Warning if TreeNode do not provides key\n */\nexport function warningWithoutKey(treeData: DataNode[], fieldNames: FieldNames) {\n  const keys = new Map<string, boolean>();\n\n  function dig(list: DataNode[], path = '') {\n    (list || []).forEach((treeNode) => {\n      const key = treeNode[fieldNames.key];\n      const children = treeNode[fieldNames.children];\n      warning(\n        key !== null && key !== undefined,\n        `Tree node must have a certain key: [${path}${key}]`,\n      );\n\n      const recordKey = String(key);\n      warning(\n        !keys.has(recordKey) || key === null || key === undefined,\n        `Same 'key' exist in the Tree: ${recordKey}`,\n      );\n      keys.set(recordKey, true);\n\n      dig(children, `${path}${recordKey} > `);\n    });\n  }\n\n  dig(treeData);\n}\n\n/**\n * Convert `children` of Tree into `treeData` structure.\n */\nexport function convertTreeToData(rootNodes: VueNode): DataNode[] {\n  function dig(node: VueNode = []): DataNode[] {\n    const treeNodes = filterEmpty(node as NodeElement[]);\n    return treeNodes.map((treeNode) => {\n      // Filter invalidate node\n      if (!isTreeNode(treeNode)) {\n        warning(!treeNode, 'Tree/TreeNode can only accept TreeNode as children.');\n        return null;\n      }\n      const slots = (treeNode.children as any) || {};\n      const key = treeNode.key as string | number;\n      const props: any = {};\n      for (const [k, v] of Object.entries(treeNode.props))\n        props[camelize(k)] = v;\n\n      const { isLeaf, checkable, selectable, disabled, disableCheckbox } = props;\n      // 默认值为 undefined\n      const newProps = {\n        isLeaf: isLeaf || isLeaf === '' || undefined,\n        checkable: checkable || checkable === '' || undefined,\n        selectable: selectable || selectable === '' || undefined,\n        disabled: disabled || disabled === '' || undefined,\n        disableCheckbox: disableCheckbox || disableCheckbox === '' || undefined,\n      };\n      const slotsProps = { ...props, ...newProps };\n      const {\n        title = slots.title?.(slotsProps),\n        icon = slots.icon?.(slotsProps),\n        switcherIcon = slots.switcherIcon?.(slotsProps),\n        ...rest\n      } = props;\n      const children = slots.default?.();\n      const dataNode: DataNode = {\n        ...rest,\n        title,\n        icon,\n        switcherIcon,\n        key,\n        isLeaf,\n        ...newProps,\n      };\n\n      const parsedChildren = dig(children);\n      if (parsedChildren.length)\n        dataNode.children = parsedChildren;\n\n      return dataNode;\n    });\n  }\n  return dig(rootNodes);\n}\n\n/**\n * Flat nest tree data into flatten list. This is used for virtual list render.\n * @param treeNodeList Origin data node list\n * @param expandedKeys\n * need expanded keys, provides `true` means all expanded (used in `rc-tree-select`).\n */\nexport function flattenTreeData(\n  treeNodeList: DataNode[],\n  expandedKeys: Key[] | true,\n  fieldNames: FieldNames,\n): FlattenNode[] {\n  const {\n    _title: fieldTitles,\n    key: fieldKey,\n    children: fieldChildren,\n  } = fillFieldNames(fieldNames);\n\n  const expandedKeySet = new Set(expandedKeys === true ? [] : expandedKeys);\n  const flattenList: FlattenNode[] = [];\n\n  function dig(list: DataNode[], parent: FlattenNode = null): FlattenNode[] {\n    return list.map((treeNode, index) => {\n      const pos: string = getPosition(parent ? parent.pos : '0', index);\n      const mergedKey = getKey(treeNode[fieldKey], pos);\n\n      // Pick matched title in field title list\n      let mergedTitle: any;\n      for (let i = 0; i < fieldTitles.length; i += 1) {\n        const fieldTitle = fieldTitles[i];\n        if (treeNode[fieldTitle] !== undefined) {\n          mergedTitle = treeNode[fieldTitle];\n          break;\n        }\n      }\n      // Add FlattenDataNode into list\n      const flattenNode: FlattenNode = {\n        ...omit(treeNode, [...fieldTitles, fieldKey, fieldChildren] as any),\n        title: mergedTitle,\n        key: mergedKey,\n        parent,\n        pos,\n        children: null,\n        data: treeNode,\n        isStart: [...(parent ? parent.isStart : []), index === 0],\n        isEnd: [...(parent ? parent.isEnd : []), index === list.length - 1],\n      };\n\n      flattenList.push(flattenNode);\n\n      // Loop treeNode children\n      if (expandedKeys === true || expandedKeySet.has(mergedKey))\n        flattenNode.children = dig(treeNode[fieldChildren] || [], flattenNode);\n      else\n        flattenNode.children = [];\n\n      return flattenNode;\n    });\n  }\n\n  dig(treeNodeList);\n\n  return flattenList;\n}\n\ntype ExternalGetKey = GetKey<DataNode> | string;\n\ninterface TraverseDataNodesConfig {\n  childrenPropName?: string;\n  externalGetKey?: ExternalGetKey;\n  fieldNames?: FieldNames;\n}\n\n/**\n * Traverse all the data by `treeData`.\n * Please not use it out of the `rc-tree` since we may refactor this code.\n */\nexport function traverseDataNodes(\n  dataNodes: DataNode[],\n  callback: (data: {\n    node: DataNode;\n    index: number;\n    pos: string;\n    key: Key;\n    parentPos: string | number;\n    level: number;\n    nodes: DataNode[];\n  }) => void,\n  // To avoid too many params, let use config instead of origin param\n  config?: TraverseDataNodesConfig | string,\n) {\n  let mergedConfig: TraverseDataNodesConfig = {};\n  if (typeof config === 'object')\n    mergedConfig = config;\n  else\n    mergedConfig = { externalGetKey: config };\n\n  mergedConfig = mergedConfig || {};\n\n  // Init config\n  const { childrenPropName, externalGetKey, fieldNames } = mergedConfig;\n\n  const { key: fieldKey, children: fieldChildren } = fillFieldNames(fieldNames);\n\n  const mergeChildrenPropName = childrenPropName || fieldChildren;\n\n  // Get keys\n  let syntheticGetKey: (node: DataNode, pos?: string) => Key;\n  if (externalGetKey) {\n    if (typeof externalGetKey === 'string')\n      syntheticGetKey = (node: DataNode) => (node as any)[externalGetKey as string];\n    else if (typeof externalGetKey === 'function')\n      syntheticGetKey = (node: DataNode) => (externalGetKey as GetKey<DataNode>)(node);\n  } else {\n    syntheticGetKey = (node, pos) => getKey(node[fieldKey], pos);\n  }\n\n  // Process\n  function processNode(\n    node: DataNode,\n    index?: number,\n    parent?: { node: DataNode; pos: string; level: number },\n    pathNodes?: DataNode[],\n  ) {\n    const children = node ? node[mergeChildrenPropName] : dataNodes;\n    const pos = node ? getPosition(parent.pos, index) : '0';\n    const connectNodes = node ? [...pathNodes, node] : [];\n\n    // Process node if is not root\n    if (node) {\n      const key: Key = syntheticGetKey(node, pos);\n      const data = {\n        node,\n        index,\n        pos,\n        key,\n        parentPos: parent.node ? parent.pos : null,\n        level: parent.level + 1,\n        nodes: connectNodes,\n      };\n\n      callback(data);\n    }\n\n    // Process children node\n    if (children) {\n      children.forEach((subNode, subIndex) => {\n        processNode(\n          subNode,\n          subIndex,\n          {\n            node,\n            pos,\n            level: parent ? parent.level + 1 : -1,\n          },\n          connectNodes,\n        );\n      });\n    }\n  }\n\n  processNode(null);\n}\n\ninterface Wrapper {\n  posEntities: Record<string, DataEntity>;\n  keyEntities: Record<Key, DataEntity>;\n}\n\n/**\n * Convert `treeData` into entity records.\n */\nexport function convertDataToEntities(\n  dataNodes: DataNode[],\n  {\n    initWrapper,\n    processEntity,\n    onProcessFinished,\n    externalGetKey,\n    childrenPropName,\n    fieldNames,\n  }: {\n    initWrapper?: (wrapper: Wrapper) => Wrapper;\n    processEntity?: (entity: DataEntity, wrapper: Wrapper) => void;\n    onProcessFinished?: (wrapper: Wrapper) => void;\n    externalGetKey?: ExternalGetKey;\n    childrenPropName?: string;\n    fieldNames?: FieldNames;\n  } = {},\n  /** @deprecated Use `config.externalGetKey` instead */\n  legacyExternalGetKey?: ExternalGetKey,\n) {\n  // Init config\n  const mergedExternalGetKey = externalGetKey || legacyExternalGetKey;\n\n  const posEntities = {};\n  const keyEntities = {};\n  let wrapper = {\n    posEntities,\n    keyEntities,\n  };\n\n  if (initWrapper)\n    wrapper = initWrapper(wrapper) || wrapper;\n\n  traverseDataNodes(\n    dataNodes,\n    (item) => {\n      const { node, index, pos, key, parentPos, level, nodes } = item;\n      const entity: DataEntity = { node, nodes, index, key, pos, level };\n\n      const mergedKey = getKey(key, pos);\n\n      posEntities[pos] = entity;\n      keyEntities[mergedKey] = entity;\n\n      // Fill children\n      entity.parent = posEntities[parentPos];\n      if (entity.parent) {\n        entity.parent.children = entity.parent.children || [];\n        entity.parent.children.push(entity);\n      }\n\n      if (processEntity)\n        processEntity(entity, wrapper);\n    },\n    { externalGetKey: mergedExternalGetKey, childrenPropName, fieldNames },\n  );\n\n  if (onProcessFinished)\n    onProcessFinished(wrapper);\n\n  return wrapper;\n}\n\nexport interface TreeNodeRequiredProps<TreeDataType extends BasicDataNode = DataNode> {\n  expandedKeysSet: Set<Key>;\n  selectedKeysSet: Set<Key>;\n  loadedKeysSet: Set<Key>;\n  loadingKeysSet: Set<Key>;\n  checkedKeysSet: Set<Key>;\n  halfCheckedKeysSet: Set<Key>;\n  dragOverNodeKey: Key;\n  dropPosition: number;\n  keyEntities: Record<Key, DataEntity<TreeDataType>>;\n}\n\n/**\n * Get TreeNode props with Tree props.\n */\nexport function getTreeNodeProps<TreeDataType extends BasicDataNode = DataNode>(\n  key: Key,\n  {\n    expandedKeysSet,\n    selectedKeysSet,\n    loadedKeysSet,\n    loadingKeysSet,\n    checkedKeysSet,\n    halfCheckedKeysSet,\n    dragOverNodeKey,\n    dropPosition,\n    keyEntities,\n  }: TreeNodeRequiredProps<TreeDataType>,\n) {\n  const entity = keyEntities[key];\n\n  const treeNodeProps = {\n    eventKey: key,\n    expanded: expandedKeysSet.has(key),\n    selected: selectedKeysSet.has(key),\n    loaded: loadedKeysSet.has(key),\n    loading: loadingKeysSet.has(key),\n    checked: checkedKeysSet.has(key),\n    halfChecked: halfCheckedKeysSet.has(key),\n    pos: String(entity ? entity.pos : ''),\n    parent: entity.parent,\n    // [Legacy] Drag props\n    // Since the interaction of drag is changed, the semantic of the props are\n    // not accuracy, I think it should be finally removed\n    dragOver: dragOverNodeKey === key && dropPosition === 0,\n    dragOverGapTop: dragOverNodeKey === key && dropPosition === -1,\n    dragOverGapBottom: dragOverNodeKey === key && dropPosition === 1,\n  };\n\n  return treeNodeProps;\n}\n\nexport function convertNodePropsToEventData(\n  props: TreeNodeProps & ReturnType<typeof getTreeNodeProps>,\n): EventDataNode {\n  const {\n    data,\n    expanded,\n    selected,\n    checked,\n    loaded,\n    loading,\n    halfChecked,\n    dragOver,\n    dragOverGapTop,\n    dragOverGapBottom,\n    pos,\n    active,\n    eventKey,\n  } = props;\n  const eventData = {\n    dataRef: data,\n    ...data,\n    expanded,\n    selected,\n    checked,\n    loaded,\n    loading,\n    halfChecked,\n    dragOver,\n    dragOverGapTop,\n    dragOverGapBottom,\n    pos,\n    active,\n    eventKey,\n    key: eventKey,\n  };\n  if (!('props' in eventData)) {\n    Object.defineProperty(eventData, 'props', {\n      get() {\n        warning(\n          false,\n          'Second param return from event is node data instead of TreeNode instance. Please read value directly instead of reading from `props`.',\n        );\n        return props;\n      },\n    });\n  }\n\n  return eventData;\n}\n"],"names":["warning","filterEmpty","isTreeNode","camelize","getPosition","omit"],"mappings":"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"}