Skip to content

Commit 4874169

Browse files
committed
Merge pull request #1 from khinlatt/feautre/multi_column_search
Feature (Multiple column search) - feature/multiple column search
2 parents 936fbdc + 597c69e commit 4874169

File tree

6 files changed

+18077
-19388
lines changed

6 files changed

+18077
-19388
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ You can reference [here](http://allenfang.github.io/react-bootstrap-table/docs.h
125125
| insertRow | Bool | Set true to enable row insertion on table. |
126126
| deleteRow | Bool | Set true to enable row deletion on table. |
127127
| search | Bool | Set true to enable search function on table. |
128+
| multiColumnSearch | Bool | Set true to enable words search on multiple column function on table from a search box. |
128129
| searchPlaceholder | String | The place holder on search text fields |
129130
| keyField | String | Same as ```isKey``` in <TableHeaderColumn> |
130131
| trClassName | String or Function | Assign the row(tr) class, accept string or function, if use function, will pass ```rowData``` and ```rowIndex``` params and should return string presented class. for examples:</br>**function trClassFormat(rowData,rowIndex){**</br>&nbsp;&nbsp;&nbsp;**return rowIndex%2==0?"tr-odd":"tr-even";**</br>**}** |

dist/react-bootstrap-table.min.js

+18,037-19,374
Large diffs are not rendered by default.

lib/BootstrapTable.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Object.defineProperty(exports, '__esModule', {
66

77
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
88

9-
var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
9+
var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
1010

1111
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
1212

@@ -454,7 +454,7 @@ var BootstrapTable = (function (_React$Component) {
454454
}, {
455455
key: 'handleSearch',
456456
value: function handleSearch(searchText) {
457-
this.store.search(searchText);
457+
this.store.search(searchText, this.props.multiColumnSearch);
458458
var result = undefined;
459459
if (this.props.pagination) {
460460
var sizePerPage = this.refs.pagination.getSizePerPage();
@@ -566,7 +566,7 @@ var BootstrapTable = (function (_React$Component) {
566566
BootstrapTable.propTypes = {
567567
keyField: _react2['default'].PropTypes.string,
568568
height: _react2['default'].PropTypes.string,
569-
data: _react2['default'].PropTypes.array,
569+
data: _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.array, _react2['default'].PropTypes.object]),
570570
remote: _react2['default'].PropTypes.bool, // remote data, default is false
571571
striped: _react2['default'].PropTypes.bool,
572572
bordered: _react2['default'].PropTypes.bool,
@@ -637,6 +637,7 @@ BootstrapTable.defaultProps = {
637637
insertRow: false,
638638
deleteRow: false,
639639
search: false,
640+
multiColumnSearch: false,
640641
columnFilter: false,
641642
trClassName: '',
642643
options: {

lib/store/TableDataStore.js

+17-5
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Object.defineProperty(exports, '__esModule', {
66

77
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
88

9-
var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
9+
var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
1010

1111
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
1212

@@ -221,19 +221,31 @@ var TableDataStore = (function () {
221221
}
222222
}, {
223223
key: 'search',
224-
value: function search(searchText) {
224+
value: function search(searchText, multiColumnSearch) {
225225
if (searchText.trim() === "") {
226226
this.filteredData = null;
227227
this.isOnFilter = false;
228228
this.searchText = null;
229229
} else {
230230
this.searchText = searchText;
231+
var searchTextArray = [];
231232
this.filteredData = this.data.filter(function (row) {
232233
var valid = false;
234+
235+
if (multiColumnSearch) {
236+
searchTextArray = searchText.split(' ');
237+
} else {
238+
searchTextArray.push(searchText);
239+
}
240+
233241
for (var key in row) {
234-
if (row[key] && row[key].toString().toLowerCase().indexOf(searchText.toLowerCase()) !== -1) {
235-
valid = true;
236-
break;
242+
if (row[key]) {
243+
searchTextArray.forEach(function (text) {
244+
if (row[key].toString().toLowerCase().indexOf(text.toLowerCase()) !== -1) {
245+
valid = true;
246+
}
247+
});
248+
if (valid) break;
237249
}
238250
}
239251
return valid;

src/BootstrapTable.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ class BootstrapTable extends React.Component {
384384
}
385385

386386
handleSearch(searchText) {
387-
this.store.search(searchText);
387+
this.store.search(searchText, this.props.multiColumnSearch);
388388
let result;
389389
if (this.props.pagination) {
390390
let sizePerPage = this.refs.pagination.getSizePerPage();
@@ -562,6 +562,7 @@ BootstrapTable.defaultProps = {
562562
insertRow: false,
563563
deleteRow: false,
564564
search: false,
565+
multiColumnSearch: false,
565566
columnFilter: false,
566567
trClassName: '',
567568
options: {

src/store/TableDataStore.js

+16-5
Original file line numberDiff line numberDiff line change
@@ -176,20 +176,31 @@ export class TableDataStore {
176176
}
177177
}
178178

179-
search(searchText) {
179+
search(searchText, multiColumnSearch) {
180180
if (searchText.trim() === "") {
181181
this.filteredData = null;
182182
this.isOnFilter = false;
183183
this.searchText = null;
184184
} else {
185185
this.searchText = searchText;
186+
var searchTextArray = [];
186187
this.filteredData = this.data.filter(function (row) {
187188
let valid = false;
189+
190+
if (multiColumnSearch) {
191+
searchTextArray = searchText.split(' ');
192+
} else {
193+
searchTextArray.push(searchText);
194+
}
195+
188196
for (var key in row) {
189-
if (row[key] &&
190-
row[key].toString().toLowerCase().indexOf(searchText.toLowerCase()) !== -1) {
191-
valid = true;
192-
break;
197+
if (row[key]) {
198+
searchTextArray.forEach(function(text) {
199+
if (row[key].toString().toLowerCase().indexOf(text.toLowerCase()) !== -1) {
200+
valid = true;
201+
}
202+
});
203+
if (valid) break;
193204
}
194205
}
195206
return valid;

0 commit comments

Comments
 (0)