Skip to content

Commit fd2cc0b

Browse files
nitzanyizM-i-k-e-l
andauthored
ExpandableOverlay - Focus accessibility after overlay close (#3503)
* Added focus on close * Fixed typings and added focus to renderCustom * Update src/incubator/expandableOverlay/index.tsx * Remove containerRef dependency from useEffect in ExpandableOverlay * Refactor import statements in ExpandableOverlay for improved readability * Remove focusAccessibility method from ExpandableOverlay interface --------- Co-authored-by: Miki Leib <[email protected]>
1 parent a9c5b4a commit fd2cc0b

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

src/incubator/expandableOverlay/index.tsx

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import React, {useCallback, useState, forwardRef, PropsWithChildren, useImperativeHandle} from 'react';
2-
1+
import React, {useCallback, useState, forwardRef, PropsWithChildren, useImperativeHandle, useRef} from 'react';
2+
import {AccessibilityInfo, findNodeHandle} from 'react-native';
33
import TouchableOpacity, {TouchableOpacityProps} from '../../components/touchableOpacity';
44
import View from '../../components/view';
55
import Modal, {ModalProps, ModalTopBarProps} from '../../components/modal';
@@ -68,14 +68,25 @@ const ExpandableOverlay = (props: ExpandableOverlayProps, ref: any) => {
6868
...others
6969
} = props;
7070
const [visible, setExpandableVisible] = useState(false);
71+
const containerRef = useRef(null);
72+
73+
const focusAccessibility = useCallback(() => {
74+
const reactTag = findNodeHandle(containerRef.current);
75+
if (reactTag) {
76+
AccessibilityInfo.setAccessibilityFocus(reactTag);
77+
}
78+
}, []);
79+
7180
const openExpandable = useCallback(() => {
7281
setExpandableVisible(true);
7382
onPress?.(props);
7483
}, [onPress, customValue]);
84+
7585
const closeExpandable = useCallback(() => {
7686
setExpandableVisible(false);
87+
focusAccessibility();
7788
useDialog ? dialogProps?.onDismiss?.() : modalProps?.onDismiss?.();
78-
}, [useDialog, dialogProps?.onDismiss, modalProps?.onDismiss]);
89+
}, [useDialog, dialogProps?.onDismiss, modalProps?.onDismiss, focusAccessibility]);
7990

8091
const toggleExpandable = useCallback(() => (visible ? closeExpandable() : openExpandable()),
8192
[visible, openExpandable, closeExpandable]);
@@ -126,7 +137,7 @@ const ExpandableOverlay = (props: ExpandableOverlayProps, ref: any) => {
126137
};
127138

128139
return (
129-
<TouchableOpacity {...others} onPress={openExpandable} disabled={disabled} testID={testID}>
140+
<TouchableOpacity ref={containerRef} {...others} onPress={openExpandable} disabled={disabled} testID={testID}>
130141
<View pointerEvents="none">{children}</View>
131142
{renderOverlay()}
132143
</TouchableOpacity>

0 commit comments

Comments
 (0)