Normalize all JSX callbacks to support functions

This commit is contained in:
Tanner Linsley 2017-02-15 09:54:57 -07:00
parent 403fb7a708
commit 48ea0df09d
2 changed files with 28 additions and 31 deletions

View File

@ -453,12 +453,10 @@ export default React.createClass({
}}
{...rest}
>
{typeof column.header === 'function' ? (
<column.header
data={sortedData}
column={column}
/>
) : column.header}
{_.normalizeComponent(column.header, {
data: sortedData,
column: column
})}
</ThComponent>
)
}
@ -537,12 +535,10 @@ export default React.createClass({
{column.pivotColumns.map((pivotColumn, i) => {
return (
<span key={pivotColumn.id}>
{typeof pivotColumn.header === 'function' ? (
<pivotColumn.header
data={sortedData}
column={pivotColumn}
/>
) : pivotColumn.header}
{_.normalizeComponent(pivotColumn.header, {
data: sortedData,
column: column
})}
{i < column.pivotColumns.length - 1 && (
<ExpanderComponent />
)}
@ -589,12 +585,10 @@ export default React.createClass({
}}
{...rest}
>
{typeof column.header === 'function' ? (
<column.header
data={sortedData}
column={column}
/>
) : column.header}
{_.normalizeComponent(column.header, {
data: sortedData,
column: column
})}
</ThComponent>
)
}
@ -627,7 +621,6 @@ export default React.createClass({
{...trProps.rest}
>
{allVisibleColumns.map((column, i2) => {
const Cell = column.render
const show = typeof column.show === 'function' ? column.show() : column.show
const width = _.getFirstDefined(column.width, column.minWidth)
const maxWidth = _.getFirstDefined(column.width, column.maxWidth)
@ -745,17 +738,10 @@ export default React.createClass({
}}
{...tdProps.rest}
>
{typeof Cell === 'function' ? (
Cell.prototype.isReactComponent ? (
<Cell
{...rowInfo}
value={rowInfo.rowValues[column.id]}
/>
) : Cell({
...rowInfo,
value: rowInfo.rowValues[column.id]
})
) : rowInfo.rowValues[column.id]}
{_.normalizeComponent(column.render, {
...rowInfo,
value: rowInfo.rowValues[column.id]
}, rowInfo.rowValues[column.id])}
</TdComponent>
)
})}

View File

@ -17,7 +17,8 @@ export default {
isArray,
splitProps,
compactObject,
isSortingDesc
isSortingDesc,
normalizeComponent
}
function get (obj, path, def) {
@ -189,3 +190,13 @@ function compactObject (obj) {
function isSortingDesc (d) {
return !!(d.sort === 'desc' || d.desc === true || d.asc === false)
}
function normalizeComponent (Comp, params, fallback = Comp) {
return typeof Comp === 'function' ? (
Comp.prototype.isReactComponent ? (
<Comp
{...params}
/>
) : Comp(params)
) : fallback
}