fix: a11y regression audio msg sending

This commit is contained in:
devthejo 2026-01-13 00:22:30 +01:00
parent 9ca0bbc35c
commit a12bd59352
No known key found for this signature in database
GPG key ID: 00CCA7A92B1D5351
2 changed files with 19 additions and 6 deletions

View file

@ -5,10 +5,21 @@ import {
} from "react-native"; } from "react-native";
export function setA11yFocus(refOrNode) { export function setA11yFocus(refOrNode) {
const node = findNodeHandle(refOrNode?.current ?? refOrNode); // RN's `setAccessibilityFocus` expects a native host node handle.
if (!node) return; // In practice, callers may pass:
// - a ref object ({ current })
// - a host component
// - a composite component instance (invalid)
// - null/undefined
// We must never throw here, otherwise we can crash the whole app.
try {
const candidate = refOrNode?.current ?? refOrNode;
const node = findNodeHandle(candidate);
if (typeof node !== "number") return;
AccessibilityInfo.setAccessibilityFocus(node); AccessibilityInfo.setAccessibilityFocus(node);
} catch (_e) {
// noop
}
} }
export function setA11yFocusAfterInteractions(refOrNode) { export function setA11yFocusAfterInteractions(refOrNode) {

View file

@ -505,7 +505,9 @@ function AlertCurMap() {
const closeStepper = useCallback(() => { const closeStepper = useCallback(() => {
setStepperIsOpened(false); setStepperIsOpened(false);
setA11yFocusAfterInteractions(lastStepsTriggerRef.current); // Pass the ref object (not `.current`) so `findNodeHandle` can safely
// resolve the native host view.
setA11yFocusAfterInteractions(lastStepsTriggerRef);
}, [setStepperIsOpened]); }, [setStepperIsOpened]);
const stepperOnOpen = useCallback(() => { const stepperOnOpen = useCallback(() => {
@ -521,7 +523,7 @@ function AlertCurMap() {
setStepperIsOpened(false); setStepperIsOpened(false);
} }
announceForA11yIfScreenReaderEnabled("Liste des étapes fermée"); announceForA11yIfScreenReaderEnabled("Liste des étapes fermée");
setA11yFocusAfterInteractions(lastStepsTriggerRef.current); setA11yFocusAfterInteractions(lastStepsTriggerRef);
}, [stepperIsOpened, setStepperIsOpened]); }, [stepperIsOpened, setStepperIsOpened]);
const [externalGeoIsVisible, setExternalGeoIsVisible] = useState(false); const [externalGeoIsVisible, setExternalGeoIsVisible] = useState(false);