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':