Skip to content

Commit 342bcf6

Browse files
authored
fix: support function component with hooks (#80)
* fix: support function component with hooks * update type
1 parent 6430054 commit 342bcf6

File tree

6 files changed

+14
-17
lines changed

6 files changed

+14
-17
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
## NEXT VERSION
44

5+
- fix: custom renderers should support function component with hooks
6+
57
## v1.7.1 (2019-08-22)
68

79
- fix: `scrollToRow` doesn't work regression introduced in #73

src/BaseTable.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -985,25 +985,25 @@ BaseTable.propTypes = {
985985
/**
986986
* Custom renderer on top of the table component
987987
*/
988-
overlayRenderer: PropTypes.oneOfType([PropTypes.func, PropTypes.element]),
988+
overlayRenderer: PropTypes.oneOfType([PropTypes.elementType, PropTypes.element]),
989989
/**
990990
* Custom renderer when the length of data is 0
991991
*/
992-
emptyRenderer: PropTypes.oneOfType([PropTypes.func, PropTypes.element]),
992+
emptyRenderer: PropTypes.oneOfType([PropTypes.elementType, PropTypes.element]),
993993
/**
994994
* Custom footer renderer, available only if `footerHeight` is larger then 0
995995
*/
996-
footerRenderer: PropTypes.oneOfType([PropTypes.func, PropTypes.element]),
996+
footerRenderer: PropTypes.oneOfType([PropTypes.elementType, PropTypes.element]),
997997
/**
998998
* Custom header renderer
999999
* The renderer receives props `{ cells, columns, headerIndex }`
10001000
*/
1001-
headerRenderer: PropTypes.oneOfType([PropTypes.func, PropTypes.element]),
1001+
headerRenderer: PropTypes.oneOfType([PropTypes.elementType, PropTypes.element]),
10021002
/**
10031003
* Custom row renderer
10041004
* The renderer receives props `{ isScrolling, cells, columns, rowData, rowIndex, depth }`
10051005
*/
1006-
rowRenderer: PropTypes.oneOfType([PropTypes.func, PropTypes.element]),
1006+
rowRenderer: PropTypes.oneOfType([PropTypes.elementType, PropTypes.element]),
10071007
/**
10081008
* Class name for the table header, could be a callback to return the class name
10091009
* The callback is of the shape of `({ columns, headerIndex }) => string`

src/Column.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,12 @@ Column.propTypes = {
9191
* Custom column cell renderer
9292
* The renderer receives props `{ cellData, columns, column, columnIndex, rowData, rowIndex, container, isScrolling }`
9393
*/
94-
cellRenderer: PropTypes.oneOfType([PropTypes.func, PropTypes.element]),
94+
cellRenderer: PropTypes.oneOfType([PropTypes.elementType, PropTypes.element]),
9595
/**
9696
* Custom column header renderer
9797
* The renderer receives props `{ columns, column, columnIndex, headerIndex, container }`
9898
*/
99-
headerRenderer: PropTypes.oneOfType([PropTypes.func, PropTypes.element]),
99+
headerRenderer: PropTypes.oneOfType([PropTypes.elementType, PropTypes.element]),
100100
};
101101

102102
Column.Alignment = Alignment;

src/TableHeaderRow.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ TableHeaderRow.propTypes = {
5050
columns: PropTypes.arrayOf(PropTypes.object).isRequired,
5151
headerIndex: PropTypes.number,
5252
cellRenderer: PropTypes.func,
53-
headerRenderer: PropTypes.oneOfType([PropTypes.func, PropTypes.element]),
53+
headerRenderer: PropTypes.oneOfType([PropTypes.elementType, PropTypes.element]),
5454
expandColumnKey: PropTypes.string,
5555
expandIcon: PropTypes.func,
5656
tagName: PropTypes.elementType,

src/TableRow.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ TableRow.propTypes = {
125125
expandColumnKey: PropTypes.string,
126126
depth: PropTypes.number,
127127
rowEventHandlers: PropTypes.object,
128-
rowRenderer: PropTypes.oneOfType([PropTypes.func, PropTypes.element]),
128+
rowRenderer: PropTypes.oneOfType([PropTypes.elementType, PropTypes.element]),
129129
cellRenderer: PropTypes.func,
130130
expandIconRenderer: PropTypes.func,
131131
onRowHover: PropTypes.func,

src/utils.js

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,12 @@
11
import React from 'react';
22

33
export function renderElement(renderer, props) {
4+
if (!renderer) return null;
5+
46
if (React.isValidElement(renderer)) {
57
return React.cloneElement(renderer, props);
6-
} else if (typeof renderer === 'function') {
7-
if (renderer.prototype && renderer.prototype.isReactComponent) {
8-
return React.createElement(renderer, props);
9-
} else if (renderer.defaultProps) {
10-
return renderer({ ...renderer.defaultProps, ...props });
11-
}
12-
return renderer(props);
138
} else {
14-
return null;
9+
return React.createElement(renderer, props);
1510
}
1611
}
1712

0 commit comments

Comments
 (0)