UNPKG

tdesign-vue-next

Version:
1 lines 13.9 kB
{"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};\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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"}