diff --git a/src/components/Headers/Headers.test.tsx b/src/components/Headers/Headers.test.tsx new file mode 100644 index 00000000..3d3b1d1e --- /dev/null +++ b/src/components/Headers/Headers.test.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import { render } from 'react-testing-library'; +import { ColumnProps, HeaderRendererArgs } from '../../types'; +import Headers from './Headers'; + +describe('', () => { + test('rendering column header renderers properly', () => { + function renderHeader(props: HeaderRendererArgs) { + return
{props.label}
; + } + + const columns: ColumnProps[] = [ + { + headerRenderer: renderHeader, + dataKey: 'fooKey', + label: 'fooLabel', + width: 42, + }, + { + headerRenderer: renderHeader, + dataKey: 'barKey', + label: 'barLabel', + width: 42, + }, + ]; + const headerHeight = 42; + + const { container } = render( + , + ); + + expect(container.textContent).toMatch('fooLabel'); + expect(container.textContent).toMatch('barLabel'); + }); +}); diff --git a/src/components/Headers/Headers.tsx b/src/components/Headers/Headers.tsx index 0cc39d50..cf016bfa 100644 --- a/src/components/Headers/Headers.tsx +++ b/src/components/Headers/Headers.tsx @@ -2,18 +2,28 @@ import React from 'react'; import { ColumnProps } from '../../types'; export type Props = { - headerHeight: number; columns: ColumnProps[]; + headerHeight: number; }; -export default function({ headerHeight, columns }: Props) { +export default function Headers({ headerHeight, columns }: Props) { return (
- {columns.map((column, index) => ( -
- {(column.headerRenderer && column.headerRenderer(column)) ||
} -
- ))} + {columns.map(renderColumn)} +
+ ); +} + +function renderColumn(column: ColumnProps, index: number) { + const Header = column.headerRenderer || FallbackHeader; + + return ( +
+
); } + +function FallbackHeader() { + return
; +} diff --git a/src/types.ts b/src/types.ts index 2791463d..2c6c9461 100644 --- a/src/types.ts +++ b/src/types.ts @@ -77,9 +77,9 @@ export type CellRenderer = export type ColumnProps = { cellRenderer?: CellRenderer; - headerRenderer?: (arg: HeaderRendererArgs) => React.ReactNode; - width: number; columnData?: any; dataKey: string; + headerRenderer?: (arg: HeaderRendererArgs) => React.ReactElement; label: any; + width: number; };