Skip to content

Commit e1fdcbd

Browse files
author
路振凯
committed
feat: add test case
1 parent 0447cc5 commit e1fdcbd

File tree

2 files changed

+136
-1
lines changed

2 files changed

+136
-1
lines changed

src/Body/BodyRow.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ export function getCellProps<RecordType>(
9191
);
9292
}
9393

94-
const additionalCellProps = cachedCellProps || column.onCell?.(record, index) || {};
94+
const additionalCellProps = { ...(cachedCellProps || column.onCell?.(record, index) || {}) };
9595

9696
// Expandable row has offset
9797
if (expandedRowOffset) {

tests/FixedColumn.spec.tsx

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,4 +336,139 @@ describe('Table.FixedColumn', () => {
336336
expect(container.querySelector('.rc-table')).toHaveClass('rc-table-fix-start-shadow-show');
337337
expect(container.querySelector('.rc-table')).toHaveClass('rc-table-fix-end-shadow-show');
338338
});
339+
340+
describe('colSpan=0 with fixed columns regression test', () => {
341+
interface TestDataType {
342+
key: string;
343+
col0: string;
344+
col1: string;
345+
col2: string;
346+
}
347+
348+
const testColumns: ColumnsType<TestDataType> = [
349+
{
350+
title: 'Column 0',
351+
dataIndex: 'col0',
352+
key: 'col0',
353+
width: 100,
354+
fixed: 'left',
355+
onCell: (record, index) => {
356+
if (index === 1) {
357+
return { colSpan: 0 };
358+
}
359+
return {};
360+
},
361+
},
362+
{
363+
title: 'Column 1',
364+
dataIndex: 'col1',
365+
key: 'col1',
366+
width: 120,
367+
fixed: 'left',
368+
onCell: (record, index) => {
369+
if (index === 1) {
370+
return { colSpan: 2 };
371+
}
372+
return {};
373+
},
374+
},
375+
{
376+
title: 'Column 2',
377+
dataIndex: 'col2',
378+
key: 'col2',
379+
width: 150,
380+
},
381+
];
382+
383+
const testData: TestDataType[] = [
384+
{ key: '0', col0: 'Row0-Col0', col1: 'Row0-Col1', col2: 'Row0-Col2' },
385+
{ key: '1', col0: 'Row1-Col0', col1: 'Row1-Merged', col2: 'Row1-Col2' },
386+
{ key: '2', col0: 'Row2-Col0', col1: 'Row2-Col1', col2: 'Row2-Col2' },
387+
];
388+
389+
it('should calculate correct sticky offsets when colSpan=0 exists', async () => {
390+
const { container } = render(
391+
<Table columns={testColumns} data={testData} scroll={{ x: 500 }} />,
392+
);
393+
394+
await triggerResize(container.querySelector<HTMLElement>('.rc-table'));
395+
396+
act(() => {
397+
const coll = container.querySelector('.rc-table-resize-collection');
398+
if (coll) {
399+
triggerResize(coll as HTMLElement);
400+
}
401+
});
402+
403+
await act(async () => {
404+
vi.runAllTimers();
405+
await Promise.resolve();
406+
});
407+
408+
const rows = container.querySelectorAll('.rc-table-tbody .rc-table-row');
409+
expect(rows).toHaveLength(3);
410+
411+
const secondRow = rows[1];
412+
const cells = secondRow.querySelectorAll('.rc-table-cell');
413+
expect(cells).toHaveLength(2);
414+
415+
const mergedCell = cells[0];
416+
expect(mergedCell).toHaveAttribute('colSpan', '2');
417+
418+
expect(mergedCell.textContent).toContain('Row1-Merged');
419+
const hasFixedLeftClass = mergedCell.classList.contains('rc-table-cell-fix-left');
420+
421+
if (hasFixedLeftClass) {
422+
const cellStyle = window.getComputedStyle(mergedCell);
423+
expect(cellStyle.left).toBe('0px');
424+
}
425+
});
426+
427+
it('should work correctly with expandable rows', async () => {
428+
const expandableTestData = testData.map(item => ({
429+
...item,
430+
children:
431+
item.key === '1'
432+
? [{ key: '1-0', col0: 'Child-Col0', col1: 'Child-Col1', col2: 'Child-Col2' }]
433+
: undefined,
434+
}));
435+
436+
const { container } = render(
437+
<Table
438+
columns={testColumns}
439+
data={expandableTestData}
440+
scroll={{ x: 500 }}
441+
expandable={{
442+
expandedRowKeys: ['1'],
443+
expandRowByClick: true,
444+
}}
445+
/>,
446+
);
447+
448+
await triggerResize(container.querySelector<HTMLElement>('.rc-table'));
449+
450+
act(() => {
451+
const coll = container.querySelector('.rc-table-resize-collection');
452+
if (coll) {
453+
triggerResize(coll as HTMLElement);
454+
}
455+
});
456+
457+
await act(async () => {
458+
vi.runAllTimers();
459+
await Promise.resolve();
460+
});
461+
462+
const allRows = container.querySelectorAll('.rc-table-tbody .rc-table-row');
463+
expect(allRows.length).toBeGreaterThan(3); // 包含展开的子行
464+
465+
const parentRow = allRows[1];
466+
const parentCells = parentRow.querySelectorAll('.rc-table-cell');
467+
expect(parentCells).toHaveLength(2);
468+
469+
const childRow = allRows[2];
470+
const childCells = childRow.querySelectorAll('.rc-table-cell');
471+
expect(childCells).toHaveLength(3);
472+
});
473+
});
339474
});

0 commit comments

Comments
 (0)