@@ -8,19 +8,16 @@ import type {
88import type { HostElement } from 'universal-test-renderer' ;
99
1010import act from './act' ;
11- import { getEventHandler , getFiberEventHandler } from './event-handler' ;
11+ import type { EventHandler } from './event-handler' ;
12+ import { getEventHandlerFromProps } from './event-handler' ;
1213import { isElementMounted } from './helpers/component-tree' ;
1314import { isHostScrollView , isHostTextInput } from './helpers/host-component-names' ;
1415import { isPointerEventEnabled } from './helpers/pointer-events' ;
1516import { isEditableTextInput } from './helpers/text-input' ;
1617import { nativeState } from './native-state' ;
1718import type { Point , StringWithAutocomplete } from './types' ;
1819
19- type EventHandler = ( ...args : unknown [ ] ) => unknown ;
20-
21- export function isTouchResponder ( element : HostElement ) {
22- return Boolean ( element . props . onStartShouldSetResponder ) || isHostTextInput ( element ) ;
23- }
20+ type Fiber = HostElement [ 'unstable_fiber' ] ;
2421
2522/**
2623 * List of events affected by `pointerEvents` prop.
@@ -53,31 +50,6 @@ const textInputEventsIgnoringEditableProp = new Set([
5350 'onScroll' ,
5451] ) ;
5552
56- export function isEventEnabled (
57- element : HostElement ,
58- eventName : string ,
59- nearestTouchResponder ?: HostElement ,
60- ) {
61- if ( nearestTouchResponder != null && isHostTextInput ( nearestTouchResponder ) ) {
62- return (
63- isEditableTextInput ( nearestTouchResponder ) ||
64- textInputEventsIgnoringEditableProp . has ( eventName )
65- ) ;
66- }
67-
68- if ( eventsAffectedByPointerEventsProp . has ( eventName ) && ! isPointerEventEnabled ( element ) ) {
69- return false ;
70- }
71-
72- const touchStart = nearestTouchResponder ?. props . onStartShouldSetResponder ?.( ) ;
73- const touchMove = nearestTouchResponder ?. props . onMoveShouldSetResponder ?.( ) ;
74- if ( touchStart || touchMove ) {
75- return true ;
76- }
77-
78- return touchStart === undefined && touchMove === undefined ;
79- }
80-
8153function findEventHandler (
8254 element : HostElement ,
8355 eventName : string ,
@@ -86,8 +58,8 @@ function findEventHandler(
8658 const touchResponder = isTouchResponder ( element ) ? element : nearestTouchResponder ;
8759
8860 const handler =
89- getEventHandler ( element , eventName , { loose : true } ) ??
90- findEventHandlerFromFiber ( element . unstable_fiber , eventName ) ;
61+ getEventHandlerFromProps ( element . props , eventName , { loose : true } ) ??
62+ findEventHandlerFromRelatedFibers ( element . unstable_fiber , eventName ) ;
9163 if ( handler && isEventEnabled ( element , eventName , touchResponder ) ) {
9264 return handler ;
9365 }
@@ -99,14 +71,13 @@ function findEventHandler(
9971 return findEventHandler ( element . parent , eventName , touchResponder ) ;
10072}
10173
102- type Fiber = HostElement [ 'unstable_fiber' ] ;
103-
104- function findEventHandlerFromFiber ( fiber : Fiber , eventName : string ) : EventHandler | null {
105- if ( fiber === null ) {
74+ function findEventHandlerFromRelatedFibers ( fiber : Fiber , eventName : string ) : EventHandler | null {
75+ // Container fibers have memoizedProps set to null
76+ if ( ! fiber ?. memoizedProps ) {
10677 return null ;
10778 }
10879
109- const handler = getFiberEventHandler ( fiber , eventName , { loose : true } ) ;
80+ const handler = getEventHandlerFromProps ( fiber . memoizedProps , eventName , { loose : true } ) ;
11081 if ( handler ) {
11182 return handler ;
11283 }
@@ -116,7 +87,36 @@ function findEventHandlerFromFiber(fiber: Fiber, eventName: string): EventHandle
11687 return null ;
11788 }
11889
119- return findEventHandlerFromFiber ( fiber . return , eventName ) ;
90+ return findEventHandlerFromRelatedFibers ( fiber . return , eventName ) ;
91+ }
92+
93+ export function isEventEnabled (
94+ element : HostElement ,
95+ eventName : string ,
96+ nearestTouchResponder ?: HostElement ,
97+ ) {
98+ if ( nearestTouchResponder != null && isHostTextInput ( nearestTouchResponder ) ) {
99+ return (
100+ isEditableTextInput ( nearestTouchResponder ) ||
101+ textInputEventsIgnoringEditableProp . has ( eventName )
102+ ) ;
103+ }
104+
105+ if ( eventsAffectedByPointerEventsProp . has ( eventName ) && ! isPointerEventEnabled ( element ) ) {
106+ return false ;
107+ }
108+
109+ const touchStart = nearestTouchResponder ?. props . onStartShouldSetResponder ?.( ) ;
110+ const touchMove = nearestTouchResponder ?. props . onMoveShouldSetResponder ?.( ) ;
111+ if ( touchStart || touchMove ) {
112+ return true ;
113+ }
114+
115+ return touchStart === undefined && touchMove === undefined ;
116+ }
117+
118+ export function isTouchResponder ( element : HostElement ) {
119+ return Boolean ( element . props . onStartShouldSetResponder ) || isHostTextInput ( element ) ;
120120}
121121
122122// String union type of keys of T that start with on, stripped of 'on'
0 commit comments