Skip to content

Commit 6b9f544

Browse files
committed
Merge pull request #119 from AllenFang/118
RE: [WIP] onRowClick feature
2 parents 41c229c + 0a5f8e2 commit 6b9f544

File tree

6 files changed

+114
-7
lines changed

6 files changed

+114
-7
lines changed

demo/js/demo.bundle.js

+34-4
Large diffs are not rendered by default.

examples/js/selection/demo.js

+10
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import DefaultSelectTable from './default-select-table';
66
import SelectBgColorTable from './select-bgcolor-table';
77
import SelectHookTable from './select-hook-table';
88
import HideSelectionColumnTable from './hide-selection-col-table';
9+
import RowClickTable from './row-click-table';
910

1011
class Demo extends React.Component {
1112
render() {
@@ -74,6 +75,15 @@ class Demo extends React.Component {
7475
</div>
7576
</div>
7677
</div>
78+
<div className="col-md-offset-1 col-md-8">
79+
<div className="panel panel-default">
80+
<div className="panel-heading">Row Click Example</div>
81+
<div className="panel-body">
82+
<h5>Source in /examples/js/selection/row-click-table.js</h5>
83+
<RowClickTable />
84+
</div>
85+
</div>
86+
</div>
7787
</div>
7888
);
7989
}
+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
'use strict';
2+
import React from 'react';
3+
import {BootstrapTable, TableHeaderColumn} from 'react-bootstrap-table';
4+
5+
6+
var products = [];
7+
8+
function addProducts(quantity) {
9+
var startId = products.length;
10+
for (var i = 0; i < quantity; i++) {
11+
var id = startId + i;
12+
products.push({
13+
id: id,
14+
name: "Item name " + id,
15+
price: 2100 + i
16+
});
17+
}
18+
}
19+
20+
addProducts(5);
21+
22+
var options = {
23+
onRowClick: function(row){
24+
alert('You click row id: '+row.id);
25+
}
26+
};
27+
28+
export default class SingleSelectTable extends React.Component{
29+
render(){
30+
return (
31+
<BootstrapTable data={products} options={options}>
32+
<TableHeaderColumn dataField="id" isKey={true}>Product ID</TableHeaderColumn>
33+
<TableHeaderColumn dataField="name">Product Name</TableHeaderColumn>
34+
<TableHeaderColumn dataField="price">Product Price</TableHeaderColumn>
35+
</BootstrapTable>
36+
);
37+
}
38+
};

src/BootstrapTable.js

+11-1
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,9 @@ class BootstrapTable extends React.Component {
184184
selectRow={this.props.selectRow}
185185
cellEdit={this.props.cellEdit}
186186
selectedRowKeys={this.state.selectedRowKeys}
187-
onSelectRow={this.handleSelectRow.bind(this)}/>
187+
onRowClick={this.handleRowClick.bind(this)}
188+
onSelectRow={this.handleSelectRow.bind(this)}
189+
/>
188190
{tableFilter}
189191
{pagination}
190192
</div>
@@ -223,6 +225,12 @@ class BootstrapTable extends React.Component {
223225
});
224226
}
225227

228+
handleRowClick(row) {
229+
if (this.props.options.onRowClick) {
230+
this.props.options.onRowClick(row);
231+
}
232+
}
233+
226234
handleSelectAllRow(e) {
227235
var isSelected = e.currentTarget.checked;
228236
let selectedRowKeys = [];
@@ -525,6 +533,7 @@ BootstrapTable.propTypes = {
525533
afterTableComplete: React.PropTypes.func,
526534
afterDeleteRow: React.PropTypes.func,
527535
afterInsertRow: React.PropTypes.func,
536+
onRowClick: React.PropTypes.func,
528537
page: React.PropTypes.number,
529538
sizePerPageList: React.PropTypes.array,
530539
sizePerPage: React.PropTypes.number,
@@ -571,6 +580,7 @@ BootstrapTable.defaultProps = {
571580
afterTableComplete: undefined,
572581
afterDeleteRow: undefined,
573582
afterInsertRow: undefined,
583+
onRowClick: undefined,
574584
page: 1,
575585
sizePerPageList: Const.SIZE_PER_PAGE_LIST,
576586
sizePerPage: Const.SIZE_PER_PAGE_LIST[0],

src/TableBody.js

+13
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ class TableBody extends React.Component{
104104
<TableRow isSelected={selected} key={r} className={trClassName}
105105
selectRow={isSelectRowDefined?this.props.selectRow:undefined}
106106
enableCellEdit={this.props.cellEdit.mode !== Const.CELL_EDIT_NONE}
107+
onRowClick={this.handleRowClick.bind(this)}
107108
onSelectRow={this.handleSelectRow.bind(this)}>
108109
{selectRowColumn}
109110
{tableColumns}
@@ -158,6 +159,17 @@ class TableBody extends React.Component{
158159
)
159160
}
160161

162+
handleRowClick(rowIndex){
163+
var key, selectedRow;
164+
this.props.data.forEach(function(row, i){
165+
if(i == rowIndex-1){
166+
key = row[this.props.keyField];
167+
selectedRow = row;
168+
}
169+
}, this);
170+
this.props.onRowClick(selectedRow);
171+
}
172+
161173
handleSelectRow(rowIndex, isSelected){
162174
var key, selectedRow;
163175
this.props.data.forEach(function(row, i){
@@ -234,6 +246,7 @@ TableBody.propTypes = {
234246
condensed: React.PropTypes.bool,
235247
keyField: React.PropTypes.string,
236248
selectedRowKeys: React.PropTypes.array,
249+
onRowClick: React.PropTypes.func,
237250
onSelectRow: React.PropTypes.func
238251
};
239252
export default TableBody;

src/TableRow.js

+8-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ class TableRow extends React.Component{
55

66
rowClick(e){
77
if(e.target.tagName !== "INPUT")
8-
this.props.onSelectRow(e.currentTarget.rowIndex, !this.props.isSelected);
8+
if (this.props.selectRow &&
9+
this.props.selectRow.clickToSelect) this.props.onSelectRow(e.currentTarget.rowIndex, !this.props.isSelected);
10+
if (this.props.onRowClick) this.props.onRowClick(e.currentTarget.rowIndex);
911
}
1012

1113
render(){
@@ -18,7 +20,7 @@ class TableRow extends React.Component{
1820
};
1921

2022
if(this.props.selectRow && !this.props.enableCellEdit &&
21-
(this.props.selectRow.clickToSelect || this.props.selectRow.clickToSelectAndEditCell)){
23+
(this.props.selectRow.clickToSelect || this.props.selectRow.clickToSelectAndEditCell) || this.props.onRowClick){
2224
return(
2325
<tr {...trCss} onClick={this.rowClick.bind(this)}>{this.props.children}</tr>
2426
)
@@ -32,6 +34,10 @@ class TableRow extends React.Component{
3234
TableRow.propTypes = {
3335
isSelected: React.PropTypes.bool,
3436
enableCellEdit: React.PropTypes.bool,
37+
onRowClick: React.PropTypes.func,
3538
onSelectRow: React.PropTypes.func
3639
};
40+
TableRow.defaultProps = {
41+
onRowClick: undefined
42+
}
3743
export default TableRow;

0 commit comments

Comments
 (0)