Skip to content

Commit 9cdcd70

Browse files
authored
Add support for defaultColumnOptions.renderHeaderCell (#3733)
* feat(render-header-cell): Support override defaultRenderHeaderCell from defaultColumnOptions * feat(render-header-cell): fix lint and cleanup * feat(render-header-cell): fix pretter * feat(render-header-cell): fix tests
1 parent 7d291ef commit 9cdcd70

5 files changed

Lines changed: 19 additions & 7 deletions

File tree

src/DataGrid.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,14 @@ interface EditCellState<R> extends Position {
9393

9494
export type DefaultColumnOptions<R, SR> = Pick<
9595
Column<R, SR>,
96-
'renderCell' | 'width' | 'minWidth' | 'maxWidth' | 'resizable' | 'sortable' | 'draggable'
96+
| 'renderCell'
97+
| 'renderHeaderCell'
98+
| 'width'
99+
| 'minWidth'
100+
| 'maxWidth'
101+
| 'resizable'
102+
| 'sortable'
103+
| 'draggable'
97104
>;
98105

99106
export interface DataGridHandle {

src/HeaderCell.tsx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import {
1212
} from './utils';
1313
import type { CalculatedColumn, SortColumn } from './types';
1414
import type { HeaderRowProps } from './HeaderRow';
15-
import defaultRenderHeaderCell from './renderHeaderCell';
1615

1716
const cellSortableClassname = css`
1817
@layer rdg.HeaderCell {
@@ -108,8 +107,6 @@ export default function HeaderCell<R, SR>({
108107
[cellOverClassname]: isOver
109108
});
110109

111-
const renderHeaderCell = column.renderHeaderCell ?? defaultRenderHeaderCell;
112-
113110
function onPointerDown(event: React.PointerEvent<HTMLDivElement>) {
114111
if (event.pointerType === 'mouse' && event.buttons !== 1) {
115112
return;
@@ -295,7 +292,7 @@ export default function HeaderCell<R, SR>({
295292
onKeyDown={sortable ? onKeyDown : undefined}
296293
{...draggableProps}
297294
>
298-
{renderHeaderCell({
295+
{column.renderHeaderCell({
299296
column,
300297
sortDirection,
301298
priority,

src/hooks/useCalculatedColumns.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import type { CalculatedColumn, CalculatedColumnParent, ColumnOrColumnGroup, Omi
55
import { renderValue } from '../cellRenderers';
66
import { SELECT_COLUMN_KEY } from '../Columns';
77
import type { DataGridProps } from '../DataGrid';
8+
import defaultRenderHeaderCell from '../renderHeaderCell';
89

910
type Mutable<T> = {
1011
-readonly [P in keyof T]: T[P] extends ReadonlyArray<infer V> ? Mutable<V>[] : T[P];
@@ -48,6 +49,8 @@ export function useCalculatedColumns<R, SR>({
4849
const defaultMinWidth = defaultColumnOptions?.minWidth ?? DEFAULT_COLUMN_MIN_WIDTH;
4950
const defaultMaxWidth = defaultColumnOptions?.maxWidth ?? undefined;
5051
const defaultCellRenderer = defaultColumnOptions?.renderCell ?? renderValue;
52+
const defaultHeaderCellRenderer =
53+
defaultColumnOptions?.renderHeaderCell ?? defaultRenderHeaderCell;
5154
const defaultSortable = defaultColumnOptions?.sortable ?? false;
5255
const defaultResizable = defaultColumnOptions?.resizable ?? false;
5356
const defaultDraggable = defaultColumnOptions?.draggable ?? false;
@@ -98,7 +101,8 @@ export function useCalculatedColumns<R, SR>({
98101
sortable: rawColumn.sortable ?? defaultSortable,
99102
resizable: rawColumn.resizable ?? defaultResizable,
100103
draggable: rawColumn.draggable ?? defaultDraggable,
101-
renderCell: rawColumn.renderCell ?? defaultCellRenderer
104+
renderCell: rawColumn.renderCell ?? defaultCellRenderer,
105+
renderHeaderCell: rawColumn.renderHeaderCell ?? defaultHeaderCellRenderer
102106
};
103107

104108
columns.push(column);
@@ -153,6 +157,7 @@ export function useCalculatedColumns<R, SR>({
153157
defaultMinWidth,
154158
defaultMaxWidth,
155159
defaultCellRenderer,
160+
defaultHeaderCellRenderer,
156161
defaultResizable,
157162
defaultSortable,
158163
defaultDraggable

src/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ export interface CalculatedColumn<TRow, TSummaryRow = unknown> extends Column<TR
7878
readonly draggable: boolean;
7979
readonly frozen: boolean;
8080
readonly renderCell: (props: RenderCellProps<TRow, TSummaryRow>) => ReactNode;
81+
readonly renderHeaderCell: (props: RenderHeaderCellProps<TRow, TSummaryRow>) => ReactNode;
8182
}
8283

8384
export interface ColumnGroup<R, SR = unknown> {

test/browser/column/renderCell.test.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { page, userEvent } from '@vitest/browser/context';
33

44
import { DataGrid } from '../../../src';
55
import type { Column } from '../../../src';
6+
import defaultRenderHeaderCell from '../../../src/renderHeaderCell';
67
import { getCells, getCellsAtRowIndexOld, setup } from '../utils';
78

89
interface Row {
@@ -107,7 +108,8 @@ describe('Custom cell renderer', () => {
107108
resizable: false,
108109
sortable: false,
109110
draggable: false,
110-
width: 'auto'
111+
width: 'auto',
112+
renderHeaderCell: defaultRenderHeaderCell
111113
},
112114
indexes: [0]
113115
});

0 commit comments

Comments
 (0)