react-native-gesture-handler 2.2.0 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (250) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +5 -1
  3. package/RNGestureHandler.podspec +27 -3
  4. package/android/build.gradle +81 -8
  5. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt +5 -1
  6. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.kt +14 -12
  7. package/android/lib/src/main/java/com/swmansion/gesturehandler/PinchGestureHandler.kt +2 -4
  8. package/android/lib/src/main/java/com/swmansion/gesturehandler/ScaleGestureDetector.java +558 -0
  9. package/android/src/fabric/java/com/swmansion/gesturehandler/RNGestureHandlerComponentsRegistry.java +29 -0
  10. package/android/src/fabric/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +12 -0
  11. package/android/src/main/AndroidManifest.xml +1 -1
  12. package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +29 -0
  13. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +29 -10
  14. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +111 -47
  15. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.kt +9 -4
  16. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +1 -1
  17. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.kt +17 -2
  18. package/android/src/main/jni/Android.mk +53 -0
  19. package/android/src/main/jni/OnLoad.cpp +9 -0
  20. package/android/src/main/jni/RNGestureHandlerComponentsRegistry.cpp +71 -0
  21. package/android/src/main/jni/RNGestureHandlerComponentsRegistry.h +34 -0
  22. package/android/src/main/jni/cpp-adapter.cpp +41 -0
  23. package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +47 -0
  24. package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +22 -0
  25. package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerDelegate.java +25 -0
  26. package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerInterface.java +16 -0
  27. package/android/src/paper/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +13 -0
  28. package/ios/Handlers/RNFlingHandler.m +2 -0
  29. package/ios/Handlers/RNPanHandler.m +2 -0
  30. package/ios/Handlers/RNPinchHandler.m +2 -0
  31. package/ios/Handlers/RNRotationHandler.m +2 -0
  32. package/ios/RNGestureHandler.h +3 -8
  33. package/ios/RNGestureHandler.m +2 -10
  34. package/ios/RNGestureHandlerActionType.h +8 -0
  35. package/ios/RNGestureHandlerButtonComponentView.h +17 -0
  36. package/ios/RNGestureHandlerButtonComponentView.mm +48 -0
  37. package/ios/RNGestureHandlerButtonManager.h +5 -0
  38. package/ios/RNGestureHandlerButtonManager.m +30 -0
  39. package/ios/RNGestureHandlerManager.h +2 -4
  40. package/ios/{RNGestureHandlerManager.m → RNGestureHandlerManager.mm} +92 -20
  41. package/ios/{RNGestureHandlerModule.m → RNGestureHandlerModule.mm} +91 -36
  42. package/ios/RNGestureHandlerRegistry.h +1 -2
  43. package/ios/RNGestureHandlerRegistry.m +2 -11
  44. package/ios/RNGestureHandlerRootViewComponentView.mm +21 -0
  45. package/lib/commonjs/ActionType.js +15 -0
  46. package/lib/commonjs/ActionType.js.map +1 -0
  47. package/lib/commonjs/GestureHandlerRootView.android.js +6 -6
  48. package/lib/commonjs/GestureHandlerRootView.android.js.map +1 -1
  49. package/lib/commonjs/GestureHandlerRootView.js +2 -3
  50. package/lib/commonjs/GestureHandlerRootView.js.map +1 -1
  51. package/lib/commonjs/RNGestureHandlerModule.js +4 -2
  52. package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
  53. package/lib/commonjs/RNGestureHandlerModule.web.js +1 -1
  54. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  55. package/lib/commonjs/components/DrawerLayout.js +2 -2
  56. package/lib/commonjs/components/DrawerLayout.js.map +1 -1
  57. package/lib/commonjs/components/GestureHandlerButton.js +5 -2
  58. package/lib/commonjs/components/GestureHandlerButton.js.map +1 -1
  59. package/lib/commonjs/components/Swipeable.js +22 -20
  60. package/lib/commonjs/components/Swipeable.js.map +1 -1
  61. package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js +21 -0
  62. package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -0
  63. package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js +21 -0
  64. package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -0
  65. package/lib/commonjs/getShadowNodeFromRef.js +24 -0
  66. package/lib/commonjs/getShadowNodeFromRef.js.map +1 -0
  67. package/lib/commonjs/getShadowNodeFromRef.web.js +15 -0
  68. package/lib/commonjs/getShadowNodeFromRef.web.js.map +1 -0
  69. package/lib/commonjs/handlers/FlingGestureHandler.js +4 -2
  70. package/lib/commonjs/handlers/FlingGestureHandler.js.map +1 -1
  71. package/lib/commonjs/handlers/ForceTouchGestureHandler.js +8 -4
  72. package/lib/commonjs/handlers/ForceTouchGestureHandler.js.map +1 -1
  73. package/lib/commonjs/handlers/LongPressGestureHandler.js +4 -2
  74. package/lib/commonjs/handlers/LongPressGestureHandler.js.map +1 -1
  75. package/lib/commonjs/handlers/NativeViewGestureHandler.js +4 -2
  76. package/lib/commonjs/handlers/NativeViewGestureHandler.js.map +1 -1
  77. package/lib/commonjs/handlers/PanGestureHandler.js +4 -2
  78. package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -1
  79. package/lib/commonjs/handlers/PinchGestureHandler.js +4 -2
  80. package/lib/commonjs/handlers/PinchGestureHandler.js.map +1 -1
  81. package/lib/commonjs/handlers/RotationGestureHandler.js +4 -2
  82. package/lib/commonjs/handlers/RotationGestureHandler.js.map +1 -1
  83. package/lib/commonjs/handlers/TapGestureHandler.js +4 -2
  84. package/lib/commonjs/handlers/TapGestureHandler.js.map +1 -1
  85. package/lib/commonjs/handlers/createHandler.js +61 -9
  86. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  87. package/lib/commonjs/handlers/createNativeWrapper.js +6 -2
  88. package/lib/commonjs/handlers/createNativeWrapper.js.map +1 -1
  89. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  90. package/lib/commonjs/handlers/gestures/GestureDetector.js +84 -32
  91. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  92. package/lib/commonjs/handlers/gestures/eventReceiver.js +25 -8
  93. package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -1
  94. package/lib/commonjs/handlers/gestures/forceTouchGesture.js.map +1 -1
  95. package/lib/commonjs/handlers/gestures/gesture.js +16 -1
  96. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  97. package/lib/commonjs/handlers/gestures/gestureStateManager.js +7 -4
  98. package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -1
  99. package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -1
  100. package/lib/commonjs/handlers/gestures/pinchGesture.js.map +1 -1
  101. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +4 -1
  102. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -1
  103. package/lib/commonjs/handlers/handlersRegistry.js +42 -6
  104. package/lib/commonjs/handlers/handlersRegistry.js.map +1 -1
  105. package/lib/commonjs/index.js +14 -0
  106. package/lib/commonjs/index.js.map +1 -1
  107. package/lib/commonjs/init.js +10 -0
  108. package/lib/commonjs/init.js.map +1 -1
  109. package/lib/commonjs/jestUtils.js +375 -0
  110. package/lib/commonjs/jestUtils.js.map +1 -0
  111. package/lib/commonjs/utils.js +38 -0
  112. package/lib/commonjs/utils.js.map +1 -1
  113. package/lib/module/ActionType.js +7 -0
  114. package/lib/module/ActionType.js.map +1 -0
  115. package/lib/module/GestureHandlerRootView.android.js +5 -6
  116. package/lib/module/GestureHandlerRootView.android.js.map +1 -1
  117. package/lib/module/GestureHandlerRootView.js +2 -3
  118. package/lib/module/GestureHandlerRootView.js.map +1 -1
  119. package/lib/module/RNGestureHandlerModule.js +3 -2
  120. package/lib/module/RNGestureHandlerModule.js.map +1 -1
  121. package/lib/module/RNGestureHandlerModule.web.js +1 -1
  122. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  123. package/lib/module/components/DrawerLayout.js +2 -2
  124. package/lib/module/components/DrawerLayout.js.map +1 -1
  125. package/lib/module/components/GestureHandlerButton.js +4 -2
  126. package/lib/module/components/GestureHandlerButton.js.map +1 -1
  127. package/lib/module/components/Swipeable.js +22 -20
  128. package/lib/module/components/Swipeable.js.map +1 -1
  129. package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js +9 -0
  130. package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -0
  131. package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js +9 -0
  132. package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -0
  133. package/lib/module/getShadowNodeFromRef.js +17 -0
  134. package/lib/module/getShadowNodeFromRef.js.map +1 -0
  135. package/lib/module/getShadowNodeFromRef.web.js +8 -0
  136. package/lib/module/getShadowNodeFromRef.web.js.map +1 -0
  137. package/lib/module/handlers/FlingGestureHandler.js +2 -1
  138. package/lib/module/handlers/FlingGestureHandler.js.map +1 -1
  139. package/lib/module/handlers/ForceTouchGestureHandler.js +5 -3
  140. package/lib/module/handlers/ForceTouchGestureHandler.js.map +1 -1
  141. package/lib/module/handlers/LongPressGestureHandler.js +2 -1
  142. package/lib/module/handlers/LongPressGestureHandler.js.map +1 -1
  143. package/lib/module/handlers/NativeViewGestureHandler.js +2 -1
  144. package/lib/module/handlers/NativeViewGestureHandler.js.map +1 -1
  145. package/lib/module/handlers/PanGestureHandler.js +2 -1
  146. package/lib/module/handlers/PanGestureHandler.js.map +1 -1
  147. package/lib/module/handlers/PinchGestureHandler.js +2 -1
  148. package/lib/module/handlers/PinchGestureHandler.js.map +1 -1
  149. package/lib/module/handlers/RotationGestureHandler.js +2 -1
  150. package/lib/module/handlers/RotationGestureHandler.js.map +1 -1
  151. package/lib/module/handlers/TapGestureHandler.js +2 -1
  152. package/lib/module/handlers/TapGestureHandler.js.map +1 -1
  153. package/lib/module/handlers/createHandler.js +60 -10
  154. package/lib/module/handlers/createHandler.js.map +1 -1
  155. package/lib/module/handlers/createNativeWrapper.js +6 -2
  156. package/lib/module/handlers/createNativeWrapper.js.map +1 -1
  157. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  158. package/lib/module/handlers/gestures/GestureDetector.js +79 -32
  159. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  160. package/lib/module/handlers/gestures/eventReceiver.js +25 -7
  161. package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
  162. package/lib/module/handlers/gestures/forceTouchGesture.js.map +1 -1
  163. package/lib/module/handlers/gestures/gesture.js +16 -1
  164. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  165. package/lib/module/handlers/gestures/gestureStateManager.js +6 -4
  166. package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -1
  167. package/lib/module/handlers/gestures/panGesture.js.map +1 -1
  168. package/lib/module/handlers/gestures/pinchGesture.js.map +1 -1
  169. package/lib/module/handlers/gestures/reanimatedWrapper.js +2 -1
  170. package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -1
  171. package/lib/module/handlers/handlersRegistry.js +34 -6
  172. package/lib/module/handlers/handlersRegistry.js.map +1 -1
  173. package/lib/module/index.js +1 -0
  174. package/lib/module/index.js.map +1 -1
  175. package/lib/module/init.js +6 -0
  176. package/lib/module/init.js.map +1 -1
  177. package/lib/module/jestUtils.js +350 -0
  178. package/lib/module/jestUtils.js.map +1 -0
  179. package/lib/module/utils.js +28 -0
  180. package/lib/module/utils.js.map +1 -1
  181. package/lib/typescript/ActionType.d.ts +7 -0
  182. package/lib/typescript/GestureHandlerRootView.android.d.ts +5 -2
  183. package/lib/typescript/GestureHandlerRootView.d.ts +1 -1
  184. package/lib/typescript/RNGestureHandlerModule.d.ts +3 -1
  185. package/lib/typescript/RNGestureHandlerModule.web.d.ts +2 -1
  186. package/lib/typescript/components/GestureHandlerButton.d.ts +2 -2
  187. package/lib/typescript/components/Swipeable.d.ts +12 -4
  188. package/lib/typescript/getShadowNodeFromRef.d.ts +1 -0
  189. package/lib/typescript/getShadowNodeFromRef.web.d.ts +1 -0
  190. package/lib/typescript/handlers/FlingGestureHandler.d.ts +1 -0
  191. package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +2 -1
  192. package/lib/typescript/handlers/LongPressGestureHandler.d.ts +1 -0
  193. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -0
  194. package/lib/typescript/handlers/PanGestureHandler.d.ts +1 -0
  195. package/lib/typescript/handlers/PinchGestureHandler.d.ts +1 -0
  196. package/lib/typescript/handlers/RotationGestureHandler.d.ts +1 -0
  197. package/lib/typescript/handlers/TapGestureHandler.d.ts +1 -0
  198. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +2 -4
  199. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +4 -1
  200. package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +1 -2
  201. package/lib/typescript/handlers/gestures/gesture.d.ts +5 -0
  202. package/lib/typescript/handlers/gestures/panGesture.d.ts +1 -2
  203. package/lib/typescript/handlers/gestures/pinchGesture.d.ts +1 -2
  204. package/lib/typescript/handlers/handlersRegistry.d.ts +11 -3
  205. package/lib/typescript/index.d.ts +4 -0
  206. package/lib/typescript/jestUtils.d.ts +28 -0
  207. package/lib/typescript/utils.d.ts +6 -0
  208. package/lib/typescript/web/constants.d.ts +0 -1
  209. package/package.json +39 -16
  210. package/src/ActionType.ts +9 -0
  211. package/src/GestureHandlerRootView.android.tsx +14 -14
  212. package/src/GestureHandlerRootView.tsx +4 -4
  213. package/src/RNGestureHandlerModule.ts +11 -6
  214. package/src/RNGestureHandlerModule.web.ts +2 -1
  215. package/src/components/DrawerLayout.tsx +8 -2
  216. package/src/components/GestureHandlerButton.tsx +7 -4
  217. package/src/components/Swipeable.tsx +28 -22
  218. package/src/fabric/RNGestureHandlerButtonNativeComponent.js +27 -0
  219. package/src/fabric/RNGestureHandlerRootViewNativeComponent.js +19 -0
  220. package/src/getShadowNodeFromRef.ts +19 -0
  221. package/src/getShadowNodeFromRef.web.ts +7 -0
  222. package/src/handlers/FlingGestureHandler.ts +3 -1
  223. package/src/handlers/ForceTouchGestureHandler.ts +8 -2
  224. package/src/handlers/LongPressGestureHandler.ts +3 -1
  225. package/src/handlers/NativeViewGestureHandler.ts +3 -1
  226. package/src/handlers/PanGestureHandler.ts +3 -1
  227. package/src/handlers/PinchGestureHandler.ts +3 -1
  228. package/src/handlers/RotationGestureHandler.ts +3 -1
  229. package/src/handlers/TapGestureHandler.ts +3 -1
  230. package/src/handlers/createHandler.ts +69 -7
  231. package/src/handlers/createNativeWrapper.tsx +7 -1
  232. package/src/handlers/gestureHandlerCommon.ts +2 -5
  233. package/src/handlers/gestures/GestureDetector.tsx +110 -37
  234. package/src/handlers/gestures/eventReceiver.ts +23 -19
  235. package/src/handlers/gestures/forceTouchGesture.ts +1 -1
  236. package/src/handlers/gestures/gesture.ts +21 -1
  237. package/src/handlers/gestures/gestureStateManager.ts +9 -12
  238. package/src/handlers/gestures/panGesture.ts +1 -1
  239. package/src/handlers/gestures/pinchGesture.ts +1 -1
  240. package/src/handlers/gestures/reanimatedWrapper.ts +4 -1
  241. package/src/handlers/handlersRegistry.ts +44 -6
  242. package/src/index.ts +4 -0
  243. package/src/init.ts +6 -0
  244. package/src/jestUtils.ts +506 -0
  245. package/src/utils.ts +38 -0
  246. package/android/lib/src/main/java/com/swmansion/gesturehandler/BaseGestureHandlerInteractionController.kt +0 -18
  247. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistryImpl.kt +0 -21
  248. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerPackage.kt +0 -17
  249. package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  250. package/ios/RNGestureHandler.xcodeproj/xcuserdata/jakubpiasecki.xcuserdatad/xcschemes/xcschememanagement.plist +0 -19
