UNPKG

tdesign-vue-next

Version:
1 lines 14.5 kB
{"version":3,"file":"index.mjs","sources":["../../../../components/transfer/utils/index.ts"],"sourcesContent":["import { ComponentPublicInstance } from 'vue';\nimport { isArray, cloneDeep, isUndefined, isEqual } 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\n// Check if a value exists in an array using deep equality,\n// so that object-type values work correctly with the Transfer component.\nfunction valueInArray(val: TransferValue, arr: Array<TransferValue>): boolean {\n return arr.some((item) => isEqual(item, val));\n}\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 = valueInArray(item.value, filterValues) && !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 = valueInArray(item.value, filterValues);\n return (\n ((include && isInclude) || (!include && !isInclude)) &&\n (!item.disabled || valueInArray(item.value, remainValue))\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 (valueInArray(data.value, filterValues)) {\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 (valueInArray(data.value, filterValues)) {\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) => isEqual(item.value, value))).filter((item) => !!item);\n }\n // 反向过滤\n return data.filter((item) => {\n const isMatch = valueInArray(item.value, filterValues);\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","valueInArray","val","arr","some","item","isEqual","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","isInclude","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","cloneTreeWithFilter","sourceTree","targetTree","forEach","newNode","cloneDeep","_objectSpread","filterTransferData","find","isMatch","getLefCount","nodes","total","child"],"mappings":"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"}