Skip to content

Commit 8e9d2dc

Browse files
committed
adjust for reanimated/animated separation
1 parent 4e718b3 commit 8e9d2dc

File tree

7 files changed

+99
-60
lines changed

7 files changed

+99
-60
lines changed

packages/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/events/RNGestureHandlerEventDispatcher.kt

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ class RNGestureHandlerEventDispatcher(private val reactApplicationContext: React
7979
} else {
8080
EventHandlerType.ForJS
8181
}
82-
8382
val event = RNGestureHandlerEvent.obtain(
8483
handler,
8584
handler.actionType,
@@ -90,10 +89,18 @@ class RNGestureHandlerEventDispatcher(private val reactApplicationContext: React
9089
handler.viewForEvents!!.dispatchEvent(event)
9190
}
9291
GestureHandler.ACTION_TYPE_LOGIC_DETECTOR -> {
92+
val eventHandlerType = if (handler.dispatchesAnimatedEvents) {
93+
EventHandlerType.ForAnimated
94+
} else if (handler.dispatchesReanimatedEvents) {
95+
EventHandlerType.ForReanimated
96+
} else {
97+
EventHandlerType.ForJS
98+
}
9399
val event = RNGestureHandlerEvent.obtain(
94100
handler,
95101
handler.actionType,
96102
handlerFactory.createEventBuilder(handler),
103+
eventHandlerType,
97104
)
98105

99106
handler.parentView?.dispatchEvent(event)
@@ -165,12 +172,19 @@ class RNGestureHandlerEventDispatcher(private val reactApplicationContext: React
165172
}
166173

167174
GestureHandler.ACTION_TYPE_LOGIC_DETECTOR -> {
175+
val eventHandlerType = if (handler.dispatchesReanimatedEvents) {
176+
EventHandlerType.ForReanimated
177+
} else {
178+
EventHandlerType.ForJS
179+
}
180+
168181
val event = RNGestureHandlerStateChangeEvent.obtain(
169182
handler,
170183
newState,
171184
oldState,
172185
handler.actionType,
173186
handlerFactory.createEventBuilder(handler),
187+
eventHandlerType,
174188
)
175189
handler.parentView?.dispatchEvent(event)
176190
}
@@ -219,7 +233,13 @@ class RNGestureHandlerEventDispatcher(private val reactApplicationContext: React
219233
handler.viewForEvents!!.dispatchEvent(event)
220234
}
221235
GestureHandler.ACTION_TYPE_LOGIC_DETECTOR -> {
222-
val event = RNGestureHandlerTouchEvent.obtain(handler, handler.actionType)
236+
val eventHandlerType = if (handler.dispatchesReanimatedEvents) {
237+
EventHandlerType.ForReanimated
238+
} else {
239+
EventHandlerType.ForJS
240+
}
241+
242+
val event = RNGestureHandlerTouchEvent.obtain(handler, handler.actionType, eventHandlerType)
223243

224244
handler.parentView?.dispatchEvent(event)
225245
}

packages/react-native-gesture-handler/apple/RNGestureHandlerManager.mm

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,10 @@ - (void)sendEvent:(RNGestureHandlerStateChange *)event
303303
// but results in a compilation error.
304304
{
305305
switch (actionType) {
306+
case RNGestureHandlerActionTypeLogicDetector: {
307+
NSNumber *parentTag = [[_registry handlerWithTag:event.handlerTag] getParentTag];
308+
detectorView = [self viewForReactTag:parentTag];
309+
}
306310
case RNGestureHandlerActionTypeNativeDetector: {
307311
if ([event isKindOfClass:[RNGestureHandlerEvent class]]) {
308312
switch (eventHandlerType) {
@@ -333,19 +337,6 @@ - (void)sendEvent:(RNGestureHandlerStateChange *)event
333337
}
334338
break;
335339
}
336-
case RNGestureHandlerActionTypeLogicDetector: {
337-
NSNumber *parentTag = [[_registry handlerWithTag:event.handlerTag] getParentTag];
338-
RNGHUIView *parentView = [self viewForReactTag:parentTag];
339-
if ([event isKindOfClass:[RNGestureHandlerEvent class]]) {
340-
RNGestureHandlerEvent *gestureEvent = (RNGestureHandlerEvent *)event;
341-
auto nativeEvent = [gestureEvent getNativeEvent];
342-
[(RNGestureHandlerDetector *)parentView dispatchGestureEvent:nativeEvent];
343-
} else {
344-
auto nativeEvent = [event getNativeEvent];
345-
[(RNGestureHandlerDetector *)parentView dispatchStateChangeEvent:nativeEvent];
346-
}
347-
break;
348-
}
349340

350341
case RNGestureHandlerActionTypeReanimatedWorklet:
351342
[self sendEventForReanimated:event];

packages/react-native-gesture-handler/src/v3/LogicDetector.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ export const LogicDetector = (props: NativeDetectorProps) => {
1414
onGestureHandlerEvent: props.gesture.gestureEvents.onGestureHandlerEvent,
1515
onGestureHandlerTouchEvent:
1616
props.gesture.gestureEvents.onGestureHandlerTouchEvent,
17+
onReanimatedStateChange:
18+
props.gesture.gestureEvents.onReanimatedStateChange,
19+
onReanimatedUpdateEvent:
20+
props.gesture.gestureEvents.onReanimatedUpdateEvent,
21+
onReanimatedTouchEvent: props.gesture.gestureEvents.onReanimatedTouchEvent,
1722
});
1823

1924
useEffect(() => {
@@ -27,6 +32,12 @@ export const LogicDetector = (props: NativeDetectorProps) => {
2732
onGestureHandlerEvent: props.gesture.gestureEvents.onGestureHandlerEvent,
2833
onGestureHandlerTouchEvent:
2934
props.gesture.gestureEvents.onGestureHandlerTouchEvent,
35+
onReanimatedStateChange:
36+
props.gesture.gestureEvents.onReanimatedStateChange,
37+
onReanimatedUpdateEvent:
38+
props.gesture.gestureEvents.onReanimatedUpdateEvent,
39+
onReanimatedTouchEvent:
40+
props.gesture.gestureEvents.onReanimatedTouchEvent,
3041
};
3142
}, [props.gesture.gestureEvents]);
3243

packages/react-native-gesture-handler/src/v3/LogicDetector.web.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ export const LogicDetector = (props: NativeDetectorProps) => {
1313
onGestureHandlerEvent: props.gesture.gestureEvents.onGestureHandlerEvent,
1414
onGestureHandlerTouchEvent:
1515
props.gesture.gestureEvents.onGestureHandlerTouchEvent,
16+
onReanimatedStateChange:
17+
props.gesture.gestureEvents.onReanimatedStateChange,
18+
onReanimatedUpdateEvent:
19+
props.gesture.gestureEvents.onReanimatedUpdateEvent,
20+
onReanimatedTouchEvent: props.gesture.gestureEvents.onReanimatedTouchEvent,
1621
});
1722

1823
useEffect(() => {
@@ -27,6 +32,12 @@ export const LogicDetector = (props: NativeDetectorProps) => {
2732
onGestureHandlerEvent: props.gesture.gestureEvents.onGestureHandlerEvent,
2833
onGestureHandlerTouchEvent:
2934
props.gesture.gestureEvents.onGestureHandlerTouchEvent,
35+
onReanimatedStateChange:
36+
props.gesture.gestureEvents.onReanimatedStateChange,
37+
onReanimatedUpdateEvent:
38+
props.gesture.gestureEvents.onReanimatedUpdateEvent,
39+
onReanimatedTouchEvent:
40+
props.gesture.gestureEvents.onReanimatedTouchEvent,
3041
};
3142
}, [props.gesture.gestureEvents]);
3243

packages/react-native-gesture-handler/src/v3/NativeDetector.tsx

Lines changed: 46 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import React, {
99
import { Reanimated } from '../handlers/gestures/reanimatedWrapper';
1010
import { Animated, StyleSheet } from 'react-native';
1111
import HostGestureDetector from './HostGestureDetector';
12-
import { invokeNullableMethod, tagMessage } from '../utils';
12+
import { tagMessage } from '../utils';
1313
import { LogicDetectorProps, LogicMethods, NativeDetectorProps } from './types';
1414

1515
const AnimatedNativeDetector =
@@ -73,59 +73,62 @@ export function NativeDetector({ gesture, children }: NativeDetectorProps) {
7373
<DetectorContext.Provider value={{ register, unregister }}>
7474
<NativeDetectorComponent
7575
onGestureHandlerStateChange={(e) => {
76-
if (!logicMethods.current.has(e.nativeEvent.handlerTag)) {
77-
invokeNullableMethod(
78-
gesture.gestureEvents.onGestureHandlerStateChange,
79-
e
80-
);
81-
} else {
82-
invokeNullableMethod(
83-
logicMethods.current.get(e.nativeEvent.handlerTag)?.current
84-
?.onGestureHandlerStateChange,
85-
e
86-
);
76+
const method = !logicMethods.current.has(e.nativeEvent.handlerTag)
77+
? gesture.gestureEvents.onGestureHandlerStateChange
78+
: logicMethods.current.get(e.nativeEvent.handlerTag)?.current
79+
?.onGestureHandlerStateChange;
80+
if (method) {
81+
method(e);
8782
}
8883
}}
8984
onGestureHandlerEvent={(e) => {
90-
if (!logicMethods.current.has(e.nativeEvent.handlerTag)) {
91-
invokeNullableMethod(
92-
gesture.gestureEvents.onGestureHandlerEvent,
93-
e
94-
);
95-
} else {
96-
invokeNullableMethod(
97-
logicMethods.current.get(e.nativeEvent.handlerTag)?.current
98-
?.onGestureHandlerEvent,
99-
e
100-
);
85+
const method = !logicMethods.current.has(e.nativeEvent.handlerTag)
86+
? gesture.gestureEvents.onGestureHandlerEvent
87+
: logicMethods.current.get(e.nativeEvent.handlerTag)?.current
88+
?.onGestureHandlerEvent;
89+
if (method) {
90+
method(e);
10191
}
10292
}}
10393
onGestureHandlerAnimatedEvent={
10494
gesture.gestureEvents.onGestureHandlerAnimatedEvent
10595
}
10696
onGestureHandlerTouchEvent={(e) => {
107-
if (!logicMethods.current.has(e.nativeEvent.handlerTag)) {
108-
invokeNullableMethod(
109-
gesture.gestureEvents.onGestureHandlerTouchEvent,
110-
e
111-
);
112-
} else {
113-
invokeNullableMethod(
114-
logicMethods.current.get(e.nativeEvent.handlerTag)?.current
115-
?.onGestureHandlerTouchEvent,
116-
e
117-
);
97+
const method = !logicMethods.current.has(e.nativeEvent.handlerTag)
98+
? gesture.gestureEvents.onGestureHandlerTouchEvent
99+
: logicMethods.current.get(e.nativeEvent.handlerTag)?.current
100+
?.onGestureHandlerTouchEvent;
101+
if (method) {
102+
method(e);
103+
}
104+
}}
105+
onGestureHandlerReanimatedStateChange={(e) => {
106+
const method = !logicMethods.current.has(e.nativeEvent.handlerTag)
107+
? gesture.gestureEvents.onReanimatedStateChange
108+
: logicMethods.current.get(e.nativeEvent.handlerTag)?.current
109+
?.onReanimatedStateChange;
110+
if (method) {
111+
method(e);
112+
}
113+
}}
114+
onGestureHandlerReanimatedEvent={(e) => {
115+
const method = !logicMethods.current.has(e.nativeEvent.handlerTag)
116+
? gesture.gestureEvents.onReanimatedUpdateEvent
117+
: logicMethods.current.get(e.nativeEvent.handlerTag)?.current
118+
?.onReanimatedUpdateEvent;
119+
if (method) {
120+
method(e);
121+
}
122+
}}
123+
onGestureHandlerReanimatedTouchEvent={(e) => {
124+
const method = !logicMethods.current.has(e.nativeEvent.handlerTag)
125+
? gesture.gestureEvents.onReanimatedTouchEvent
126+
: logicMethods.current.get(e.nativeEvent.handlerTag)?.current
127+
?.onReanimatedTouchEvent;
128+
if (method) {
129+
method(e);
118130
}
119131
}}
120-
onGestureHandlerReanimatedStateChange={
121-
gesture.gestureEvents.onReanimatedStateChange
122-
}
123-
onGestureHandlerReanimatedEvent={
124-
gesture.gestureEvents.onReanimatedUpdateEvent
125-
}
126-
onGestureHandlerReanimatedTouchEvent={
127-
gesture.gestureEvents.onReanimatedTouchEvent
128-
}
129132
moduleId={globalThis._RNGH_MODULE_ID}
130133
handlerTags={[gesture.tag]}
131134
style={styles.detector}

packages/react-native-gesture-handler/src/v3/types.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,4 +92,7 @@ export interface LogicMethods {
9292
onGestureHandlerEvent?: (e: any) => void;
9393
onGestureHandlerStateChange?: (e: any) => void;
9494
onGestureHandlerTouchEvent?: (e: any) => void;
95+
onReanimatedStateChange?: (e: any) => void;
96+
onReanimatedUpdateEvent?: (e: any) => void;
97+
onReanimatedTouchEvent?: (e: any) => void;
9598
}

yarn.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6527,7 +6527,7 @@ __metadata:
65276527
jest: "npm:^29.6.3"
65286528
prettier: "npm:3.3.3"
65296529
react-native-gesture-handler: "workspace:*"
6530-
react-native-reanimated: "npm:^3.19.1"
6530+
react-native-reanimated: "npm:^3.18.0"
65316531
react-native-safe-area-context: "npm:^5.4.0"
65326532
react-native-screens: "npm:^4.10.0"
65336533
react-native-svg: "npm:15.11.2"
@@ -14298,7 +14298,7 @@ __metadata:
1429814298
languageName: node
1429914299
linkType: hard
1430014300

14301-
"react-native-reanimated@npm:^3.18.0, react-native-reanimated@npm:^3.19.1":
14301+
"react-native-reanimated@npm:^3.18.0":
1430214302
version: 3.19.1
1430314303
resolution: "react-native-reanimated@npm:3.19.1"
1430414304
dependencies:

0 commit comments

Comments
 (0)