From 06e2172df66908b8d646f7c9c6cb039e6352bbc2 Mon Sep 17 00:00:00 2001 From: Reid Barber Date: Wed, 5 Apr 2023 13:42:02 -0500 Subject: [PATCH 1/4] fix to remove duplicate event handler calls --- .../autocomplete/src/useSearchAutocomplete.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/@react-aria/autocomplete/src/useSearchAutocomplete.ts b/packages/@react-aria/autocomplete/src/useSearchAutocomplete.ts index ffacf9f5d5e..cc6723c5f4f 100644 --- a/packages/@react-aria/autocomplete/src/useSearchAutocomplete.ts +++ b/packages/@react-aria/autocomplete/src/useSearchAutocomplete.ts @@ -55,7 +55,9 @@ export function useSearchAutocomplete(props: AriaSearchAutocompleteOptions listBoxRef, keyboardDelegate, onSubmit = () => {}, - onClear + onClear, + onKeyDown, + onKeyUp } = props; let {inputProps, clearButtonProps} = useSearchField({ @@ -74,7 +76,9 @@ export function useSearchAutocomplete(props: AriaSearchAutocompleteOptions if (state.selectionManager.focusedKey === null) { onSubmit(value, null); } - } + }, + onKeyDown, + onKeyUp }, { value: state.inputValue, setValue: state.setInputValue @@ -89,7 +93,9 @@ export function useSearchAutocomplete(props: AriaSearchAutocompleteOptions listBoxRef, inputRef, onFocus: undefined, - onBlur: undefined + onBlur: undefined, + onKeyDown: undefined, + onKeyUp: undefined }, state ); From bf456e193585a45b7e97656cfce692a894751921 Mon Sep 17 00:00:00 2001 From: Reid Barber Date: Wed, 5 Apr 2023 13:42:11 -0500 Subject: [PATCH 2/4] add test --- .../test/SearchAutocomplete.test.js | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/packages/@react-spectrum/autocomplete/test/SearchAutocomplete.test.js b/packages/@react-spectrum/autocomplete/test/SearchAutocomplete.test.js index 8d1166f87df..e15f8c0a21e 100644 --- a/packages/@react-spectrum/autocomplete/test/SearchAutocomplete.test.js +++ b/packages/@react-spectrum/autocomplete/test/SearchAutocomplete.test.js @@ -823,6 +823,34 @@ describe('SearchAutocomplete', function () { expect(items).toHaveLength(1); expect(searchAutocomplete).not.toHaveAttribute('aria-activedescendant'); }); + + it('input events are only called once', function () { + let onKeyDown = jest.fn(); + let onKeyUp = jest.fn(); + let onFocus = jest.fn(); + let onInputChange = jest.fn(); + let onBlur = jest.fn(); + let {getByRole} = renderSearchAutocomplete({onKeyDown, onKeyUp, onFocus, onInputChange, onBlur}); + + let searchAutocomplete = getByRole('combobox'); + typeText(searchAutocomplete, 'w'); + + act(() => { + jest.runAllTimers(); + }); + + expect(onKeyDown).toHaveBeenCalledTimes(1); + expect(onKeyUp).toHaveBeenCalledTimes(1); + expect(onFocus).toHaveBeenCalledTimes(1); + expect(onInputChange).toHaveBeenCalledTimes(1); + expect(onBlur).toHaveBeenCalledTimes(0); + + act(() => { + userEvent.tab(); + }); + + expect(onBlur).toHaveBeenCalledTimes(1); + }); }); describe('blur', function () { From 30c6234f13056c7e08f311a432b36040eda1f461 Mon Sep 17 00:00:00 2001 From: Reid Barber Date: Wed, 5 Apr 2023 14:06:30 -0500 Subject: [PATCH 3/4] fix for onFocusChange --- packages/@react-aria/autocomplete/src/useSearchAutocomplete.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/@react-aria/autocomplete/src/useSearchAutocomplete.ts b/packages/@react-aria/autocomplete/src/useSearchAutocomplete.ts index cc6723c5f4f..1add4606165 100644 --- a/packages/@react-aria/autocomplete/src/useSearchAutocomplete.ts +++ b/packages/@react-aria/autocomplete/src/useSearchAutocomplete.ts @@ -93,6 +93,7 @@ export function useSearchAutocomplete(props: AriaSearchAutocompleteOptions listBoxRef, inputRef, onFocus: undefined, + onFocusChange: undefined, onBlur: undefined, onKeyDown: undefined, onKeyUp: undefined From 8e52af01be9e4f7f0818491ecb5f7e5aa496b226 Mon Sep 17 00:00:00 2001 From: Reid Barber Date: Wed, 5 Apr 2023 14:09:49 -0500 Subject: [PATCH 4/4] update test --- .../autocomplete/test/SearchAutocomplete.test.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/@react-spectrum/autocomplete/test/SearchAutocomplete.test.js b/packages/@react-spectrum/autocomplete/test/SearchAutocomplete.test.js index e15f8c0a21e..18866ea5587 100644 --- a/packages/@react-spectrum/autocomplete/test/SearchAutocomplete.test.js +++ b/packages/@react-spectrum/autocomplete/test/SearchAutocomplete.test.js @@ -824,13 +824,14 @@ describe('SearchAutocomplete', function () { expect(searchAutocomplete).not.toHaveAttribute('aria-activedescendant'); }); - it('input events are only called once', function () { + it('input events are only fired once', function () { let onKeyDown = jest.fn(); let onKeyUp = jest.fn(); let onFocus = jest.fn(); let onInputChange = jest.fn(); + let onFocusChange = jest.fn(); let onBlur = jest.fn(); - let {getByRole} = renderSearchAutocomplete({onKeyDown, onKeyUp, onFocus, onInputChange, onBlur}); + let {getByRole} = renderSearchAutocomplete({onKeyDown, onKeyUp, onFocus, onInputChange, onBlur, onFocusChange}); let searchAutocomplete = getByRole('combobox'); typeText(searchAutocomplete, 'w'); @@ -843,6 +844,7 @@ describe('SearchAutocomplete', function () { expect(onKeyUp).toHaveBeenCalledTimes(1); expect(onFocus).toHaveBeenCalledTimes(1); expect(onInputChange).toHaveBeenCalledTimes(1); + expect(onFocusChange).toHaveBeenCalledTimes(1); expect(onBlur).toHaveBeenCalledTimes(0); act(() => {