@@ -5,7 +5,7 @@ import type {
55 TextProps ,
66 ViewProps ,
77} from 'react-native' ;
8- import type { HostElement } from 'universal-test-renderer' ;
8+ import type { Fiber , HostElement } from 'universal-test-renderer' ;
99
1010import act from './act' ;
1111import { EventHandler , getEventHandlerFromProps } from './event-handler' ;
@@ -79,7 +79,9 @@ function findEventHandler(
7979) : EventHandler | null {
8080 const touchResponder = isTouchResponder ( element ) ? element : nearestTouchResponder ;
8181
82- const handler = getEventHandlerFromProps ( element . props , eventName , { loose : true } ) ;
82+ const handler =
83+ getEventHandlerFromProps ( element . props , eventName , { loose : true } ) ??
84+ findEventHandlerFromFiber ( element . unstable_fiber , eventName ) ;
8385 if ( handler && isEventEnabled ( element , eventName , touchResponder ) ) {
8486 return handler ;
8587 }
@@ -91,6 +93,25 @@ function findEventHandler(
9193 return findEventHandler ( element . parent , eventName , touchResponder ) ;
9294}
9395
96+ function findEventHandlerFromFiber ( fiber : Fiber | null , eventName : string ) : EventHandler | null {
97+ // Container fibers have memoizedProps set to null
98+ if ( ! fiber ?. memoizedProps ) {
99+ return null ;
100+ }
101+
102+ const handler = getEventHandlerFromProps ( fiber . memoizedProps , eventName , { loose : true } ) ;
103+ if ( handler ) {
104+ return handler ;
105+ }
106+
107+ // No parent fiber or we reached another host element
108+ if ( fiber . return === null || typeof fiber . return . type === 'string' ) {
109+ return null ;
110+ }
111+
112+ return findEventHandlerFromFiber ( fiber . return , eventName ) ;
113+ }
114+
94115// String union type of keys of T that start with on, stripped of 'on'
95116type EventNameExtractor < T > = keyof {
96117 [ K in keyof T as K extends `on${infer Rest } ` ? Uncapitalize < Rest > : never ] : T [ K ] ;
0 commit comments