diff --git a/src/Select.tsx b/src/Select.tsx index 59f35f97..88fa5aaa 100644 --- a/src/Select.tsx +++ b/src/Select.tsx @@ -431,15 +431,26 @@ const Select = React.forwardRef { + const sortedOptions = [...inputOptions].sort((a, b) => + filterSort(a, b, { searchValue: mergedSearchValue }), + ); + return sortedOptions.map((item) => { + if (Array.isArray(item.options)) { + return { + ...item, + options: item.options.length > 0 ? sorter(item.options) : item.options, + }; + } + return item; + }); + }; const orderedFilteredOptions = React.useMemo(() => { if (!filterSort) { return filledSearchOptions; } - return [...filledSearchOptions].sort((a, b) => - filterSort(a, b, { searchValue: mergedSearchValue }), - ); + return sorter(filledSearchOptions); }, [filledSearchOptions, filterSort, mergedSearchValue]); const displayOptions = React.useMemo( diff --git a/tests/Select.test.tsx b/tests/Select.test.tsx index 361a55e6..54062490 100644 --- a/tests/Select.test.tsx +++ b/tests/Select.test.tsx @@ -1948,6 +1948,42 @@ describe('Select.Basic', () => { ); }); + it('filterSort should work with search value when grouping', () => { + const { container } = render( + ); expect(container.querySelector('.rc-select').getAttribute('tabindex')).toBeFalsy();