UNPKG

tdesign-vue-next

Version:
1 lines 7.46 kB
{"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) {\n const rowValue = get(row, rowKey);\n if (rowValue === undefined) {\n log.error('Table', 'rowKey is wrong, can not get unique identifier of row.');\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);\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);\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","rowValue","get","log","error","join","getRowKeyFromCell","cellKey","_cellKey$split","split","useRowspanAndColspan","data","columns","rowspanAndColspan","skipSpansMap","ref","Map","onTrRowspanOrColspan","params","skipSpansValue","rowIndex","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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"}