diff --git a/packages/material-ui-lab/src/Autocomplete/Autocomplete.test.js b/packages/material-ui-lab/src/Autocomplete/Autocomplete.test.js index 2c43a6c21b3b98..f037fc72cc094b 100644 --- a/packages/material-ui-lab/src/Autocomplete/Autocomplete.test.js +++ b/packages/material-ui-lab/src/Autocomplete/Autocomplete.test.js @@ -814,6 +814,27 @@ describe('', () => { fireEvent.keyDown(document.activeElement, { key: 'Enter' }); expect(handleChange.callCount).to.equal(1); }); + + it('should not delete exiting tag when try to add it twice', () => { + const handleChange = spy(); + const options = ['one', 'two']; + const { container } = render( + } + multiple + />, + ); + fireEvent.change(document.activeElement, { target: { value: 'three' } }); + fireEvent.keyDown(document.activeElement, { key: 'Enter' }); + expect(container.querySelectorAll('[class*="MuiChip-root"]')).to.have.length(3); + fireEvent.change(document.activeElement, { target: { value: 'three' } }); + fireEvent.keyDown(document.activeElement, { key: 'Enter' }); + expect(container.querySelectorAll('[class*="MuiChip-root"]')).to.have.length(3); + }); }); describe('prop: onInputChange', () => { diff --git a/packages/material-ui-lab/src/useAutocomplete/useAutocomplete.js b/packages/material-ui-lab/src/useAutocomplete/useAutocomplete.js index f3ba2747b2a7db..9b2b1e3de4d88f 100644 --- a/packages/material-ui-lab/src/useAutocomplete/useAutocomplete.js +++ b/packages/material-ui-lab/src/useAutocomplete/useAutocomplete.js @@ -430,7 +430,7 @@ export default function useAutocomplete(props) { setValue(newValue); }; - const selectNewValue = (event, newValue) => { + const selectNewValue = (event, newValue, origin = 'option') => { if (multiple) { const item = newValue; newValue = Array.isArray(value) ? [...value] : []; @@ -439,7 +439,7 @@ export default function useAutocomplete(props) { if (itemIndex === -1) { newValue.push(item); - } else { + } else if (origin !== 'freeSolo') { newValue.splice(itemIndex, 1); } } @@ -597,7 +597,7 @@ export default function useAutocomplete(props) { // Allow people to add new values before they submit the form. event.preventDefault(); } - selectNewValue(event, inputValue); + selectNewValue(event, inputValue, 'freeSolo'); } break; case 'Escape':