diff --git a/components/table/__tests__/Table.filter.test.js b/components/table/__tests__/Table.filter.test.js index cf74e8d1cd75..569c6badfad2 100644 --- a/components/table/__tests__/Table.filter.test.js +++ b/components/table/__tests__/Table.filter.test.js @@ -2305,4 +2305,53 @@ describe('Table.filter', () => { ); expect(errorSpy).not.toBeCalled(); }); + + it('can reset if filterResetToDefaultFilteredValue and filter is changing', () => { + const wrapper = mount( + createTable({ + columns: [ + { + ...column, + filters: [ + { text: 'Jack', value: 'Jack' }, + { text: 'Lucy', value: 'Lucy' }, + ], + defaultFilteredValue: ['Jack'], + filterResetToDefaultFilteredValue: true, + }, + ], + }), + ); + expect(wrapper.find('tbody tr').length).toBe(1); + expect(wrapper.find('tbody tr').text()).toBe('Jack'); + + // open filter + wrapper.find('span.ant-dropdown-trigger').first().simulate('click'); + expect( + wrapper.find('.ant-table-filter-dropdown-btns .ant-btn-link').props().disabled, + ).toBeTruthy(); + expect(wrapper.find('li.ant-dropdown-menu-item').at(0).text()).toBe('Jack'); + expect(wrapper.find('li.ant-dropdown-menu-item').at(1).text()).toBe('Lucy'); + + // deselect default + wrapper.find('li.ant-dropdown-menu-item').at(0).simulate('click'); + expect( + wrapper.find('.ant-table-filter-dropdown-btns .ant-btn-link').props().disabled, + ).toBeFalsy(); + // select other one + wrapper.find('li.ant-dropdown-menu-item').at(1).simulate('click'); + expect( + wrapper.find('.ant-table-filter-dropdown-btns .ant-btn-link').props().disabled, + ).toBeFalsy(); + // deselect other one + wrapper.find('li.ant-dropdown-menu-item').at(1).simulate('click'); + expect( + wrapper.find('.ant-table-filter-dropdown-btns .ant-btn-link').props().disabled, + ).toBeFalsy(); + // select default + wrapper.find('li.ant-dropdown-menu-item').at(0).simulate('click'); + expect( + wrapper.find('.ant-table-filter-dropdown-btns .ant-btn-link').props().disabled, + ).toBeTruthy(); + }); }); diff --git a/components/table/hooks/useFilter/FilterDropdown.tsx b/components/table/hooks/useFilter/FilterDropdown.tsx index 4d5fa69f1e32..8408fa167380 100644 --- a/components/table/hooks/useFilter/FilterDropdown.tsx +++ b/components/table/hooks/useFilter/FilterDropdown.tsx @@ -407,16 +407,22 @@ function FilterDropdown(props: FilterDropdownProps) { ); }; + const getResetDisabled = () => { + if (filterResetToDefaultFilteredValue) { + return isEqual( + (defaultFilteredValue || []).map(key => String(key)), + selectedKeys, + ); + } + + return selectedKeys.length === 0; + }; + dropdownContent = ( <> {getFilterComponent()}
-