{"version":3,"file":"utils.mjs","sources":["../../../../../../packages/components/cascader/src/utils.ts"],"sourcesContent":["import { type Ref } from 'vue'\nimport { isArray, isNumber } from '../../../utils/is'\nimport type { CascaderData, CascaderNode } from './type'\n\nexport const transDataToNodes = (\n  data: CascaderData[],\n  {\n    nodesMap,\n    totalLevel\n  }: {\n    nodesMap: Map<string, CascaderNode>\n    totalLevel: Ref<number>\n  }\n) => {\n  let innerLevel = totalLevel.value\n  const traverse = (data: CascaderData[], parent: CascaderNode | null = null, level = 0) => {\n    innerLevel = Math.max(innerLevel, level)\n\n    return data.map((item: CascaderData, index) => {\n      const node: CascaderNode = {\n        key: '',\n        parent,\n        raw: item,\n\n        label: item.label,\n        value: item.value,\n        render: item.render,\n        isLeaf: item.isLeaf,\n        disabled: item.disabled,\n        selectionDisabled: false,\n\n        level,\n        index,\n        pathNodes: [],\n        pathValue: [],\n        pathLabel: [],\n\n        children: []\n      }\n\n      node.pathNodes = (node.parent?.pathNodes || []).concat(node)\n      node.pathLabel = node.pathNodes.map((n) => n.label!)\n      node.pathValue = node.pathNodes.map((n) => n.value)\n      node.key = node.pathValue.join('-')\n\n      nodesMap.set(node.key, node)\n\n      if (item.children && item.children.length !== 0) {\n        node.isLeaf = false\n        node.hasChildren = true\n        node.children = traverse(item.children, node, level + 1)\n\n        if (!item.disabled) {\n          // 计算出当前node下所有leaf数量\n          node.totalLeafNumber = node.children.reduce((pre, n) => {\n            if (isNumber(n.totalLeafNumber)) {\n              return pre + n.totalLeafNumber\n            }\n\n            if (n.disabled || n.selectionDisabled) {\n              return pre\n            }\n\n            return pre + (n.isLeaf ? 1 : 0)\n          }, 0)\n          if (node.totalLeafNumber === 0) {\n            node.selectionDisabled = true\n          }\n        }\n      } else {\n        node.isLeaf = true\n        node.hasChildren = false\n      }\n\n      return node\n    })\n  }\n  const nodes = traverse(data)\n\n  totalLevel.value = innerLevel\n\n  return nodes\n}\n\n// 组合生成nodeKey，方便在nodesMap中查找\nexport const getNodeKey = (keys: string[]) => {\n  return keys.join('-')\n}\n\n// 对入参进行格式化\n// 多选时 二维数组 [[1,2,3],[4,5,6]] => ['1-2-3','4-5-6']\n// 单选 [1,2,3] => ['1-2-3']\nexport const formatModelValue = (\n  value: string[] | string[][],\n  { multiple }: { multiple: boolean }\n): string[] => {\n  if (multiple) {\n    return value.map((m) => (isArray(m) ? getNodeKey(m as string[]) : getNodeKey([m])))\n  }\n  return [getNodeKey(value as string[])]\n}\n\nexport const getCheckedStatus = (node: CascaderNode, nodeKeys?: string[]) => {\n  let checked = false\n  let indeterminate = false\n\n  if (node.isLeaf) {\n    if (nodeKeys?.includes(node.key)) {\n      checked = true\n    }\n  } else {\n    const reg = new RegExp(`^${node.key}(-|$)`)\n\n    const checkedLeafOptionNumber = nodeKeys?.reduce((pre, key) => {\n      if (reg.test(key)) {\n        return pre + 1\n      }\n      return pre\n    }, 0)\n    if (checkedLeafOptionNumber! >= (node.totalLeafNumber ?? 1)) {\n      checked = true\n    } else if (checkedLeafOptionNumber! > 0) {\n      indeterminate = true\n    }\n  }\n\n  return {\n    checked,\n    indeterminate\n  }\n}\n\nexport const getLeafNodes = (node: CascaderNode) => {\n  const leafNodes: CascaderNode[] = []\n  const traverse = (children: CascaderNode[]) => {\n    children.forEach((node) => {\n      if (node.isLeaf) {\n        leafNodes.push(node)\n      }\n      if (node.hasChildren) {\n        traverse(node.children!)\n      }\n    })\n  }\n  traverse([node])\n\n  return leafNodes\n}\n\nexport const getAllLeafNodesByQuery = (\n  nodes: CascaderNode[],\n  callback?: (node: CascaderNode) => boolean | undefined\n) => {\n  const leafNodes: CascaderNode[] = []\n  const stack: CascaderNode[] = [...nodes]\n\n  // 深度优先遍历\n  while (stack.length) {\n    const node = stack.shift()!\n    if (callback && callback(node)) {\n      leafNodes.push(...getLeafNodes(node))\n    } else {\n      const children = node?.children || []\n      for (let i = children.length - 1; i >= 0; i--) {\n        stack.unshift(children[i])\n      }\n    }\n  }\n  return leafNodes\n}\n"],"names":["data","node"],"mappings":"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"}