fix: Table crash when filter dynamic change (#17141)

* update test case

* fix: Table change filter should not crash

* rm focus test
This commit is contained in:
zombieJ 2019-06-17 18:50:38 +08:00 committed by GitHub
parent ebdc7041f7
commit b77dbd331d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 69 additions and 1 deletions

View File

@ -620,4 +620,70 @@ describe('Table.filter', () => {
.simulate('click');
expect(wrapper.find('.ant-input').instance().value).toBe('');
});
// https://github.com/ant-design/ant-design/issues/17089
it('not crash when dynamic change filter', () => {
const onChange = jest.fn();
const Test = ({ filters }) => (
<Table
onChange={onChange}
columns={[
{
title: 'Name',
dataIndex: 'name',
filters,
onFilter: (value, record) => {
return record.name.indexOf(value) === 0;
},
sorter: (a, b) => a.name.length - b.name.length,
sortDirections: ['descend'],
},
]}
dataSource={[
{
name: 'Jack',
},
]}
/>
);
const wrapper = mount(
<Test
filters={[
{
text: 'Bill',
value: 'Bill',
},
]}
/>,
);
const dropdownWrapper = getDropdownWrapper(wrapper);
dropdownWrapper
.find('MenuItem')
.first()
.simulate('click');
dropdownWrapper.find('.confirm').simulate('click');
expect(onChange).toHaveBeenCalled();
onChange.mockReset();
expect(onChange).not.toHaveBeenCalled();
wrapper.setProps({
filters: [
{
text: 'Jim',
value: 'Jim',
},
],
});
const dropdownWrapper2 = getDropdownWrapper(wrapper);
dropdownWrapper2
.find('MenuItem')
.first()
.simulate('click');
dropdownWrapper2.find('.confirm').simulate('click');
expect(onChange).toHaveBeenCalled();
});
});

View File

@ -144,7 +144,9 @@ class FilterMenu<T> extends React.Component<FilterMenuProps<T>, FilterMenuState<
if (!shallowequal(selectedKeys, this.props.selectedKeys)) {
this.props.confirmFilter(
this.props.column,
filterDropdown ? selectedKeys : selectedKeys.map(key => valueKeys[key]),
filterDropdown
? selectedKeys
: selectedKeys.map(key => valueKeys[key]).filter(key => key !== undefined),
);
}
}