diff --git a/packages/react-bootstrap-table2/src/body.js b/packages/react-bootstrap-table2/src/body.js
index 8c83eaa..3179737 100644
--- a/packages/react-bootstrap-table2/src/body.js
+++ b/packages/react-bootstrap-table2/src/body.js
@@ -5,11 +5,11 @@ import React from 'react';
import PropTypes from 'prop-types';
import _ from './utils';
-import Row from './row';
-import RowAggregator from './row-aggregator';
-import RowSection from './row-section';
+import Row from './row/simple-row';
+import RowAggregator from './row/aggregate-row';
+import RowSection from './row/row-section';
import Const from './const';
-import bindSelection from './row-selection/row-binder';
+import withRowSelection from './row-selection/row-consumer';
import bindExpansion from './row-expand/row-binder';
class Body extends React.Component {
@@ -55,7 +55,7 @@ class Body extends React.Component {
}
if (selectRowEnabled) {
- RowComponent = bindSelection(expandRowEnabled ? RowComponent : RowAggregator);
+ RowComponent = withRowSelection(expandRowEnabled ? RowComponent : RowAggregator);
}
if (cellEdit.createContext) {
diff --git a/packages/react-bootstrap-table2/src/header.js b/packages/react-bootstrap-table2/src/header.js
index 06a38a3..c39ac89 100644
--- a/packages/react-bootstrap-table2/src/header.js
+++ b/packages/react-bootstrap-table2/src/header.js
@@ -5,7 +5,7 @@ import PropTypes from 'prop-types';
import HeaderCell from './header-cell';
import SelectionHeaderCell from './row-selection/selection-header-cell';
import ExpandHeaderCell from './row-expand/expand-header-cell';
-import bindSelection from './row-selection/selection-header-cell-binder';
+import withHeaderSelection from './row-selection/selection-header-cell-consumer';
import bindExpansion from './row-expand/expand-header-cell-binder';
const Header = (props) => {
@@ -30,7 +30,7 @@ const Header = (props) => {
}
if (selectRow) {
- SelectionHeaderCellComp = bindSelection(SelectionHeaderCell);
+ SelectionHeaderCellComp = withHeaderSelection(SelectionHeaderCell);
}
return (
diff --git a/packages/react-bootstrap-table2/src/row-selection/row-consumer.js b/packages/react-bootstrap-table2/src/row-selection/row-consumer.js
new file mode 100644
index 0000000..5a51534
--- /dev/null
+++ b/packages/react-bootstrap-table2/src/row-selection/row-consumer.js
@@ -0,0 +1,63 @@
+/* eslint react/prop-types: 0 */
+import React from 'react';
+import cs from 'classnames';
+import _ from '../utils';
+import SelectionContext from '../contexts/selection-context';
+
+export default (Component) => {
+ const renderWithSelection = (props, selectRow) => {
+ const key = props.value;
+ const selected = selectRow.selected.includes(key);
+ const selectable = !selectRow.nonSelectable || !selectRow.nonSelectable.includes(key);
+
+ let {
+ style,
+ className
+ } = props;
+
+ if (selected) {
+ const selectedStyle = _.isFunction(selectRow.style)
+ ? selectRow.style(props.row, props.rowIndex)
+ : selectRow.style;
+
+ const selectedClasses = _.isFunction(selectRow.classes)
+ ? selectRow.classes(props.row, props.rowIndex)
+ : selectRow.classes;
+
+ style = {
+ ...style,
+ ...selectedStyle
+ };
+ className = cs(className, selectedClasses) || undefined;
+
+ if (selectRow.bgColor) {
+ style = style || {};
+ style.backgroundColor = _.isFunction(selectRow.bgColor)
+ ? selectRow.bgColor(props.row, props.rowIndex)
+ : selectRow.bgColor;
+ }
+ }
+
+ return (
+
+ );
+ };
+
+ function withConsumer(props) {
+ return (
+
+ { selectRow => renderWithSelection(props, selectRow) }
+
+ );
+ }
+
+ withConsumer.displayName = 'WithSelectionRowConsumer';
+ return withConsumer;
+};
diff --git a/packages/react-bootstrap-table2/src/row-selection/selection-header-cell-consumer.js b/packages/react-bootstrap-table2/src/row-selection/selection-header-cell-consumer.js
new file mode 100644
index 0000000..de7d3c3
--- /dev/null
+++ b/packages/react-bootstrap-table2/src/row-selection/selection-header-cell-consumer.js
@@ -0,0 +1,8 @@
+import React from 'react';
+import SelectionContext from '../contexts/selection-context';
+
+export default Component => () => (
+
+ { selectRow => }
+
+);