@@ -6,30 +6,50 @@ const findEventHandler = (
6
6
element : ReactTestInstance ,
7
7
eventName : string ,
8
8
callsite ? : any ,
9
- nearestHostDescendent ? : ReactTestInstance
9
+ nearestHostDescendent ? : ReactTestInstance ,
10
+ hasDescendandHandler ? : boolean
10
11
) => {
12
+ const handler = getEventHandler ( element , eventName ) ;
13
+ const hasHandler = handler != null || hasDescendandHandler ;
14
+
11
15
const isHostComponent = typeof element . type === 'string' ;
12
16
const hostElement = isHostComponent ? element : nearestHostDescendent ;
13
17
const isEventEnabled =
14
18
hostElement ?. props . onStartShouldSetResponder ?. ( ) !== false ;
19
+ if ( handler && isEventEnabled ) return handler ;
15
20
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
+ } ;
17
41
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' ) {
19
45
return element . props [ eventHandlerName ] ;
20
- } else if ( typeof element . props [ eventName ] === 'function' && isEventEnabled ) {
21
- return element . props [ eventName ] ;
22
46
}
23
47
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 ] ;
30
50
}
31
51
32
- return findEventHandler ( element . parent , eventName , callsite , hostElement ) ;
52
+ return undefined ;
33
53
} ;
34
54
35
55
const invokeEvent = (
0 commit comments