Fix Table pagination after filter, close #1669 (#1715)

This commit is contained in:
Leon Shi 2016-05-17 10:58:01 +08:00 committed by afc163
parent 49f866a8ff
commit 0ff91b4135

View File

@ -248,20 +248,27 @@ export default class Table extends React.Component {
}
handleFilter = (column, nextFilters) => {
const props = this.props;
let pagination = { ...this.state.pagination };
const filters = {
...this.state.filters,
[this.getColumnKey(column)]: nextFilters,
};
// Remove filters not in current columns
const currentColumnKeys = this.props.columns.map(c => this.getColumnKey(c));
const currentColumnKeys = props.columns.map(c => this.getColumnKey(c));
Object.keys(filters).forEach((columnKey) => {
if (currentColumnKeys.indexOf(columnKey) < 0) {
delete filters[columnKey];
}
});
// Reset current prop
pagination.current = 1;
pagination.onChange(pagination.current);
const newState = {
selectionDirty: false,
pagination,
};
const filtersToSetState = { ...filters };
// Remove filters which is controlled
@ -274,9 +281,21 @@ export default class Table extends React.Component {
if (Object.keys(filtersToSetState).length > 0) {
newState.filters = filtersToSetState;
}
// Controlled current prop will not respond user interaction
if (props.pagination && 'current' in props.pagination) {
newState.pagination = {
...pagination,
current: this.state.pagination.current,
};
}
this.setState(newState, () => {
this.props.onChange(...this.prepareParamsArguments({
...this.state, selectionDirty: false, filters,
props.onChange(...this.prepareParamsArguments({
...this.state,
selectionDirty: false,
filters,
pagination,
}));
});
}