UNPKG

xdesign-vue-next

Version:

XDesign Component for vue-next

1 lines 16.7 kB
{"version":3,"file":"useTreeSelect.mjs","sources":["../../../src/table/hooks/useTreeSelect.tsx"],"sourcesContent":["import { computed, toRefs, ref, Ref, watch } from 'vue';\nimport get from 'lodash/get';\nimport intersection from 'lodash/intersection';\nimport { TdEnhancedTableProps, TdPrimaryTableProps, TableRowData, PrimaryTableCol } from '../type';\nimport { KeysType, TableTreeDataMap, TreeDataMapType } from '../../_common/js/table/tree-store';\nimport useDefaultValue from '../../hooks/useDefaultValue';\n\nexport interface GetChildrenDataReturnValue {\n allChildren: Array<any>;\n allChildrenKeys: Array<string | number>;\n leafNodeKeys: Array<string | number>;\n}\n\n// 保存子节点信息,避免重复计算\nexport const childrenMap = new Map();\n\nexport function getChildrenData(\n treeDataMap: TreeDataMapType,\n data: TableRowData,\n keys: { childrenKey: string; rowKey: string },\n r?: GetChildrenDataReturnValue,\n): GetChildrenDataReturnValue {\n if (childrenMap.get(data)) return childrenMap.get(data);\n const result = r || { allChildren: [], allChildrenKeys: [], leafNodeKeys: [] };\n const children = get(data, keys.childrenKey);\n if (!children || !children.length) return result;\n const selectableChildren = children.filter(\n (item: TableRowData) => !treeDataMap.get(get(item, keys.rowKey))?.disabled,\n );\n result.allChildren = [...new Set(result.allChildren.concat(selectableChildren))];\n for (let i = 0, len = children.length; i < len; i++) {\n const tItem = children[i];\n const c = get(tItem, keys.childrenKey);\n if (c?.length) {\n const nextLevelData = getChildrenData(treeDataMap, tItem, keys, result);\n result.allChildren = [...new Set(result.allChildren.concat(nextLevelData.allChildren))];\n }\n }\n // 避免使用 forEach,减少上下文消耗\n for (let i = 0, len = result.allChildren.length; i < len; i++) {\n const item = result.allChildren[i];\n const children = get(item, keys.childrenKey);\n const rowValue = get(item, keys.rowKey);\n result.allChildrenKeys.push(rowValue);\n if (!children || !children.length) {\n result.leafNodeKeys.push(rowValue);\n }\n }\n result.allChildrenKeys = [...new Set(result.allChildrenKeys)];\n result.leafNodeKeys = [...new Set(result.leafNodeKeys)];\n return result;\n}\n\nexport interface RemoveParams {\n // 当前选中的数据\n selectedRowKeys: Array<string | number>;\n // 需要移除的数据\n removeKeys: Array<string | number>;\n}\n\nexport interface RemainData {\n data: Array<any>;\n keys: Array<string | number>;\n}\n\nexport function removeChildrenKeys(p: RemoveParams, r?: RemainData): RemainData {\n const { selectedRowKeys, removeKeys } = p;\n const result = r || { data: [], keys: [] };\n for (let i = 0, len = selectedRowKeys.length; i < len; i++) {\n const key = selectedRowKeys[i];\n if (!removeKeys.includes(key)) {\n result.keys.push(key);\n }\n }\n return result;\n}\n\nexport interface GetKeyDataParams {\n treeDataMap: TreeDataMapType;\n data: Array<any>;\n column: PrimaryTableCol;\n keys: KeysType;\n}\n\nexport interface GetRowDataParams {\n treeDataMap: TreeDataMapType;\n selectedRowKeys: Array<string | number>;\n}\n\nexport function getRowDataByKeys(p: GetRowDataParams) {\n const { treeDataMap, selectedRowKeys } = p;\n const result = [];\n for (let i = 0, len = selectedRowKeys.length; i < len; i++) {\n const key = selectedRowKeys[i];\n result.push(treeDataMap.get(key));\n }\n return result;\n}\n\ntype SelectChangeParams = Parameters<TdPrimaryTableProps['onSelectChange']>;\n\nexport default function useTreeSelect(props: TdEnhancedTableProps, treeDataMap: Ref<TableTreeDataMap>) {\n const { selectedRowKeys, tree, data, indeterminateSelectedRowKeys } = toRefs(props);\n // 半选状态的节点:子节点选中至少一个,且没有全部选中\n const tIndeterminateSelectedRowKeys = ref<(string | number)[]>([]);\n\n const [tSelectedRowKeys, setTSelectedRowKeys] = useDefaultValue(\n selectedRowKeys,\n props.defaultSelectedRowKeys || [],\n props.onSelectChange,\n 'selectedRowKeys',\n );\n const rowDataKeys = computed(() => ({\n rowKey: props.rowKey || 'id',\n childrenKey: props.tree?.childrenKey || 'children',\n }));\n\n watch([tree, treeDataMap, data, tSelectedRowKeys], ([tree, treeDataMap]) => {\n if (!tree || !treeDataMap.size || tree.checkStrictly) return;\n updateIndeterminateState();\n });\n\n function updateIndeterminateState() {\n if (!tree.value || tree.value.checkStrictly) return;\n if (!tSelectedRowKeys.value.length) {\n tIndeterminateSelectedRowKeys.value = [];\n return;\n }\n const keys: Array<string | number> = [];\n const parentMap: { [key: string | number]: any[] } = {};\n for (let i = 0, len = tSelectedRowKeys.value.length; i < len; i++) {\n const rowValue = tSelectedRowKeys.value[i];\n const state = treeDataMap.value.get(rowValue);\n if (!state) continue;\n const children = get(state.row, rowDataKeys.value.childrenKey);\n // 根据选中的叶子结点计算父节点半选状态\n if (!children || !children.length) {\n let parentTmp = state.parent;\n while (parentTmp) {\n if (!parentMap[parentTmp.id]) {\n parentMap[parentTmp.id] = [];\n }\n parentMap[parentTmp.id].push(state.row);\n const checkedLength = parentMap[parentTmp.id].length;\n const { allChildrenKeys } = getChildrenData(treeDataMap.value, parentTmp.row, rowDataKeys.value);\n const parentTmpIndex = keys.indexOf(parentTmp.id);\n const selectedIndex = tSelectedRowKeys.value.indexOf(parentTmp.id);\n if (checkedLength > 0 && checkedLength < allChildrenKeys.length && selectedIndex === -1) {\n parentTmpIndex === -1 && keys.push(parentTmp.id);\n } else {\n parentTmpIndex !== -1 && keys.splice(parentTmpIndex, 1);\n }\n parentTmp = parentTmp.parent;\n }\n }\n }\n tIndeterminateSelectedRowKeys.value = keys;\n }\n\n function updateParentCheckedState(\n selectedKeys: (string | number)[],\n currentRowKey: string | number,\n type: 'check' | 'uncheck',\n ) {\n if (!tree.value || tree.value.checkStrictly) return;\n const keys = [...selectedKeys];\n const state = treeDataMap.value.get(currentRowKey);\n let parentTmp = state.parent;\n while (parentTmp) {\n const { leafNodeKeys } = getChildrenData(treeDataMap.value, parentTmp.row, rowDataKeys.value);\n const checkedChildrenKeys = intersection(leafNodeKeys, selectedKeys);\n const selectedIndex = keys.indexOf(parentTmp.id);\n if (type === 'uncheck') {\n selectedIndex !== -1 && keys.splice(selectedIndex, 1);\n } else if (checkedChildrenKeys.length === leafNodeKeys.length) {\n selectedIndex === -1 && keys.push(parentTmp.id);\n }\n parentTmp = parentTmp.parent;\n }\n return keys;\n }\n\n function onInnerSelectChange(rowKeys: SelectChangeParams[0], extraData: SelectChangeParams[1]) {\n if (!tree.value || tree.value.checkStrictly) {\n setTSelectedRowKeys(rowKeys, extraData);\n return;\n }\n if (extraData.currentRowKey === 'CHECK_ALL_BOX') {\n handleSelectAll(extraData);\n } else {\n handleSelect(rowKeys, extraData);\n }\n }\n\n function handleSelectAll(extraData: SelectChangeParams[1]) {\n const newRowKeys: Array<string | number> = [];\n const newRowData: TableRowData[] = [];\n if (extraData.type === 'check') {\n const arr = [...treeDataMap.value.values()];\n for (let i = 0, len = arr.length; i < len; i++) {\n const item = arr[i];\n if (!item.disabled) {\n newRowData.push(item.row);\n newRowKeys.push(get(item.row, rowDataKeys.value.rowKey));\n }\n }\n }\n const newExtraData = {\n ...extraData,\n selectedRowData: newRowData || [],\n };\n setTSelectedRowKeys(newRowKeys, newExtraData);\n }\n\n function handleSelect(rowKeys: SelectChangeParams[0], extraData: SelectChangeParams[1]) {\n let newRowKeys = [...rowKeys];\n if (props.tree?.checkStrictly === false) {\n if (extraData?.type === 'check') {\n const result = getChildrenData(treeDataMap.value, extraData.currentRowData, rowDataKeys.value);\n const { allChildrenKeys } = result;\n childrenMap.set(extraData.currentRowData, result);\n newRowKeys = [...new Set(newRowKeys.concat(allChildrenKeys))];\n } else if (extraData?.type === 'uncheck') {\n const children = getChildrenData(treeDataMap.value, extraData.currentRowData, rowDataKeys.value);\n const result = removeChildrenKeys({\n selectedRowKeys: rowKeys,\n removeKeys: children.allChildrenKeys,\n });\n newRowKeys = result.keys;\n }\n }\n newRowKeys = updateParentCheckedState(newRowKeys, extraData.currentRowKey, extraData.type);\n const newRowData = getRowDataByKeys({ treeDataMap: treeDataMap.value, selectedRowKeys: newRowKeys });\n const newExtraData = {\n ...extraData,\n selectedRowData: newRowData,\n };\n setTSelectedRowKeys(newRowKeys, newExtraData);\n }\n\n return {\n // 如果存在受控属性 indeterminateSelectedRowKeys 则优先使用;否则使用内部状态:tIndeterminateSelectedRowKeys\n tIndeterminateSelectedRowKeys: indeterminateSelectedRowKeys.value\n ? indeterminateSelectedRowKeys\n : tIndeterminateSelectedRowKeys,\n onInnerSelectChange,\n };\n}\n"],"names":["allChildren","allChildrenKeys","leafNodeKeys","result","data","keys","tSelectedRowKeys","setTSelectedRowKeys","rowKey","childrenKey","watch","tree","treeDataMap","updateIndeterminateState","get","parentMap","intersection","handleSelect","newRowData","newRowKeys","selectedRowKeys","selectedRowData","tIndeterminateSelectedRowKeys","onInnerSelectChange"],"mappings":"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"}