{"version":3,"file":"index.mjs","sources":["../../../../components/transfer/utils/index.ts"],"sourcesContent":["import { ComponentPublicInstance } from 'vue';\nimport { isArray, cloneDeep, isUndefined } from 'lodash-es';\n\nimport { TransferListOptionBase, TransferItemOption, TdTransferProps, TransferValue, DataOption } from '../types';\n\n// TODO:PAOPAO for what?\n// export { emitEvent } from '../../utils/event';\n\nexport const TRANSFER_NAME = 'TTransfer';\n\nexport const SOURCE = 'source';\nexport const TARGET = 'target';\n\ninterface TreeNode {\n  children?: Array<TreeNode>;\n}\n\nfunction findTopNode(vm: ComponentPublicInstance): ComponentPublicInstance {\n  // 找到t-transfer这层父节点\n  if (vm.$options.name === 't-transfer') {\n    return vm;\n  }\n  if (vm.$parent) {\n    return findTopNode(vm.$parent);\n  }\n  return vm;\n}\n\nfunction getTransferListOption<T>(prop: T | Array<T>): TransferListOptionBase<T> {\n  if (isArray(prop)) {\n    return {\n      source: prop[0],\n      target: prop[1],\n    };\n  }\n  return {\n    source: prop,\n    target: prop,\n  };\n}\n\nfunction getDataValues(\n  data: Array<TransferItemOption>,\n  filterValues: Array<TransferValue>,\n  {\n    isTreeMode = false,\n    include = true, // true=保留filterValues，false=删除filterValues中元素\n    remainValue = [] as Array<TransferValue>,\n  } = {},\n): Array<TransferValue> {\n  // 用于处理 tree 组件这种数据结构是树形的\n  if (isTreeMode) {\n    let result: Array<TransferValue> = [];\n    if (data) {\n      for (let i = 0; i < data.length; i++) {\n        const item = data[i];\n        const isInclude = filterValues.includes(item.value) && !item.disabled;\n        if (!include && isInclude) {\n          continue; // 排除模式下子元素一律排除\n        }\n\n        // 只找叶子节点\n        if (item.children && item.children.length > 0) {\n          const childResult = getDataValues(item.children, filterValues, {\n            isTreeMode,\n            include,\n          });\n          result = result.concat(childResult);\n        } else if ((include && isInclude) || (!include && !isInclude)) {\n          result.push(item.value);\n        }\n      }\n    }\n    return result;\n  }\n  return data\n    .filter((item) => {\n      if (!item) return false;\n      const isInclude = filterValues.includes(item.value);\n      return (\n        ((include && isInclude) || (!include && !isInclude)) && (!item.disabled || remainValue.includes(item.value))\n      );\n    })\n    .map((item) => item.value);\n}\n\nfunction getTransferData(\n  data: Array<DataOption>,\n  keys: TdTransferProps['keys'],\n  isTreeMode = false,\n): Array<TransferItemOption> {\n  const list: Array<TransferItemOption> = data.map((transferDataItem, index): TransferItemOption => {\n    const labelKey = keys?.label || 'label';\n    const valueKey = keys?.value || 'value';\n    const disabledKey = keys?.disabled || 'disabled';\n    if (isUndefined(transferDataItem[labelKey])) {\n      throw new Error(`${labelKey} is not in DataOption ${JSON.stringify(transferDataItem)}`);\n    }\n    if (isUndefined(transferDataItem[valueKey])) {\n      throw new Error(`${valueKey} is not in DataOption ${JSON.stringify(transferDataItem)}`);\n    }\n    const result: TransferItemOption = {\n      label: transferDataItem[labelKey] as string,\n      value: transferDataItem[valueKey],\n      key: `key__value_${transferDataItem[valueKey]}_index_${index}`,\n      disabled: transferDataItem[disabledKey] ?? false,\n      data: transferDataItem,\n    };\n    if (isTreeMode && transferDataItem.children) {\n      result.children = getTransferData(transferDataItem.children, keys, true);\n    }\n    return result;\n  });\n  return list;\n}\n\nfunction isAllNodeValid(data: TransferItemOption, filterValues: Array<TransferValue>, needMatch: boolean): boolean {\n  if (filterValues.includes(data.value)) {\n    return needMatch;\n  }\n  return false;\n}\n\nfunction isTreeNodeValid(data: TransferItemOption, filterValues: Array<TransferValue>, needMatch: boolean): boolean {\n  if (!data) return !needMatch;\n\n  if (filterValues.includes(data.value)) {\n    return needMatch;\n  }\n\n  if (data.children?.length) {\n    return data.children.some((item) => isTreeNodeValid(item, filterValues, needMatch));\n  }\n  return !needMatch;\n}\n\n// 复制树并过滤节点\nfunction cloneTreeWithFilter(\n  sourceTree: TransferItemOption[],\n  targetTree: TransferItemOption[],\n  filterValues: Array<TransferValue>,\n  needMatch: boolean,\n) {\n  sourceTree.forEach((item) => {\n    let newNode: TransferItemOption;\n    if (isAllNodeValid(item, filterValues, needMatch)) {\n      // 如果当前节点直接命中，则复制所有子节点\n      newNode = cloneDeep<TransferItemOption>(item);\n      targetTree.push(newNode);\n    } else if (isTreeNodeValid(item, filterValues, needMatch)) {\n      // 如果有合法子节点，就复制这个节点\n      newNode = {\n        ...item,\n      };\n      delete newNode.children;\n      targetTree.push(newNode);\n      if (item.children) {\n        newNode.children = [];\n        cloneTreeWithFilter(item.children, newNode.children, filterValues, needMatch);\n        if (newNode.children.length === 0) {\n          delete newNode.children;\n        }\n      }\n    }\n  });\n}\n\n// 过滤列表，如果是树的话需要保持树的结构\nfunction filterTransferData(\n  data: Array<TransferItemOption>,\n  filterValues: Array<TransferValue>,\n  needMatch = true,\n  isTreeMode = false,\n) {\n  if (!isTreeMode) {\n    if (needMatch) {\n      // 正向过滤。要保持filterValues顺序\n      return filterValues?.map((value) => data.find((item) => item.value === value)).filter((item) => !!item);\n    }\n    // 反向过滤\n    return data.filter((item) => {\n      const isMatch = filterValues.includes(item.value);\n      return !isMatch;\n    });\n  }\n\n  const result: Array<TransferItemOption> = [];\n  cloneTreeWithFilter(data, result, filterValues, needMatch);\n  return result;\n}\n\n// 获取树节点的叶子数量\nfunction getLefCount(nodes: Array<TreeNode>): number {\n  let total = 0;\n  nodes.forEach((child) => {\n    if (child.children && child.children.length > 0) {\n      total += getLefCount(child.children);\n    } else {\n      total += 1;\n    }\n  });\n  return total;\n}\n\nexport {\n  findTopNode,\n  getTransferListOption,\n  getDataValues,\n  getTransferData,\n  cloneTreeWithFilter,\n  filterTransferData,\n  getLefCount,\n  isTreeNodeValid,\n};\n"],"names":["TRANSFER_NAME","SOURCE","TARGET","findTopNode","vm","$options","name","$parent","getTransferListOption","prop","isArray","source","target","getDataValues","data","filterValues","_ref","arguments","length","undefined","_ref$isTreeMode","isTreeMode","_ref$include","include","_ref$remainValue","remainValue","result","i","item","isInclude","includes","value","disabled","children","childResult","concat","push","filter","map","getTransferData","keys","list","transferDataItem","index","_transferDataItem$dis","labelKey","label","valueKey","disabledKey","isUndefined","Error","JSON","stringify","key","isAllNodeValid","needMatch","isTreeNodeValid","_data$children","some","cloneTreeWithFilter","sourceTree","targetTree","forEach","newNode","cloneDeep","_objectSpread","filterTransferData","find","isMatch","getLefCount","nodes","total","child"],"mappings":"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"}