From 7688c20bdcfca4710aba29a39c90fb47b37c4b85 Mon Sep 17 00:00:00 2001 From: afc163 Date: Tue, 8 Apr 2025 19:02:51 +0800 Subject: [PATCH] chore: fix Table filter behavior when filterDropdown is undefined (#53421) --- .../table/__tests__/Table.filter.test.tsx | 24 +++++++++++++++++++ components/table/hooks/useFilter/index.tsx | 5 ++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/components/table/__tests__/Table.filter.test.tsx b/components/table/__tests__/Table.filter.test.tsx index 78f1e658b9..d5d827d8e0 100644 --- a/components/table/__tests__/Table.filter.test.tsx +++ b/components/table/__tests__/Table.filter.test.tsx @@ -193,6 +193,30 @@ describe('Table.filter', () => { ); }); + // https://github.com/ant-design/ant-design/issues/49025 + it('should handle filterDropdown undefined correctly', () => { + const { container } = render( + createTable({ + columns: [ + { + ...column, + filters: [ + { text: 'Boy', value: true }, + { text: 'Girl', value: false }, + ], + filteredValue: [true], + filterDropdown: undefined, + }, + ], + }), + ); + // 首先点击打开筛选菜单 + fireEvent.click(container.querySelector('.ant-table-filter-trigger')!); + // 检查是否正确选中了Boy选项 + const boyMenuItem = container.querySelectorAll('.ant-dropdown-menu-item-selected')[0]; + expect(boyMenuItem.textContent).toBe('Boy'); + }); + it('override custom filter correctly', () => { let renderSelectedKeys: React.Key[] | null = null; const filter = ({ diff --git a/components/table/hooks/useFilter/index.tsx b/components/table/hooks/useFilter/index.tsx index 656745700c..f92cd20df5 100644 --- a/components/table/hooks/useFilter/index.tsx +++ b/components/table/hooks/useFilter/index.tsx @@ -33,12 +33,13 @@ const collectFilterStates = ( (columns || []).forEach((column, index) => { const columnPos = getColumnPos(index, pos); + const filterDropdownIsDefined = column.filterDropdown !== undefined; - if (column.filters || 'filterDropdown' in column || 'onFilter' in column) { + if (column.filters || filterDropdownIsDefined || 'onFilter' in column) { if ('filteredValue' in column) { // Controlled let filteredValues = column.filteredValue; - if (!('filterDropdown' in column)) { + if (!filterDropdownIsDefined) { filteredValues = filteredValues?.map(String) ?? filteredValues; } filterStates.push({