This commit is contained in:
Allen 2019-07-27 16:19:52 +08:00 committed by GitHub
parent 6530ff1570
commit 423769c134
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 19 additions and 44 deletions

View File

@ -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 }

View File

@ -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;

View File

@ -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;
};

View File

@ -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', () => {