diff --git a/src/Select.tsx b/src/Select.tsx index 59f35f97..a1b13d96 100644 --- a/src/Select.tsx +++ b/src/Select.tsx @@ -431,15 +431,26 @@ const Select = React.forwardRef { + const sortedOptions = [...options].sort((a, b) => + filterSort(a, b, { searchValue: mergedSearchValue }), + ); + const sortedOptionsWithNested = sortedOptions.map((item) => { + if (Array.isArray(item.options)) { + return { + ...item, + options: sorter(item.options), + }; + } + return item; + }); + return sortedOptionsWithNested; + }; 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..e138d0b0 100644 --- a/tests/Select.test.tsx +++ b/tests/Select.test.tsx @@ -1947,7 +1947,44 @@ describe('Select.Basic', () => { 'Communicated', ); }); - + it('filterSort should work with search value when grouping',() => { + const { container } = render( + ); expect(container.querySelector('.rc-select').getAttribute('tabindex')).toBeFalsy();