From dc3b69664f8c27acbac56e249e81ae8e761363ac Mon Sep 17 00:00:00 2001 From: Ali Sasani Date: Thu, 30 Dec 2021 13:35:08 +0330 Subject: [PATCH] [Autocomplete] Fix calling onChange for duplicate values (#30374) --- .../AutocompleteUnstyled/useAutocomplete.js | 6 ++++- .../src/Autocomplete/Autocomplete.test.js | 24 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/packages/mui-base/src/AutocompleteUnstyled/useAutocomplete.js b/packages/mui-base/src/AutocompleteUnstyled/useAutocomplete.js index b028d19ec9726d..ef943fa4a68dd1 100644 --- a/packages/mui-base/src/AutocompleteUnstyled/useAutocomplete.js +++ b/packages/mui-base/src/AutocompleteUnstyled/useAutocomplete.js @@ -570,7 +570,11 @@ export default function useAutocomplete(props) { }; const handleValue = (event, newValue, reason, details) => { - if (value === newValue) { + if (Array.isArray(value)) { + if (value.length === newValue.length && value.every((val, i) => val === newValue[i])) { + return; + } + } else if (value === newValue) { return; } diff --git a/packages/mui-material/src/Autocomplete/Autocomplete.test.js b/packages/mui-material/src/Autocomplete/Autocomplete.test.js index 26b9f892d58016..27210e8919720b 100644 --- a/packages/mui-material/src/Autocomplete/Autocomplete.test.js +++ b/packages/mui-material/src/Autocomplete/Autocomplete.test.js @@ -502,6 +502,30 @@ describe('', () => { expect(textbox).toHaveFocus(); }); + it('should not call onChange function for duplicate values', () => { + const handleChange = spy(); + const options = ['one', 'two']; + render( + } + multiple + />, + ); + const textbox = screen.getByRole('textbox'); + + fireEvent.change(textbox, { target: { value: 'two' } }); + fireEvent.keyDown(textbox, { key: 'Enter' }); + expect(handleChange.callCount).to.equal(0); + + fireEvent.change(textbox, { target: { value: 'three' } }); + fireEvent.keyDown(textbox, { key: 'Enter' }); + expect(handleChange.callCount).to.equal(1); + }); + it('has no textbox value', () => { render(