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;
};