@@ -6,30 +6,50 @@ const findEventHandler = (
66 element : ReactTestInstance ,
77 eventName : string ,
88 callsite ? : any ,
9- nearestHostDescendent ? : ReactTestInstance
9+ nearestHostDescendent ? : ReactTestInstance ,
10+ hasDescendandHandler ? : boolean
1011) => {
12+ const handler = getEventHandler ( element , eventName ) ;
13+ const hasHandler = handler != null || hasDescendandHandler ;
14+
1115 const isHostComponent = typeof element . type === 'string' ;
1216 const hostElement = isHostComponent ? element : nearestHostDescendent ;
1317 const isEventEnabled =
1418 hostElement ?. props . onStartShouldSetResponder ?. ( ) !== false ;
19+ if ( handler && isEventEnabled ) return handler ;
1520
16- const eventHandlerName = toEventHandlerName ( eventName ) ;
21+ // Do not bubble event to the root element
22+ if ( element . parent === null || element . parent . parent === null ) {
23+ if ( hasHandler ) {
24+ return null ;
25+ } else {
26+ throw new ErrorWithStack (
27+ `No handler function found for event: "${ eventName } "` ,
28+ callsite || invokeEvent
29+ ) ;
30+ }
31+ }
32+
33+ return findEventHandler (
34+ element . parent ,
35+ eventName ,
36+ callsite ,
37+ hostElement ,
38+ hasHandler
39+ ) ;
40+ } ;
1741
18- if ( typeof element . props [ eventHandlerName ] === 'function' && isEventEnabled ) {
42+ const getEventHandler = ( element : ReactTestInstance , eventName : string ) => {
43+ const eventHandlerName = toEventHandlerName ( eventName ) ;
44+ if ( typeof element . props [ eventHandlerName ] === 'function' ) {
1945 return element . props [ eventHandlerName ] ;
20- } else if ( typeof element . props [ eventName ] === 'function' && isEventEnabled ) {
21- return element . props [ eventName ] ;
2246 }
2347
24- // Do not bubble event to the root element
25- if ( element . parent === null || element . parent . parent === null ) {
26- throw new ErrorWithStack (
27- `No handler function found for event: "${ eventName } "` ,
28- callsite || invokeEvent
29- ) ;
48+ if ( typeof element . props [ eventName ] === 'function' ) {
49+ return element . props [ eventName ] ;
3050 }
3151
32- return findEventHandler ( element . parent , eventName , callsite , hostElement ) ;
52+ return undefined ;
3353} ;
3454
3555const invokeEvent = (
0 commit comments