Skip to content

Commit 423769c

Browse files
authored
fix #1007 (#1032)
1 parent 6530ff1 commit 423769c

File tree

4 files changed

+19
-44
lines changed

4 files changed

+19
-44
lines changed

packages/react-bootstrap-table2-example/examples/column-filter/custom-filter-logic.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,11 @@ class Table extends React.Component {
5050
`;
5151

5252
export default class Table extends React.Component {
53-
filterByPrice = (filterVal) => {
53+
filterByPrice = (filterVal, data) => {
5454
if (filterVal) {
55-
return products.filter(product => product.price == filterVal);
55+
return data.filter(product => product.price == filterVal);
5656
}
57-
return products;
57+
return data;
5858
}
5959

6060
render() {
@@ -75,7 +75,7 @@ export default class Table extends React.Component {
7575

7676
return (
7777
<div>
78-
<h2>Implement Custom Filter</h2>
78+
<h2>Implement a eq price filter</h2>
7979
<BootstrapTable
8080
keyField="id"
8181
data={ products }

packages/react-bootstrap-table2-filter/src/context.js

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ export default (
4040
componentWillReceiveProps(nextProps) {
4141
// let nextData = nextProps.data;
4242
if (!isRemoteFiltering() && !_.isEqual(nextProps.data, this.data)) {
43-
this.doFilter(nextProps, undefined, this.isEmitDataChange);
43+
this.doFilter(nextProps, this.isEmitDataChange);
4444
} else {
4545
this.data = nextProps.data;
4646
}
@@ -76,12 +76,7 @@ export default (
7676
}
7777
return;
7878
}
79-
80-
let result;
81-
if (filter.props.onFilter) {
82-
result = filter.props.onFilter(filterVal);
83-
}
84-
this.doFilter(this.props, result);
79+
this.doFilter(this.props);
8580
};
8681
}
8782

@@ -95,11 +90,9 @@ export default (
9590
return this.data;
9691
}
9792

98-
doFilter(props, customResult, ignoreEmitDataChange = false) {
99-
let result = customResult;
100-
93+
doFilter(props, ignoreEmitDataChange = false) {
10194
const { dataChangeListener, data, columns } = props;
102-
result = result || filters(data, columns, _)(this.currFilters);
95+
const result = filters(data, columns, _)(this.currFilters);
10396
this.data = result;
10497
if (dataChangeListener && !ignoreEmitDataChange) {
10598
this.isEmitDataChange = true;

packages/react-bootstrap-table2-filter/src/filter.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,13 +237,21 @@ export const filters = (data, columns, _) => (currFilters) => {
237237
const filterObj = currFilters[dataField];
238238
filterFn = factory(filterObj.filterType);
239239
let filterValue;
240+
let customFilter;
240241
for (let i = 0; i < columns.length; i += 1) {
241242
if (columns[i].dataField === dataField) {
242243
filterValue = columns[i].filterValue;
244+
if (columns[i].filter) {
245+
customFilter = columns[i].filter.props.onFilter;
246+
}
243247
break;
244248
}
245249
}
246-
result = filterFn(result, dataField, filterObj, filterValue);
250+
if (customFilter) {
251+
result = customFilter(filterObj.filterVal, result);
252+
} else {
253+
result = filterFn(result, dataField, filterObj, filterValue);
254+
}
247255
});
248256
return result;
249257
};

packages/react-bootstrap-table2-filter/test/context.test.js

Lines changed: 2 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -228,33 +228,7 @@ describe('FilterContext', () => {
228228
});
229229
});
230230

231-
describe('if filter.props.onFilter is defined', () => {
232-
const filterVal = '3';
233-
const onFilter = jest.fn();
234-
const customColumns = columns.map((column, i) => {
235-
if (i === 1) {
236-
return {
237-
...column,
238-
filter: textFilter({ onFilter })
239-
};
240-
}
241-
return column;
242-
});
243-
244-
beforeEach(() => {
245-
wrapper = shallow(shallowContext(false, customColumns));
246-
wrapper.render();
247-
instance = wrapper.instance();
248-
});
249-
250-
it('should call filter.props.onFilter correctly', () => {
251-
instance.onFilter(customColumns[1], FILTER_TYPE.TEXT)(filterVal);
252-
expect(onFilter).toHaveBeenCalledTimes(1);
253-
expect(onFilter).toHaveBeenCalledWith(filterVal);
254-
});
255-
});
256-
257-
describe('if filter.props.onFilter is defined and return an undefined data', () => {
231+
describe('if filter.props.onFilter is defined and return data', () => {
258232
const mockReturn = [{
259233
id: 1,
260234
name: 'A'
@@ -280,7 +254,7 @@ describe('FilterContext', () => {
280254
it('should call filter.props.onFilter correctly', () => {
281255
instance.onFilter(customColumns[1], FILTER_TYPE.TEXT)(filterVal);
282256
expect(onFilter).toHaveBeenCalledTimes(1);
283-
expect(onFilter).toHaveBeenCalledWith(filterVal);
257+
expect(onFilter).toHaveBeenCalledWith(filterVal, data);
284258
});
285259

286260
it('should set data correctly', () => {

0 commit comments

Comments
 (0)