diff --git a/docs/columns.md b/docs/columns.md
index 723367b..8770eb6 100644
--- a/docs/columns.md
+++ b/docs/columns.md
@@ -456,7 +456,7 @@ If the events is not listed above, the callback function will only pass the `eve
{
// omit...
headerEvents: {
- onClick: e => { ... }
+ onClick: (e, column, columnIndex) => { ... }
}
}
```
diff --git a/packages/react-bootstrap-table2-example/examples/header-columns/column-event-table.js b/packages/react-bootstrap-table2-example/examples/header-columns/column-event-table.js
index d4394a7..3312b39 100644
--- a/packages/react-bootstrap-table2-example/examples/header-columns/column-event-table.js
+++ b/packages/react-bootstrap-table2-example/examples/header-columns/column-event-table.js
@@ -12,7 +12,7 @@ const columns = [{
dataField: 'id',
text: 'Product ID',
headerEvents: {
- onClick: () => alert('Click on Product ID header column')
+ onClick: (e, column, columnIndex) => alert(`Click on Product ID header column, columnIndex: ${columnIndex}`)
}
}, {
dataField: 'name',
@@ -29,7 +29,7 @@ const columns = [{
dataField: 'id',
text: 'Product ID',
headerEvents: {
- onClick: () => alert('Click on Product ID header column')
+ onClick: (e, column, columnIndex) => alert('Click on Product ID header column')
}
}, {
dataField: 'name',
diff --git a/packages/react-bootstrap-table2/src/cell-event-delegater.js b/packages/react-bootstrap-table2/src/cell-event-delegater.js
index 14c2fa0..689f2c1 100644
--- a/packages/react-bootstrap-table2/src/cell-event-delegater.js
+++ b/packages/react-bootstrap-table2/src/cell-event-delegater.js
@@ -17,8 +17,8 @@ export default ExtendBase =>
createDefaultEventHandler(cb) {
return (e) => {
- const { column, columnIndex } = this.props;
- cb(e, column, columnIndex);
+ const { column, columnIndex, index } = this.props;
+ cb(e, column, typeof columnIndex !== 'undefined' ? columnIndex : index);
};
}
diff --git a/packages/react-bootstrap-table2/src/header-cell.js b/packages/react-bootstrap-table2/src/header-cell.js
index f2b5106..22c3fca 100644
--- a/packages/react-bootstrap-table2/src/header-cell.js
+++ b/packages/react-bootstrap-table2/src/header-cell.js
@@ -7,119 +7,124 @@ import Const from './const';
import SortSymbol from './sort/symbol';
import SortCaret from './sort/caret';
import _ from './utils';
+import eventDelegater from './cell-event-delegater';
-const HeaderCell = (props) => {
- const {
- column,
- index,
- onSort,
- sorting,
- sortOrder,
- isLastSorting,
- onFilter,
- currFilters,
- onExternalFilter
- } = props;
+class HeaderCell extends eventDelegater(React.Component) {
+ render() {
+ const {
+ column,
+ index,
+ onSort,
+ sorting,
+ sortOrder,
+ isLastSorting,
+ onFilter,
+ currFilters,
+ onExternalFilter
+ } = this.props;
- const {
- text,
- sort,
- sortCaret,
- filter,
- filterRenderer,
- headerTitle,
- headerAlign,
- headerFormatter,
- headerEvents,
- headerClasses,
- headerStyle,
- headerAttrs,
- headerSortingClasses,
- headerSortingStyle
- } = column;
+ const {
+ text,
+ sort,
+ sortCaret,
+ filter,
+ filterRenderer,
+ headerTitle,
+ headerAlign,
+ headerFormatter,
+ headerEvents,
+ headerClasses,
+ headerStyle,
+ headerAttrs,
+ headerSortingClasses,
+ headerSortingStyle
+ } = column;
- const cellAttrs = {
- ..._.isFunction(headerAttrs) ? headerAttrs(column, index) : headerAttrs,
- ...headerEvents,
- tabIndex: 0
- };
+ const delegateEvents = this.delegate(headerEvents);
- let sortSymbol;
- let filterElm;
- let cellStyle = {};
- let cellClasses = _.isFunction(headerClasses) ? headerClasses(column, index) : headerClasses;
-
- if (headerStyle) {
- cellStyle = _.isFunction(headerStyle) ? headerStyle(column, index) : headerStyle;
- cellStyle = cellStyle ? { ...cellStyle } : cellStyle;
- }
-
- if (headerTitle) {
- cellAttrs.title = _.isFunction(headerTitle) ? headerTitle(column, index) : text;
- }
-
- if (headerAlign) {
- cellStyle.textAlign = _.isFunction(headerAlign) ? headerAlign(column, index) : headerAlign;
- }
-
- if (sort) {
- const customClick = cellAttrs.onClick;
- cellAttrs.onClick = (e) => {
- onSort(column);
- if (_.isFunction(customClick)) customClick(e);
+ const cellAttrs = {
+ ..._.isFunction(headerAttrs) ? headerAttrs(column, index) : headerAttrs,
+ ...delegateEvents,
+ tabIndex: 0
};
- cellAttrs.className = cs(cellAttrs.className, 'sortable');
- if (sorting) {
- sortSymbol = sortCaret ? sortCaret(sortOrder, column) : ;
+ let sortSymbol;
+ let filterElm;
+ let cellStyle = {};
+ let cellClasses = _.isFunction(headerClasses) ? headerClasses(column, index) : headerClasses;
- // append customized classes or style if table was sorting based on the current column.
- cellClasses = cs(
- cellClasses,
- _.isFunction(headerSortingClasses)
- ? headerSortingClasses(column, sortOrder, isLastSorting, index)
- : headerSortingClasses
- );
-
- cellStyle = {
- ...cellStyle,
- ..._.isFunction(headerSortingStyle)
- ? headerSortingStyle(column, sortOrder, isLastSorting, index)
- : headerSortingStyle
- };
- } else {
- sortSymbol = sortCaret ? sortCaret(undefined, column) : ;
+ if (headerStyle) {
+ cellStyle = _.isFunction(headerStyle) ? headerStyle(column, index) : headerStyle;
+ cellStyle = cellStyle ? { ...cellStyle } : cellStyle;
}
+
+ if (headerTitle) {
+ cellAttrs.title = _.isFunction(headerTitle) ? headerTitle(column, index) : text;
+ }
+
+ if (headerAlign) {
+ cellStyle.textAlign = _.isFunction(headerAlign) ? headerAlign(column, index) : headerAlign;
+ }
+
+ if (sort) {
+ const customClick = cellAttrs.onClick;
+ cellAttrs.onClick = (e) => {
+ onSort(column);
+ if (_.isFunction(customClick)) customClick(e);
+ };
+ cellAttrs.className = cs(cellAttrs.className, 'sortable');
+
+ if (sorting) {
+ sortSymbol = sortCaret ? sortCaret(sortOrder, column) : ;
+
+ // append customized classes or style if table was sorting based on the current column.
+ cellClasses = cs(
+ cellClasses,
+ _.isFunction(headerSortingClasses)
+ ? headerSortingClasses(column, sortOrder, isLastSorting, index)
+ : headerSortingClasses
+ );
+
+ cellStyle = {
+ ...cellStyle,
+ ..._.isFunction(headerSortingStyle)
+ ? headerSortingStyle(column, sortOrder, isLastSorting, index)
+ : headerSortingStyle
+ };
+ } else {
+ sortSymbol = sortCaret ? sortCaret(undefined, column) : ;
+ }
+ }
+
+ if (cellClasses) cellAttrs.className = cs(cellAttrs.className, cellClasses);
+ if (!_.isEmptyObject(cellStyle)) cellAttrs.style = cellStyle;
+
+ if (filterRenderer) {
+ const onCustomFilter = onExternalFilter(column, filter.props.type);
+ filterElm = filterRenderer(onCustomFilter, column);
+ } else if (filter) {
+ filterElm = (
+
+ );
+ }
+
+ const children = headerFormatter ?
+ headerFormatter(column, index, { sortElement: sortSymbol, filterElement: filterElm }) :
+ text;
+
+ if (headerFormatter) {
+ return React.createElement('th', cellAttrs, children);
+ }
+
+ return React.createElement('th', cellAttrs, children, sortSymbol, filterElm);
}
-
- if (cellClasses) cellAttrs.className = cs(cellAttrs.className, cellClasses);
- if (!_.isEmptyObject(cellStyle)) cellAttrs.style = cellStyle;
-
- if (filterRenderer) {
- const onCustomFilter = onExternalFilter(column, filter.props.type);
- filterElm = filterRenderer(onCustomFilter, column);
- } else if (filter) {
- filterElm = (
-
- );
- }
-
- const children = headerFormatter ?
- headerFormatter(column, index, { sortElement: sortSymbol, filterElement: filterElm }) :
- text;
-
- if (headerFormatter) {
- return React.createElement('th', cellAttrs, children);
- }
-
- return React.createElement('th', cellAttrs, children, sortSymbol, filterElm);
-};
+}
HeaderCell.propTypes = {
column: PropTypes.shape({