xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 5.39 kB
Source Map (JSON)
{"version":3,"file":"useRowspanAndColspan.mjs","sources":["../../../src/table/hooks/useRowspanAndColspan.ts"],"sourcesContent":["import { ref, watch, Ref } from 'vue';\nimport get from 'lodash/get';\nimport log from '../../_common/js/log';\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\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":["get","log","row","col","rowIndex","colIndex","watch","updateSkipSpansMap","immediate","skipSpansMap"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAWO,SAAA,UAAA,CAAA,GAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA;AACC,EAAA,IAAA,QAAA,GAAAA,KAAA,CAAA,GAAA,EAAA,MAAA,CAAA,CAAA;AACN,EAAA,IAAA,QAAA,KAAA,KAAA,CAAA,EAAA;AACMC,IAAAA,GAAAA,CAAAA,KAAAA,CAAAA,OAAAA,EAAAA,wDAAAA,CAAAA,CAAAA;AACN,GAAA;;AAEF,CAAA;AAEA,SAAA,oBAAA,CAAA,IAAA,EAAA,OAAA,EAAA,MAAA,EAAA,iBAAA,EAAA;;;AAUU,IAAA,IAAA,QAAA,GAAA,MAAA,CAAA,QAAA;;;;;;;AAME,QAAA,IAAA,CAAA,KAAA,QAAA,IAAA,CAAA,KAAA,QAAA,EAAA;AACF,UAAA,IAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA,CAAA,IAAA,CAAA,OAAA,CAAA,KAAA,CAAA,CAAA,CAAA,EAAA,OAAA;;AAEA,UAAA,IAAA,KAAA,GAAA,YAAA,CAAA,KAAA,CAAA,GAAA,CAAA,OAAA,CAAA,IAAA,EAAA,CAAA;;;AAGF,SAAA;AACF,OAAA;AACF,KAAA;;;AAQG,IAAA,IAAA,mBAAA,CAAA;AACH,IAAA,CAAA,mBAAA,GAAA,YAAA,CAAA,KAAA,MAAA,IAAA,IAAA,mBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,mBAAA,CAAA,KAAA,EAAA,CAAA;AACI,IAAA,IAAA,CAAA,KAAA,IAAA,CAAA,kBAAA,EAAA,OAAA;AACJ,IAAA,KAAA,IAAA,CAAA,GAAA,CAAA,EAAA,GAAA,GAAA,KAAA,CAAA,MAAA,EAAA,CAAA,GAAA,GAAA,EAAA,CAAA,EAAA,EAAA;AACE,MAAA,IAAA,GAAA,GAAA,KAAA,CAAA,CAAA,CAAA,CAAA;AACA,MAAA,KAAA,IAAA,CAAA,GAAA,CAAA,EAAA,MAAA,GAAA,QAAA,CAAA,MAAA,EAAA,CAAA,GAAA,MAAA,EAAA,CAAA,EAAA,EAAA;AACE,QAAA,IAAA,GAAA,GAAA,QAAA,CAAA,CAAA,CAAA,CAAA;AACA,QAAA,IAAA,MAAA,GAAA;AACEC,UAAAA,GAAAA,EAAAA,GAAAA;AACAC,UAAAA,GAAAA,EAAAA,GAAAA;AACAC,UAAAA,QAAAA,EAAAA,CAAAA;AACAC,UAAAA,QAAAA,EAAAA,CAAAA;;AAEF,QAAA,IAAA,OAAA,GAAA,UAAA,CAAA,GAAA,EAAA,MAAA,CAAA,KAAA,EAAA,GAAA,CAAA,MAAA,EAAA,CAAA,CAAA,CAAA;AACA,QAAA,IAAA,KAAA,GAAA,YAAA,CAAA,KAAA,CAAA,GAAA,CAAA,OAAA,CAAA,IAAA,EAAA,CAAA;;AAEA,QAAA,IAAA,CAAA,CAAA,OAAA,IAAA,CAAA,CAAA,OAAA,IAAA,KAAA,CAAA,OAAA,IAAA,KAAA,CAAA,OAAA,EAAA;;;;AAIA,SAAA;;AAEF,OAAA;AACF,KAAA;;AAGFC,EAAAA,KAAAA,CAAAA,YAAAA;;AACqD,GAAA,EAAA,YAAA;AAEjDC,IAAAA,kBAAAA,CAAAA,IAAAA,CAAAA,KAAAA,EAAAA,OAAAA,CAAAA,KAAAA,EAAAA,iBAAAA,KAAAA,IAAAA,IAAAA,iBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,iBAAAA,CAAAA,KAAAA,CAAAA,CAAAA;AACF,GAAA,EAAA;AACEC,IAAAA,SAAAA,EAAAA,IAAAA;AAAgB,GAAA,CAAA,CAAA;;AAGXC,IAAAA,YAAAA,EAAAA,YAAAA;;AACX;;;;"}