mirror of
https://github.com/gosticks/react-bootstrap-table2.git
synced 2025-10-16 11:55:39 +00:00
parent
6530ff1570
commit
423769c134
@ -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 (
|
||||
<div>
|
||||
<h2>Implement Custom Filter</h2>
|
||||
<h2>Implement a eq price filter</h2>
|
||||
<BootstrapTable
|
||||
keyField="id"
|
||||
data={ products }
|
||||
|
||||
@ -40,7 +40,7 @@ export default (
|
||||
componentWillReceiveProps(nextProps) {
|
||||
// let nextData = nextProps.data;
|
||||
if (!isRemoteFiltering() && !_.isEqual(nextProps.data, this.data)) {
|
||||
this.doFilter(nextProps, undefined, this.isEmitDataChange);
|
||||
this.doFilter(nextProps, this.isEmitDataChange);
|
||||
} else {
|
||||
this.data = nextProps.data;
|
||||
}
|
||||
@ -76,12 +76,7 @@ export default (
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
let result;
|
||||
if (filter.props.onFilter) {
|
||||
result = filter.props.onFilter(filterVal);
|
||||
}
|
||||
this.doFilter(this.props, result);
|
||||
this.doFilter(this.props);
|
||||
};
|
||||
}
|
||||
|
||||
@ -95,11 +90,9 @@ export default (
|
||||
return this.data;
|
||||
}
|
||||
|
||||
doFilter(props, customResult, ignoreEmitDataChange = false) {
|
||||
let result = customResult;
|
||||
|
||||
doFilter(props, ignoreEmitDataChange = false) {
|
||||
const { dataChangeListener, data, columns } = props;
|
||||
result = result || filters(data, columns, _)(this.currFilters);
|
||||
const result = filters(data, columns, _)(this.currFilters);
|
||||
this.data = result;
|
||||
if (dataChangeListener && !ignoreEmitDataChange) {
|
||||
this.isEmitDataChange = true;
|
||||
|
||||
@ -237,13 +237,21 @@ export const filters = (data, columns, _) => (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;
|
||||
};
|
||||
|
||||
@ -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', () => {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user