@@ -7,32 +7,29 @@ import {
7
7
  GestureStateChangeEvent,
8
8
  } from '../gestureHandlerCommon';
9
9
  import { GestureStateManagerType } from './gestureStateManager';
10
- import { findHandler } from '../handlersRegistry';
10
+ import { findHandler, findOldGestureHandler } from '../handlersRegistry';
11
11
  import { BaseGesture } from './gesture';
12
+ import { tagMessage } from '../../utils';
12
13
 
13
14
  let gestureHandlerEventSubscription: EmitterSubscription | null = null;
14
15
  let gestureHandlerStateChangeEventSubscription: EmitterSubscription | null = null;
15
16
 
17
+ const warningMessage = tagMessage(
18
+ 'You have to use react-native-reanimated in order to control the state of the gesture.'
19
+ );
20
+
16
21
  const dummyStateManager: GestureStateManagerType = {
17
22
  begin: () => {
18
- console.warn(
19
- 'You have to use react-native-reanimated in order to control the state of the gesture.'
20
- );
23
+ console.warn(warningMessage);
21
24
  },
22
25
  activate: () => {
23
- console.warn(
24
- 'You have to use react-native-reanimated in order to control the state of the gesture.'
25
- );
26
+ console.warn(warningMessage);
26
27
  },
27
28
  end: () => {
28
- console.warn(
29
- 'You have to use react-native-reanimated in order to control the state of the gesture.'
30
- );
29
+ console.warn(warningMessage);
31
30
  },
32
31
  fail: () => {
33
- console.warn(
34
- 'You have to use react-native-reanimated in order to control the state of the gesture.'
35
- );
32
+ console.warn(warningMessage);
36
33
  },
37
34
  };
