Skip to content

Commit f5faef1

Browse files
committed
fix #502
1 parent 7093d58 commit f5faef1

File tree

3 files changed

+21
-23
lines changed

3 files changed

+21
-23
lines changed

src/BootstrapTable.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -907,7 +907,8 @@ BootstrapTable.propTypes = {
907907
clickToSelect: PropTypes.bool,
908908
hideSelectColumn: PropTypes.bool,
909909
clickToSelectAndEditCell: PropTypes.bool,
910-
showOnlySelected: PropTypes.bool
910+
showOnlySelected: PropTypes.bool,
911+
unselectable: PropTypes.array
911912
}),
912913
cellEdit: PropTypes.shape({
913914
mode: PropTypes.string,
@@ -992,7 +993,8 @@ BootstrapTable.defaultProps = {
992993
clickToSelect: false,
993994
hideSelectColumn: false,
994995
clickToSelectAndEditCell: false,
995-
showOnlySelected: false
996+
showOnlySelected: false,
997+
unselectable: []
996998
},
997999
cellEdit: {
9981000
mode: Const.CELL_EDIT_NONE,

src/TableBody.js

+12-18
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,10 @@ class TableBody extends Component {
2727
'table-condensed': this.props.condensed
2828
}, this.props.tableBodyClass);
2929

30+
const unselectable = this.props.selectRow.unselectable || [];
3031
const isSelectRowDefined = this._isSelectRowDefined();
3132
const tableHeader = this.renderTableHeader(isSelectRowDefined);
33+
const inputType = this.props.selectRow.mode === Const.ROW_SELECT_SINGLE ? 'radio' : 'checkbox';
3234

3335
const tableRows = this.props.data.map(function(data, r) {
3436
const tableColumns = this.props.columns.map(function(column, i) {
@@ -96,10 +98,10 @@ class TableBody extends Component {
9698
);
9799
}
98100
}, this);
99-
101+
const disable = unselectable.indexOf(data[this.props.keyField]) !== -1;
100102
const selected = this.props.selectedRowKeys.indexOf(data[this.props.keyField]) !== -1;
101103
const selectRowColumn = isSelectRowDefined && !this.props.selectRow.hideSelectColumn ?
102-
this.renderSelectRowColumn(selected) : null;
104+
this.renderSelectRowColumn(selected, inputType, disable) : null;
103105
// add by bluespring for className customize
104106
let trClassName = this.props.trClassName;
105107
if (isFun(this.props.trClassName)) {
@@ -112,7 +114,8 @@ class TableBody extends Component {
112114
onRowClick={ this.handleRowClick }
113115
onRowMouseOver={ this.handleRowMouseOver }
114116
onRowMouseOut={ this.handleRowMouseOut }
115-
onSelectRow={ this.handleSelectRow }>
117+
onSelectRow={ this.handleSelectRow }
118+
unselectableRow={ disable }>
116119
{ selectRowColumn }
117120
{ tableColumns }
118121
</TableRow>
@@ -250,22 +253,13 @@ class TableBody extends Component {
250253
}
251254
}
252255

253-
renderSelectRowColumn(selected) {
254-
if (this.props.selectRow.mode === Const.ROW_SELECT_SINGLE) {
255-
return (
256-
<TableColumn dataAlign='center'>
257-
<input type='radio' checked={ selected }
258-
onChange={ this.handleSelectRowColumChange }/>
259-
</TableColumn>
260-
);
261-
} else {
262-
return (
263-
<TableColumn dataAlign='center'>
264-
<input type='checkbox' checked={ selected }
256+
renderSelectRowColumn(selected, inputType, disabled) {
257+
return (
258+
<TableColumn dataAlign='center'>
259+
<input type={ inputType } checked={ selected } disabled={ disabled }
265260
onChange={ this.handleSelectRowColumChange }/>
266-
</TableColumn>
267-
);
268-
}
261+
</TableColumn>
262+
);
269263
}
270264

271265
_isSelectRowDefined() {

src/TableRow.js

+5-3
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@ class TableRow extends Component {
1414
e.target.tagName !== 'TEXTAREA') {
1515
const rowIndex = e.currentTarget.rowIndex + 1;
1616
if (this.props.selectRow) {
17-
if (this.props.selectRow.clickToSelect) {
17+
if (this.props.selectRow.clickToSelect && !this.props.unselectableRow) {
1818
this.props.onSelectRow(rowIndex, !this.props.isSelected, e);
19-
} else if (this.props.selectRow.clickToSelectAndEditCell) {
19+
} else if (this.props.selectRow.clickToSelectAndEditCell
20+
&& !this.props.unselectableRow) {
2021
this.clickNum++;
2122
/** if clickToSelectAndEditCell is enabled,
2223
* there should be a delay to prevent a selection changed when
@@ -79,7 +80,8 @@ TableRow.propTypes = {
7980
onRowClick: PropTypes.func,
8081
onSelectRow: PropTypes.func,
8182
onRowMouseOut: PropTypes.func,
82-
onRowMouseOver: PropTypes.func
83+
onRowMouseOver: PropTypes.func,
84+
unselectableRow: PropTypes.bool
8385
};
8486
TableRow.defaultProps = {
8587
onRowClick: undefined

0 commit comments

Comments
 (0)