diff --git a/packages/react-bootstrap-table2-example/examples/column-filter/custom-filter-logic.js b/packages/react-bootstrap-table2-example/examples/column-filter/custom-filter-logic.js index 540c38b..25b37bb 100644 --- a/packages/react-bootstrap-table2-example/examples/column-filter/custom-filter-logic.js +++ b/packages/react-bootstrap-table2-example/examples/column-filter/custom-filter-logic.js @@ -50,11 +50,11 @@ class Table extends React.Component { `; export default class Table extends React.Component { - filterByPrice = (filterVal) => { + filterByPrice = (filterVal, data) => { if (filterVal) { - return products.filter(product => product.price == filterVal); + return data.filter(product => product.price == filterVal); } - return products; + return data; } render() { @@ -75,7 +75,7 @@ export default class Table extends React.Component { return (
-

Implement Custom Filter

+

Implement a eq price filter

(currFilters) => { const filterObj = currFilters[dataField]; filterFn = factory(filterObj.filterType); let filterValue; + let customFilter; for (let i = 0; i < columns.length; i += 1) { if (columns[i].dataField === dataField) { filterValue = columns[i].filterValue; + if (columns[i].filter) { + customFilter = columns[i].filter.props.onFilter; + } break; } } - result = filterFn(result, dataField, filterObj, filterValue); + if (customFilter) { + result = customFilter(filterObj.filterVal, result); + } else { + result = filterFn(result, dataField, filterObj, filterValue); + } }); return result; }; diff --git a/packages/react-bootstrap-table2-filter/test/context.test.js b/packages/react-bootstrap-table2-filter/test/context.test.js index fcad5dd..face019 100644 --- a/packages/react-bootstrap-table2-filter/test/context.test.js +++ b/packages/react-bootstrap-table2-filter/test/context.test.js @@ -228,33 +228,7 @@ describe('FilterContext', () => { }); }); - describe('if filter.props.onFilter is defined', () => { - const filterVal = '3'; - const onFilter = jest.fn(); - const customColumns = columns.map((column, i) => { - if (i === 1) { - return { - ...column, - filter: textFilter({ onFilter }) - }; - } - return column; - }); - - beforeEach(() => { - wrapper = shallow(shallowContext(false, customColumns)); - wrapper.render(); - instance = wrapper.instance(); - }); - - it('should call filter.props.onFilter correctly', () => { - instance.onFilter(customColumns[1], FILTER_TYPE.TEXT)(filterVal); - expect(onFilter).toHaveBeenCalledTimes(1); - expect(onFilter).toHaveBeenCalledWith(filterVal); - }); - }); - - describe('if filter.props.onFilter is defined and return an undefined data', () => { + describe('if filter.props.onFilter is defined and return data', () => { const mockReturn = [{ id: 1, name: 'A' @@ -280,7 +254,7 @@ describe('FilterContext', () => { it('should call filter.props.onFilter correctly', () => { instance.onFilter(customColumns[1], FILTER_TYPE.TEXT)(filterVal); expect(onFilter).toHaveBeenCalledTimes(1); - expect(onFilter).toHaveBeenCalledWith(filterVal); + expect(onFilter).toHaveBeenCalledWith(filterVal, data); }); it('should set data correctly', () => {