Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | import React from "react"; import { TableAddon, TableColumn } from "../TableProps"; /** * `mergeable` 插件用于合并单元格。 */ export interface MergeableOptions<Record = any> { headColSpan?: ( columnIndex: number, context: { column: TableColumn<Record> } ) => number; colSpan?: ( columnIndex: number, recordIndex: number, context: { column: TableColumn<Record>; record: Record; rowKey: string; } ) => number; rowSpan?: ( columnIndex: number, recordIndex: number, context: { column: TableColumn<Record>; record: Record; rowKey: string; } ) => number; } export function mergeable({ headColSpan = () => undefined, colSpan: bodyColSpan = () => undefined, rowSpan: bodyRowSpan = () => undefined, }: MergeableOptions): TableAddon { return { onInjectColumn: previous => ( record, rowKey, recordIndex, column, columnIndex ) => { const { props: prevProps, ...result } = previous( record, rowKey, recordIndex, column, columnIndex ); let colSpan; let rowSpan; if (recordIndex === -1) { const col = headColSpan(columnIndex, { column }); colSpan = typeof col === "number" ? col : undefined; } else { const col = bodyColSpan(columnIndex, recordIndex, { record, rowKey, column, }); const row = bodyRowSpan(columnIndex, recordIndex, { record, rowKey, column, }); colSpan = typeof col === "number" ? col : undefined; rowSpan = typeof row === "number" ? row : undefined; } const props = { ...prevProps, colSpan, rowSpan, }; return { ...result, props }; }, }; } |