Skip to content

Commit a8af64e

Browse files
[autocomplete] Fix scroll position resetting on reopen with disableCloseOnSelect (#47248)
1 parent 3b84cd2 commit a8af64e

File tree

2 files changed

+37
-2
lines changed

2 files changed

+37
-2
lines changed

packages/mui-material/src/Autocomplete/Autocomplete.test.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3935,4 +3935,39 @@ describe('<Autocomplete />', () => {
39353935

39363936
expect(screen.getByTestId('label')).to.have.attribute('data-shrink', 'false');
39373937
});
3938+
3939+
// https://github.com/mui/material-ui/issues/47203
3940+
it.skipIf(isJsdom())(
3941+
'should not scroll the listbox to the top when listbox is scrolled down and one of the end option is clicked',
3942+
() => {
3943+
render(
3944+
<Autocomplete
3945+
multiple
3946+
disableCloseOnSelect
3947+
options={['one', 'two', 'three', 'four', 'five']}
3948+
renderInput={(params) => <TextField {...params} />}
3949+
slotProps={{ listbox: { style: { padding: 0, maxHeight: '100px' } } }}
3950+
/>,
3951+
);
3952+
const textbox = screen.getByRole('combobox');
3953+
3954+
// open listbox
3955+
fireEvent.mouseDown(textbox);
3956+
3957+
// close listbox
3958+
fireEvent.mouseDown(textbox);
3959+
3960+
// re-open listbox
3961+
fireEvent.mouseDown(textbox);
3962+
3963+
const listbox = screen.getByRole('listbox');
3964+
const options = screen.getAllByRole('option');
3965+
3966+
listbox.scrollBy(0, 180);
3967+
3968+
fireEvent.click(options[4]);
3969+
3970+
expect(listbox).not.to.have.property('scrollTop', 0);
3971+
},
3972+
);
39383973
});

packages/mui-material/src/useAutocomplete/useAutocomplete.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -614,10 +614,10 @@ function useAutocomplete(props) {
614614
}
615615

616616
React.useEffect(() => {
617-
if (filteredOptionsChanged || popupOpen) {
617+
if (filteredOptionsChanged || (popupOpen && !disableCloseOnSelect)) {
618618
syncHighlightedIndex();
619619
}
620-
}, [syncHighlightedIndex, filteredOptionsChanged, popupOpen]);
620+
}, [syncHighlightedIndex, filteredOptionsChanged, popupOpen, disableCloseOnSelect]);
621621

622622
const handleOpen = (event) => {
623623
if (open) {

0 commit comments

Comments
 (0)