From d0730710c5d6f16d47cd466dd8e309d3e662c430 Mon Sep 17 00:00:00 2001 From: teramotodaiki Date: Fri, 31 Jan 2020 18:55:40 +0900 Subject: [PATCH 1/2] [Autocomplete] Wait until IME is settled --- .../material-ui-lab/src/useAutocomplete/useAutocomplete.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/material-ui-lab/src/useAutocomplete/useAutocomplete.js b/packages/material-ui-lab/src/useAutocomplete/useAutocomplete.js index 00e7ca020f5844..632fb2bf450590 100644 --- a/packages/material-ui-lab/src/useAutocomplete/useAutocomplete.js +++ b/packages/material-ui-lab/src/useAutocomplete/useAutocomplete.js @@ -584,6 +584,10 @@ export default function useAutocomplete(props) { handleFocusTag(event, 'next'); break; case 'Enter': + // Wait until IME is settled. + if (event.which === 229) { + break; + } if (highlightedIndexRef.current !== -1 && popupOpen) { // We don't want to validate the form. event.preventDefault(); From bf38327f2810bf68dd352eba16162a5c247a4c77 Mon Sep 17 00:00:00 2001 From: teramotodaiki Date: Fri, 31 Jan 2020 23:21:00 +0900 Subject: [PATCH 2/2] [Autocomplete] add test about IME behavior --- .../src/Autocomplete/Autocomplete.test.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/packages/material-ui-lab/src/Autocomplete/Autocomplete.test.js b/packages/material-ui-lab/src/Autocomplete/Autocomplete.test.js index 633763d7d4ec53..d8da9d3a9dddba 100644 --- a/packages/material-ui-lab/src/Autocomplete/Autocomplete.test.js +++ b/packages/material-ui-lab/src/Autocomplete/Autocomplete.test.js @@ -910,6 +910,24 @@ describe('', () => { fireEvent.keyDown(document.activeElement, { key: 'Enter' }); expect(container.querySelectorAll('[class*="MuiChip-root"]')).to.have.length(3); }); + + it('should not fire change event until the IME is confirmed', () => { + const handleChange = spy(); + render( + } + />, + ); + // Actual behavior when "あ" (Japanese) is entered on macOS/Safari with IME + fireEvent.change(document.activeElement, { target: { value: 'あ' } }); + fireEvent.keyDown(document.activeElement, { key: 'Enter', keyCode: 229 }); + expect(handleChange.callCount).to.equal(0); + fireEvent.keyDown(document.activeElement, { key: 'Enter', keyCode: 13 }); + expect(handleChange.callCount).to.equal(1); + expect(handleChange.args[0][1]).to.equal('あ'); + }); }); describe('prop: onInputChange', () => {