Skip to content

Commit 8fffdf8

Browse files
committed
fix mobile screen reader detection for disabling virtual focus
fixes case where opening a nested autocomplete subdialog in a autocomplete menu via ENTER didnt allow the user to navigate the subdialogs options via keyboard
1 parent 9b3aadf commit 8fffdf8

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

packages/@react-aria/autocomplete/src/useAutocomplete.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import {AriaLabelingProps, BaseEvent, DOMProps, FocusableElement, Node, RefObject} from '@react-types/shared';
1414
import {AriaTextFieldProps} from '@react-aria/textfield';
1515
import {AutocompleteProps, AutocompleteState} from '@react-stately/autocomplete';
16-
import {CLEAR_FOCUS_EVENT, FOCUS_EVENT, getActiveElement, getOwnerDocument, isCtrlKeyPressed, mergeProps, mergeRefs, useEffectEvent, useEvent, useLabels, useObjectRef, useSlotId} from '@react-aria/utils';
16+
import {CLEAR_FOCUS_EVENT, FOCUS_EVENT, getActiveElement, getOwnerDocument, isAndroid, isCtrlKeyPressed, isIOS, mergeProps, mergeRefs, useEffectEvent, useEvent, useLabels, useObjectRef, useSlotId} from '@react-aria/utils';
1717
import {dispatchVirtualBlur, dispatchVirtualFocus, getVirtuallyFocusedElement, moveVirtualFocus} from '@react-aria/focus';
1818
import {getInteractionModality} from '@react-aria/interactions';
1919
// @ts-ignore
@@ -90,8 +90,8 @@ export function useAutocomplete<T>(props: AriaAutocompleteOptions<T>, state: Aut
9090

9191
// For mobile screen readers, we don't want virtual focus, instead opting to disable FocusScope's restoreFocus and manually
9292
// moving focus back to the subtriggers
93-
let shouldUseVirtualFocus = getInteractionModality() !== 'virtual' && !disableVirtualFocus;
94-
93+
let isMobileScreenReader = getInteractionModality() === 'virtual' && (isIOS() || isAndroid());
94+
let shouldUseVirtualFocus = !isMobileScreenReader && !disableVirtualFocus;
9595
useEffect(() => {
9696
return () => clearTimeout(timeout.current);
9797
}, []);

0 commit comments

Comments
 (0)