Skip to content

Commit 949c543

Browse files
committed
move onHeaderClick to FlexTable props and pass it the clicked column's dataKey
1 parent 39ce22c commit 949c543

File tree

3 files changed

+22
-19
lines changed

3 files changed

+22
-19
lines changed

source/FlexTable/FlexColumn.js

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,6 @@ export default class Column extends Component {
6868
dataKey: PropTypes.any.isRequired,
6969
/** If sort is enabled for the table at large, disable it for this column */
7070
disableSort: PropTypes.bool,
71-
/**
72-
* Optional callback when this column's header is clicked.
73-
* (): void
74-
*/
75-
onHeaderClick: PropTypes.func,
7671
/** Flex grow style; defaults to 0 */
7772
flexGrow: PropTypes.number,
7873
/** Flex shrink style; defaults to 1 */

source/FlexTable/FlexTable.js

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,16 @@ export default class FlexTable extends Component {
5151
horizontalPadding: PropTypes.number,
5252
/** Optional renderer to be used in place of table body rows when rowsCount is 0 */
5353
noRowsRenderer: PropTypes.func,
54+
/**
55+
* Optional callback when a column's header is clicked.
56+
* (dataKey: string): void
57+
*/
58+
onHeaderClick: PropTypes.func,
5459
/**
5560
* Callback invoked when a user clicks on a table row.
5661
* (rowIndex: number): void
5762
*/
63+
5864
onRowClick: PropTypes.func,
5965
/**
6066
* Callback invoked with information about the slice of rows that were just rendered.
@@ -97,6 +103,7 @@ export default class FlexTable extends Component {
97103
disableHeader: false,
98104
horizontalPadding: 0,
99105
noRowsRenderer: () => null,
106+
onHeaderClick: () => null,
100107
onRowClick: () => null,
101108
onRowsRendered: () => null,
102109
verticalPadding: 0
@@ -237,9 +244,9 @@ export default class FlexTable extends Component {
237244
}
238245

239246
_createHeader (column, columnIndex) {
240-
const { headerClassName, sort, sortBy, sortDirection } = this.props
247+
const { headerClassName, onHeaderClick, sort, sortBy, sortDirection } = this.props
241248
const { styleSheet } = this.state
242-
const { dataKey, disableSort, label, onHeaderClick } = column.props
249+
const { dataKey, disableSort, label } = column.props
243250
const showSortIndicator = sortBy === dataKey
244251
const sortEnabled = !disableSort && sort
245252

@@ -263,7 +270,7 @@ export default class FlexTable extends Component {
263270
: SortDirection.DESC
264271
const onClick = () => {
265272
sortEnabled && sort(dataKey, newSortDirection)
266-
onHeaderClick()
273+
onHeaderClick(dataKey)
267274
}
268275

269276
return (

source/FlexTable/FlexTable.test.js

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ describe('FlexTable', () => {
4444
headerClassName = undefined,
4545
headerHeight = 20,
4646
height = 100,
47-
onHeaderClick = undefined,
4847
noRowsRenderer = undefined,
48+
onHeaderClick = undefined,
4949
onRowClick = undefined,
5050
onRowsRendered = undefined,
5151
rowClassName = undefined,
@@ -66,6 +66,7 @@ describe('FlexTable', () => {
6666
headerHeight={headerHeight}
6767
height={height}
6868
noRowsRenderer={noRowsRenderer}
69+
onHeaderClick={onHeaderClick}
6970
onRowClick={onRowClick}
7071
onRowsRendered={onRowsRendered}
7172
rowClassName={rowClassName}
@@ -85,8 +86,6 @@ describe('FlexTable', () => {
8586
cellRenderer={cellRenderer}
8687
cellDataGetter={cellDataGetter}
8788
disableSort={disableSort}
88-
onHeaderClick={onHeaderClick}
89-
9089
/>
9190
<FlexColumn
9291
label='Email'
@@ -329,30 +328,32 @@ describe('FlexTable', () => {
329328
})
330329

331330
describe('onHeaderClick', () => {
332-
it('should call :onHeaderClick when a column header is clicked and sorting is disabled', () => {
333-
let onHeaderClickCalls = 0
331+
it('should call :onHeaderClick with the correct arguments when a column header is clicked and sorting is disabled', () => {
332+
let onHeaderClickCalls = []
334333
const table = renderTable({
335334
disableSort: true,
336-
onHeaderClick: () => onHeaderClickCalls++
335+
onHeaderClick: (dataKey) => onHeaderClickCalls.push({dataKey})
337336
})
338337
const tableDOMNode = findDOMNode(table)
339338
const nameColumn = tableDOMNode.querySelector('.FlexTable__headerColumn:first-of-type')
340339

341340
Simulate.click(nameColumn)
342-
expect(onHeaderClickCalls).toEqual(1)
341+
expect(onHeaderClickCalls.length).toEqual(1)
342+
expect(onHeaderClickCalls[0].dataKey).toEqual('name')
343343
})
344344

345-
it('should call :onHeaderClick when a column header is clicked and sorting is enabled', () => {
346-
let onHeaderClickCalls = 0
345+
it('should call :onHeaderClick with the correct arguments when a column header is clicked and sorting is enabled', () => {
346+
let onHeaderClickCalls = []
347347
const table = renderTable({
348348
disableSort: false,
349-
onHeaderClick: () => onHeaderClickCalls++
349+
onHeaderClick: (dataKey) => onHeaderClickCalls.push({dataKey})
350350
})
351351
const tableDOMNode = findDOMNode(table)
352352
const nameColumn = tableDOMNode.querySelector('.FlexTable__headerColumn:first-of-type')
353353

354354
Simulate.click(nameColumn)
355-
expect(onHeaderClickCalls).toEqual(1)
355+
expect(onHeaderClickCalls.length).toEqual(1)
356+
expect(onHeaderClickCalls[0].dataKey).toEqual('name')
356357
})
357358
})
358359

0 commit comments

Comments
 (0)