tdesign-vue-next
Version:
TDesign Component for vue-next
1 lines • 7.95 kB
Source Map (JSON)
{"version":3,"file":"useRowspanAndColspan.mjs","sources":["../../../../components/table/hooks/useRowspanAndColspan.ts"],"sourcesContent":["import { ref, watch, Ref } from 'vue';\nimport { get } from 'lodash-es';\nimport log from '@tdesign/common-js/log/index';\nimport { BaseTableCellParams, BaseTableCol, TableRowData, TableRowspanAndColspanFunc } from '../type';\n\nexport interface SkipSpansValue {\n colspan?: number;\n rowspan?: number;\n skipped?: boolean;\n}\n\nexport function getCellKey(row: TableRowData, rowKey: string, colKey: string, colIndex: number, rowIndex?: number) {\n const rowValue = get(row, rowKey);\n if (rowValue === undefined) {\n // 无 rowKey 时(如 footData 场景)回退使用 rowIndex,保证每行每列 cellKey 唯一,避免不同行同列共享 key\n if (rowIndex === undefined) {\n log.error('Table', 'rowKey is wrong, can not get unique identifier of row.');\n }\n return [`__row_${rowIndex}__`, colKey || colIndex].join('_');\n }\n return [rowValue, colKey || colIndex].join('_');\n}\n\n// getCellKey的反向操作 用于获取rowKey\nexport function getRowKeyFromCell(cellKey: string) {\n return cellKey.split('_')?.[0];\n}\n\nexport default function useRowspanAndColspan(\n data: Ref<TableRowData[]>,\n columns: Ref<BaseTableCol<TableRowData>[]>,\n rowKey: Ref<string>,\n rowspanAndColspan: Ref<TableRowspanAndColspanFunc<TableRowData>>,\n) {\n const skipSpansMap = ref(new Map<string, SkipSpansValue>());\n\n // 计算单元格是否跳过渲染\n const onTrRowspanOrColspan = (params: BaseTableCellParams<TableRowData>, skipSpansValue: SkipSpansValue) => {\n const { rowIndex, colIndex } = params;\n if (!skipSpansValue.rowspan && !skipSpansValue.colspan) return;\n const maxRowIndex = rowIndex + (skipSpansValue.rowspan || 1);\n const maxColIndex = colIndex + (skipSpansValue.colspan || 1);\n for (let i = rowIndex; i < maxRowIndex; i++) {\n for (let j = colIndex; j < maxColIndex; j++) {\n if (i !== rowIndex || j !== colIndex) {\n if (!data.value[i] || !columns.value[j]) return;\n const cellKey = getCellKey(data.value[i], rowKey.value, columns.value[j].colKey, j, i);\n const state = skipSpansMap.value.get(cellKey) || {};\n state.skipped = true;\n skipSpansMap.value.set(cellKey, state);\n }\n }\n }\n };\n\n // 计算单元格是否需要设置 rowspan 和 colspan\n const updateSkipSpansMap = (\n data: TableRowData[],\n columns: BaseTableCol<TableRowData>[],\n rowspanAndColspan: TableRowspanAndColspanFunc<TableRowData>,\n ) => {\n skipSpansMap.value?.clear();\n if (!data || !rowspanAndColspan) return;\n for (let i = 0, len = data.length; i < len; i++) {\n const row = data[i];\n for (let j = 0, colLen = columns.length; j < colLen; j++) {\n const col = columns[j];\n const params = {\n row,\n col,\n rowIndex: i,\n colIndex: j,\n };\n const cellKey = getCellKey(row, rowKey.value, col.colKey, j, i);\n const state = skipSpansMap.value.get(cellKey) || {};\n const o = rowspanAndColspan(params) || {};\n if (o.rowspan || o.colspan || state.rowspan || state.colspan) {\n o.rowspan && (state.rowspan = o.rowspan);\n o.colspan && (state.colspan = o.colspan);\n skipSpansMap.value.set(cellKey, state);\n }\n onTrRowspanOrColspan?.(params, state);\n }\n }\n };\n\n watch(\n () => [data.value, columns.value, rowspanAndColspan],\n () => {\n updateSkipSpansMap(data.value, columns.value, rowspanAndColspan?.value);\n },\n { immediate: true },\n );\n\n return { skipSpansMap };\n}\n"],"names":["getCellKey","row","rowKey","colKey","colIndex","rowIndex","rowValue","get","log","error","concat","join","getRowKeyFromCell","cellKey","_cellKey$split","split","useRowspanAndColspan","data","columns","rowspanAndColspan","skipSpansMap","ref","Map","onTrRowspanOrColspan","params","skipSpansValue","rowspan","colspan","maxRowIndex","maxColIndex","i","j","value","state","skipped","set","updateSkipSpansMap","_skipSpansMap$value","clear","len","length","colLen","col","o","watch","immediate"],"mappings":"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"}