38
35
 
@@ -117,6 +114,17 @@ function onGestureHandlerEvent(
117
114
  lastUpdateEvent[handler.handlers.handlerTag] = event;
118
115
  }
119
116
  }
117
+ } else {
118
+ const oldHandler = findOldGestureHandler(event.handlerTag);
119
+ if (oldHandler) {
120
+ const nativeEvent = { nativeEvent: event };
121
+ if (isStateChangeEvent(event)) {
122
+ oldHandler.onGestureStateChange(nativeEvent);
123
+ } else {
124
+ oldHandler.onGestureEvent(nativeEvent);
125
+ }
126
+ return;
127
+ }
120
128
  }
121
129
  }
122
130
 
@@ -136,16 +144,12 @@ export function startListening() {
136
144
 
137
145
  export function stopListening() {
138
146
  if (gestureHandlerEventSubscription) {
139
- DeviceEventEmitter.removeSubscription(gestureHandlerEventSubscription);
140
-
147
+ gestureHandlerEventSubscription.remove();
141
148
  gestureHandlerEventSubscription = null;
142
149
  }
143
150
 
144
151
  if (gestureHandlerStateChangeEventSubscription) {
145
- DeviceEventEmitter.removeSubscription(
146
- gestureHandlerStateChangeEventSubscription
147
- );
148
-
152
+ gestureHandlerStateChangeEventSubscription.remove();
149
153
  gestureHandlerStateChangeEventSubscription = null;
150
154
  }
151
155
  }
@@ -5,7 +5,7 @@ import {
5
5
  } from '../ForceTouchGestureHandler';
6
6
  import { GestureUpdateEvent } from '../gestureHandlerCommon';
7
7
 
8
- type ForceTouchGestureChangeEventPayload = {
8
+ export type ForceTouchGestureChangeEventPayload = {
9
9
  forceChange: number;
10
10
  };
11
11
 
@@ -41,6 +41,8 @@ export interface BaseGestureConfig
41
41
  simultaneousWith?: GestureRef[];
42
42
  needsPointerData?: boolean;
43
43
  manualActivation?: boolean;
44
+ runOnJS?: boolean;
45
+ testId?: string;
44
46
  }
45
47
 
46
48
  type TouchEventHandlerType = (
@@ -119,7 +121,7 @@ export abstract class BaseGesture<
119
121
  public config: BaseGestureConfig = {};
120
122
  public handlers: HandlerCallbacks<EventPayloadT> = {
121
123
  handlerTag: -1,
122
- isWorklet: [false, false, false, false],
124
+ isWorklet: [],
123
125
  };
124
126
 
125
127
  private addDependency(
@@ -234,6 +236,11 @@ export abstract class BaseGesture<
234
236
  return this;
235
237
  }
236
238
 
239
+ runOnJS(runOnJS: boolean) {
240
+ this.config.runOnJS = runOnJS;
241
+ return this;
242
+ }
243
+
237
244
  simultaneousWithExternalGesture(...gestures: Exclude<GestureRef, number>[]) {
238
245
  for (const gesture of gestures) {
239
246
  this.addDependency('simultaneousWith', gesture);
@@ -248,8 +255,14 @@ export abstract class BaseGesture<
248
255
  return this;
249
256
  }
250
257
 
258
+ withTestId(id: string) {
259
+ this.config.testId = id;
260
+ return this;
261
+ }
262
+
251
263
  initialize() {
252
264
  this.handlerTag = getNextHandlerTag();
265
+
253
266
  this.handlers = { ...this.handlers, handlerTag: this.handlerTag };
254
267
 
255
268
  if (this.config.ref) {
@@ -263,6 +276,13 @@ export abstract class BaseGesture<
263
276
 
264
277
  // eslint-disable-next-line @typescript-eslint/no-empty-function
265
278
  prepare() {}
279
+
280
+ get shouldUseReanimated(): boolean {
281
+ // use Reanimated when runOnJS isn't set explicitly and all defined callbacks are worklets
282
+ return (
283
+ this.config.runOnJS !== true && !this.handlers.isWorklet.includes(false)
284
+ );
285
+ }
266
286
  }
267
287
 
268
288
  export abstract class ContinousBaseGesture<
@@ -1,5 +1,6 @@
1
1
  import { Reanimated } from './reanimatedWrapper';
2
2
  import { State } from '../../State';
3
+ import { tagMessage } from '../../utils';
3
4
 
4
5
  export interface GestureStateManagerType {
5
6
  begin: () => void;
@@ -8,6 +9,10 @@ export interface GestureStateManagerType {
8
9
  end: () => void;
9
10
  }
10
11
 
12
+ const warningMessage = tagMessage(
13
+ 'react-native-reanimated is required in order to use synchronous state management'
14
+ );
15
+
11
16
  export const GestureStateManager = {
12
17
  create(handlerTag: number): GestureStateManagerType {
13
18
  'worklet';
@@ -17,9 +22,7 @@ export const GestureStateManager = {
17
22
  if (Reanimated) {
18
23
  Reanimated.setGestureState(handlerTag, State.BEGAN);
19
24
  } else {
20
- console.warn(
21
- 'react-native-reanimated is required in order to use synchronous state management'
22
- );
25
+ console.warn(warningMessage);
23
26
  }
24
27
  },
25
28
 
@@ -28,9 +31,7 @@ export const GestureStateManager = {
28
31
  if (Reanimated) {
29
32
  Reanimated.setGestureState(handlerTag, State.ACTIVE);
30
33
  } else {
31
- console.warn(
32
- 'react-native-reanimated is required in order to use synchronous state management'
33
- );
34
+ console.warn(warningMessage);
34
35
  }
35
36
  },
36
37
 
@@ -39,9 +40,7 @@ export const GestureStateManager = {
39
40
  if (Reanimated) {
40
41
  Reanimated.setGestureState(handlerTag, State.FAILED);
41
42
  } else {
42
- console.warn(
43
- 'react-native-reanimated is required in order to use synchronous state management'
44
- );
43
+ console.warn(warningMessage);
45
44
  }
46
45
  },
47
46
 
@@ -50,9 +49,7 @@ export const GestureStateManager = {
50
49
  if (Reanimated) {
51
50
  Reanimated.setGestureState(handlerTag, State.END);
52
51
  } else {
53
- console.warn(
54
- 'react-native-reanimated is required in order to use synchronous state management'
55
- );
52
+ console.warn(warningMessage);
56
53
  }
57
54
  },
58
55
  };
@@ -5,7 +5,7 @@ import {
5
5
  PanGestureHandlerEventPayload,
6
6
  } from '../PanGestureHandler';
7
7
 
8
- type PanGestureChangeEventPayload = {
8
+ export type PanGestureChangeEventPayload = {
9
9
  changeX: number;
10
10
  changeY: number;
11
11
  };
@@ -2,7 +2,7 @@ import { ContinousBaseGesture } from './gesture';
2
2
  import { PinchGestureHandlerEventPayload } from '../PinchGestureHandler';
3
3
  import { GestureUpdateEvent } from '../gestureHandlerCommon';
4
4
 
5
- type PinchGestureChangeEventPayload = {
5
+ export type PinchGestureChangeEventPayload = {
6
6
  scaleChange: number;
7
7
  };
8
8
 
@@ -3,6 +3,7 @@ import {
3
3
  GestureUpdateEvent,
4
4
  GestureStateChangeEvent,
5
5
  } from '../gestureHandlerCommon';
6
+ import { tagMessage } from '../../utils';
6
7
 
7
8
  export interface SharedValue<T> {
8
9
  value: T;
@@ -33,7 +34,9 @@ try {
33
34
  Reanimated.setGestureState = () => {
34
35
  'worklet';
35
36
  console.warn(
36
- 'Please use newer version of react-native-reanimated in order to control state of the gestures.'
37
+ tagMessage(
38
+ 'Please use newer version of react-native-reanimated in order to control state of the gestures.'
39
+ )
37
40
  );
38
41
  };
39
42
  }
@@ -1,7 +1,11 @@
1
+ import { isJestEnv } from '../utils';
1
2
  import { GestureType } from './gestures/gesture';
3
+ import { GestureEvent, HandlerStateChangeEvent } from './gestureHandlerCommon';
2
4
 
3
5
  export const handlerIDToTag: Record<string, number> = {};
4
- const handlers = new Map<number, GestureType>();
6
+ const gestures = new Map<number, GestureType>();
7
+ const oldHandlers = new Map<number, GestureHandlerCallbacks>();
8
+ const testIDs = new Map<string, number>();
5
9
 
6
10
  let handlerTag = 1;
7
11
 
@@ -9,14 +13,48 @@ export function getNextHandlerTag(): number {
9
13
  return handlerTag++;
10
14
  }
11
15
 
12
- export function registerHandler(handlerTag: number, handler: GestureType) {
13
- handlers.set(handlerTag, handler);
16
+ export function registerHandler(
17
+ handlerTag: number,
18
+ handler: GestureType,
19
+ testID?: string
20
+ ) {
21
+ gestures.set(handlerTag, handler);
22
+ if (isJestEnv() && testID) {
23
+ testIDs.set(testID, handlerTag);
24
+ }
14
25
  }
15
26
 
16
- export function unregisterHandler(handlerTag: number) {
17
- handlers.delete(handlerTag);
27
+ export function registerOldGestureHandler(
28
+ handlerTag: number,
29
+ handler: GestureHandlerCallbacks
30
+ ) {
31
+ oldHandlers.set(handlerTag, handler);
32
+ }
33
+
34
+ export function unregisterHandler(handlerTag: number, testID?: string) {
35
+ gestures.delete(handlerTag);
36
+ if (isJestEnv() && testID) {
37
+ testIDs.delete(testID);
38
+ }
18
39
  }
19
40
 
20
41
  export function findHandler(handlerTag: number) {
21
- return handlers.get(handlerTag);
42
+ return gestures.get(handlerTag);
43
+ }
44
+
45
+ export function findOldGestureHandler(handlerTag: number) {
46
+ return oldHandlers.get(handlerTag);
47
+ }
48
+
49
+ export function findHandlerByTestID(testID: string) {
50
+ const handlerTag = testIDs.get(testID);
51
+ if (handlerTag !== undefined) {
52
+ return findHandler(handlerTag) ?? null;
53
+ }
54
+ return null;
55
+ }
56
+
57
+ export interface GestureHandlerCallbacks {
58
+ onGestureEvent: (event: GestureEvent<any>) => void;
59
+ onGestureStateChange: (event: HandlerStateChangeEvent<any>) => void;
22
60
  }
package/src/index.ts CHANGED
@@ -2,6 +2,7 @@ import { initialize } from './init';
2
2
 
3
3
  export { Directions } from './Directions';
4
4
  export { State } from './State';
5
+ export { getByGestureTestId, fireGestureHandler } from './jestUtils';
5
6
  export { default as gestureHandlerRootHOC } from './gestureHandlerRootHOC';
6
7
  export { default as GestureHandlerRootView } from './GestureHandlerRootView';
7
8
  export type {
@@ -27,6 +28,7 @@ export type {
27
28
  ForceTouchGestureHandlerEventPayload,
28
29
  ForceTouchGestureHandlerProps,
29
30
  } from './handlers/ForceTouchGestureHandler';
31
+ export type { ForceTouchGestureChangeEventPayload } from './handlers/gestures/forceTouchGesture';
30
32
  export type {
31
33
  LongPressGestureHandlerEventPayload,
32
34
  LongPressGestureHandlerProps,
@@ -35,10 +37,12 @@ export type {
35
37
  PanGestureHandlerEventPayload,
36
38
  PanGestureHandlerProps,
37
39
  } from './handlers/PanGestureHandler';
40
+ export type { PanGestureChangeEventPayload } from './handlers/gestures/panGesture';
38
41
  export type {
39
42
  PinchGestureHandlerEventPayload,
40
43
  PinchGestureHandlerProps,
41
44
  } from './handlers/PinchGestureHandler';
45
+ export type { PinchGestureChangeEventPayload } from './handlers/gestures/pinchGesture';
42
46
  export type {
43
47
  RotationGestureHandlerEventPayload,
44
48
  RotationGestureHandlerProps,
package/src/init.ts CHANGED
@@ -1,5 +1,11 @@
1
1
  import { startListening } from './handlers/gestures/eventReceiver';
2
+ import RNGestureHandlerModule from './RNGestureHandlerModule';
3
+ import { isFabric } from './utils';
2
4
 
3
5
  export function initialize() {
4
6
  startListening();
7
+
8
+ if (isFabric()) {
9
+ RNGestureHandlerModule.install();
10
+ }
5
11
  }