react-native-gesture-handler 2.1.2 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +8 -3
- package/RNGestureHandler.podspec +27 -3
- package/android/build.gradle +82 -9
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt +47 -12
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.kt +50 -14
- package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt +7 -4
- package/android/lib/src/main/java/com/swmansion/gesturehandler/PinchGestureHandler.kt +8 -8
- package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureHandler.kt +6 -4
- package/android/lib/src/main/java/com/swmansion/gesturehandler/ScaleGestureDetector.java +558 -0
- package/android/src/fabric/java/com/swmansion/gesturehandler/RNGestureHandlerComponentsRegistry.java +29 -0
- package/android/src/fabric/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +12 -0
- package/android/src/main/AndroidManifest.xml +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +29 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +29 -10
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +119 -55
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.kt +9 -4
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.kt +17 -2
- package/android/src/main/jni/Android.mk +53 -0
- package/android/src/main/jni/OnLoad.cpp +9 -0
- package/android/src/main/jni/RNGestureHandlerComponentsRegistry.cpp +71 -0
- package/android/src/main/jni/RNGestureHandlerComponentsRegistry.h +34 -0
- package/android/src/main/jni/cpp-adapter.cpp +41 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +47 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +22 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerDelegate.java +25 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerInterface.java +16 -0
- package/android/src/paper/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +13 -0
- package/ios/Handlers/RNFlingHandler.m +2 -0
- package/ios/Handlers/RNPanHandler.m +2 -0
- package/ios/Handlers/RNPinchHandler.m +2 -0
- package/ios/Handlers/RNRotationHandler.m +2 -0
- package/ios/RNGestureHandler.h +3 -8
- package/ios/RNGestureHandler.m +2 -10
- package/ios/RNGestureHandlerActionType.h +8 -0
- package/ios/RNGestureHandlerButtonComponentView.h +17 -0
- package/ios/RNGestureHandlerButtonComponentView.mm +48 -0
- package/ios/RNGestureHandlerButtonManager.h +5 -0
- package/ios/RNGestureHandlerButtonManager.m +30 -0
- package/ios/RNGestureHandlerManager.h +2 -4
- package/ios/{RNGestureHandlerManager.m → RNGestureHandlerManager.mm} +92 -20
- package/ios/{RNGestureHandlerModule.m → RNGestureHandlerModule.mm} +91 -36
- package/ios/RNGestureHandlerRegistry.h +1 -2
- package/ios/RNGestureHandlerRegistry.m +2 -11
- package/ios/RNGestureHandlerRootViewComponentView.mm +21 -0
- package/lib/commonjs/ActionType.js +15 -0
- package/lib/commonjs/ActionType.js.map +1 -0
- package/lib/commonjs/GestureHandlerRootView.android.js +6 -6
- package/lib/commonjs/GestureHandlerRootView.android.js.map +1 -1
- package/lib/commonjs/GestureHandlerRootView.js +2 -3
- package/lib/commonjs/GestureHandlerRootView.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.js +4 -2
- package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.web.js +1 -1
- package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/commonjs/components/DrawerLayout.js +2 -2
- package/lib/commonjs/components/DrawerLayout.js.map +1 -1
- package/lib/commonjs/components/GestureHandlerButton.js +5 -2
- package/lib/commonjs/components/GestureHandlerButton.js.map +1 -1
- package/lib/commonjs/components/Swipeable.js +22 -20
- package/lib/commonjs/components/Swipeable.js.map +1 -1
- package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js +21 -0
- package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js +21 -0
- package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -0
- package/lib/commonjs/getShadowNodeFromRef.js +24 -0
- package/lib/commonjs/getShadowNodeFromRef.js.map +1 -0
- package/lib/commonjs/getShadowNodeFromRef.web.js +15 -0
- package/lib/commonjs/getShadowNodeFromRef.web.js.map +1 -0
- package/lib/commonjs/handlers/FlingGestureHandler.js +4 -2
- package/lib/commonjs/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/ForceTouchGestureHandler.js +8 -4
- package/lib/commonjs/handlers/ForceTouchGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/LongPressGestureHandler.js +4 -2
- package/lib/commonjs/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/NativeViewGestureHandler.js +4 -2
- package/lib/commonjs/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/PanGestureHandler.js +4 -2
- package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/PinchGestureHandler.js +4 -2
- package/lib/commonjs/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/RotationGestureHandler.js +4 -2
- package/lib/commonjs/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/TapGestureHandler.js +4 -2
- package/lib/commonjs/handlers/TapGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/createHandler.js +72 -8
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/createNativeWrapper.js +6 -2
- package/lib/commonjs/handlers/createNativeWrapper.js.map +1 -1
- package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector.js +84 -32
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/commonjs/handlers/gestures/eventReceiver.js +25 -8
- package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -1
- package/lib/commonjs/handlers/gestures/forceTouchGesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gesture.js +16 -1
- package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gestureStateManager.js +7 -4
- package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -1
- package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/pinchGesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +4 -1
- package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -1
- package/lib/commonjs/handlers/handlersRegistry.js +42 -6
- package/lib/commonjs/handlers/handlersRegistry.js.map +1 -1
- package/lib/commonjs/index.js +14 -106
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/init.js +10 -0
- package/lib/commonjs/init.js.map +1 -1
- package/lib/commonjs/jestUtils.js +375 -0
- package/lib/commonjs/jestUtils.js.map +1 -0
- package/lib/commonjs/utils.js +38 -0
- package/lib/commonjs/utils.js.map +1 -1
- package/lib/module/ActionType.js +7 -0
- package/lib/module/ActionType.js.map +1 -0
- package/lib/module/GestureHandlerRootView.android.js +5 -6
- package/lib/module/GestureHandlerRootView.android.js.map +1 -1
- package/lib/module/GestureHandlerRootView.js +2 -3
- package/lib/module/GestureHandlerRootView.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.js +3 -2
- package/lib/module/RNGestureHandlerModule.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.web.js +1 -1
- package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/module/components/DrawerLayout.js +2 -2
- package/lib/module/components/DrawerLayout.js.map +1 -1
- package/lib/module/components/GestureHandlerButton.js +4 -2
- package/lib/module/components/GestureHandlerButton.js.map +1 -1
- package/lib/module/components/Swipeable.js +22 -20
- package/lib/module/components/Swipeable.js.map +1 -1
- package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js +9 -0
- package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -0
- package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js +9 -0
- package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -0
- package/lib/module/getShadowNodeFromRef.js +17 -0
- package/lib/module/getShadowNodeFromRef.js.map +1 -0
- package/lib/module/getShadowNodeFromRef.web.js +8 -0
- package/lib/module/getShadowNodeFromRef.web.js.map +1 -0
- package/lib/module/handlers/FlingGestureHandler.js +2 -1
- package/lib/module/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/module/handlers/ForceTouchGestureHandler.js +5 -3
- package/lib/module/handlers/ForceTouchGestureHandler.js.map +1 -1
- package/lib/module/handlers/LongPressGestureHandler.js +2 -1
- package/lib/module/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/module/handlers/NativeViewGestureHandler.js +2 -1
- package/lib/module/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/module/handlers/PanGestureHandler.js +2 -1
- package/lib/module/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/handlers/PinchGestureHandler.js +2 -1
- package/lib/module/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/module/handlers/RotationGestureHandler.js +2 -1
- package/lib/module/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/module/handlers/TapGestureHandler.js +2 -1
- package/lib/module/handlers/TapGestureHandler.js.map +1 -1
- package/lib/module/handlers/createHandler.js +72 -9
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/createNativeWrapper.js +6 -2
- package/lib/module/handlers/createNativeWrapper.js.map +1 -1
- package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector.js +79 -32
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/module/handlers/gestures/eventReceiver.js +25 -7
- package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
- package/lib/module/handlers/gestures/forceTouchGesture.js.map +1 -1
- package/lib/module/handlers/gestures/gesture.js +16 -1
- package/lib/module/handlers/gestures/gesture.js.map +1 -1
- package/lib/module/handlers/gestures/gestureStateManager.js +6 -4
- package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -1
- package/lib/module/handlers/gestures/panGesture.js.map +1 -1
- package/lib/module/handlers/gestures/pinchGesture.js.map +1 -1
- package/lib/module/handlers/gestures/reanimatedWrapper.js +2 -1
- package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -1
- package/lib/module/handlers/handlersRegistry.js +34 -6
- package/lib/module/handlers/handlersRegistry.js.map +1 -1
- package/lib/module/index.js +1 -11
- package/lib/module/index.js.map +1 -1
- package/lib/module/init.js +6 -0
- package/lib/module/init.js.map +1 -1
- package/lib/module/jestUtils.js +350 -0
- package/lib/module/jestUtils.js.map +1 -0
- package/lib/module/utils.js +28 -0
- package/lib/module/utils.js.map +1 -1
- package/lib/typescript/ActionType.d.ts +7 -0
- package/lib/typescript/GestureHandlerRootView.android.d.ts +5 -2
- package/lib/typescript/GestureHandlerRootView.d.ts +1 -1
- package/lib/typescript/RNGestureHandlerModule.d.ts +3 -1
- package/lib/typescript/RNGestureHandlerModule.web.d.ts +2 -1
- package/lib/typescript/components/GestureHandlerButton.d.ts +2 -2
- package/lib/typescript/components/Swipeable.d.ts +12 -4
- package/lib/typescript/getShadowNodeFromRef.d.ts +1 -0
- package/lib/typescript/getShadowNodeFromRef.web.d.ts +1 -0
- package/lib/typescript/handlers/FlingGestureHandler.d.ts +1 -0
- package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +2 -1
- package/lib/typescript/handlers/LongPressGestureHandler.d.ts +3 -2
- package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -0
- package/lib/typescript/handlers/PanGestureHandler.d.ts +3 -2
- package/lib/typescript/handlers/PinchGestureHandler.d.ts +1 -0
- package/lib/typescript/handlers/RotationGestureHandler.d.ts +1 -0
- package/lib/typescript/handlers/TapGestureHandler.d.ts +1 -0
- package/lib/typescript/handlers/gestureHandlerCommon.d.ts +2 -4
- package/lib/typescript/handlers/gestures/GestureDetector.d.ts +4 -1
- package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +1 -2
- package/lib/typescript/handlers/gestures/gesture.d.ts +5 -0
- package/lib/typescript/handlers/gestures/panGesture.d.ts +1 -2
- package/lib/typescript/handlers/gestures/pinchGesture.d.ts +1 -2
- package/lib/typescript/handlers/handlersRegistry.d.ts +11 -3
- package/lib/typescript/index.d.ts +15 -11
- package/lib/typescript/jestUtils.d.ts +28 -0
- package/lib/typescript/utils.d.ts +6 -0
- package/lib/typescript/web/constants.d.ts +0 -1
- package/package.json +39 -16
- package/src/ActionType.ts +9 -0
- package/src/GestureHandlerRootView.android.tsx +14 -14
- package/src/GestureHandlerRootView.tsx +4 -4
- package/src/RNGestureHandlerModule.ts +11 -6
- package/src/RNGestureHandlerModule.web.ts +2 -1
- package/src/components/DrawerLayout.tsx +8 -2
- package/src/components/GestureHandlerButton.tsx +7 -4
- package/src/components/Swipeable.tsx +28 -22
- package/src/fabric/RNGestureHandlerButtonNativeComponent.js +27 -0
- package/src/fabric/RNGestureHandlerRootViewNativeComponent.js +19 -0
- package/src/getShadowNodeFromRef.ts +19 -0
- package/src/getShadowNodeFromRef.web.ts +7 -0
- package/src/handlers/FlingGestureHandler.ts +3 -1
- package/src/handlers/ForceTouchGestureHandler.ts +8 -2
- package/src/handlers/LongPressGestureHandler.ts +5 -3
- package/src/handlers/NativeViewGestureHandler.ts +3 -1
- package/src/handlers/PanGestureHandler.ts +5 -3
- package/src/handlers/PinchGestureHandler.ts +3 -1
- package/src/handlers/RotationGestureHandler.ts +3 -1
- package/src/handlers/TapGestureHandler.ts +3 -1
- package/src/handlers/createHandler.ts +80 -5
- package/src/handlers/createNativeWrapper.tsx +7 -1
- package/src/handlers/gestureHandlerCommon.ts +2 -5
- package/src/handlers/gestures/GestureDetector.tsx +110 -37
- package/src/handlers/gestures/eventReceiver.ts +23 -19
- package/src/handlers/gestures/forceTouchGesture.ts +1 -1
- package/src/handlers/gestures/gesture.ts +21 -1
- package/src/handlers/gestures/gestureStateManager.ts +9 -12
- package/src/handlers/gestures/panGesture.ts +1 -1
- package/src/handlers/gestures/pinchGesture.ts +1 -1
- package/src/handlers/gestures/reanimatedWrapper.ts +4 -1
- package/src/handlers/handlersRegistry.ts +44 -6
- package/src/index.ts +15 -11
- package/src/init.ts +6 -0
- package/src/jestUtils.ts +506 -0
- package/src/utils.ts +38 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/BaseGestureHandlerInteractionController.kt +0 -18
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistryImpl.kt +0 -21
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerPackage.kt +0 -17
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,
|
|
@@ -61,22 +65,22 @@ export type {
|
|
|
61
65
|
} from './handlers/NativeViewGestureHandler';
|
|
62
66
|
export { GestureDetector } from './handlers/gestures/GestureDetector';
|
|
63
67
|
export { GestureObjects as Gesture } from './handlers/gestures/gestureObjects';
|
|
64
|
-
export { TapGestureType as TapGesture } from './handlers/gestures/tapGesture';
|
|
65
|
-
export { PanGestureType as PanGesture } from './handlers/gestures/panGesture';
|
|
66
|
-
export { FlingGestureType as FlingGesture } from './handlers/gestures/flingGesture';
|
|
67
|
-
export { LongPressGestureType as LongPressGesture } from './handlers/gestures/longPressGesture';
|
|
68
|
-
export { PinchGestureType as PinchGesture } from './handlers/gestures/pinchGesture';
|
|
69
|
-
export { RotationGestureType as RotationGesture } from './handlers/gestures/rotationGesture';
|
|
70
|
-
export { ForceTouchGestureType as ForceTouchGesture } from './handlers/gestures/forceTouchGesture';
|
|
71
|
-
export { NativeGestureType as NativeGesture } from './handlers/gestures/nativeGesture';
|
|
72
|
-
export { ManualGestureType as ManualGesture } from './handlers/gestures/manualGesture';
|
|
73
|
-
export {
|
|
68
|
+
export type { TapGestureType as TapGesture } from './handlers/gestures/tapGesture';
|
|
69
|
+
export type { PanGestureType as PanGesture } from './handlers/gestures/panGesture';
|
|
70
|
+
export type { FlingGestureType as FlingGesture } from './handlers/gestures/flingGesture';
|
|
71
|
+
export type { LongPressGestureType as LongPressGesture } from './handlers/gestures/longPressGesture';
|
|
72
|
+
export type { PinchGestureType as PinchGesture } from './handlers/gestures/pinchGesture';
|
|
73
|
+
export type { RotationGestureType as RotationGesture } from './handlers/gestures/rotationGesture';
|
|
74
|
+
export type { ForceTouchGestureType as ForceTouchGesture } from './handlers/gestures/forceTouchGesture';
|
|
75
|
+
export type { NativeGestureType as NativeGesture } from './handlers/gestures/nativeGesture';
|
|
76
|
+
export type { ManualGestureType as ManualGesture } from './handlers/gestures/manualGesture';
|
|
77
|
+
export type {
|
|
74
78
|
ComposedGestureType as ComposedGesture,
|
|
75
79
|
RaceGestureType as RaceGesture,
|
|
76
80
|
SimultaneousGestureType as SimultaneousGesture,
|
|
77
81
|
ExclusiveGestureType as ExclusiveGesture,
|
|
78
82
|
} from './handlers/gestures/gestureComposition';
|
|
79
|
-
export { GestureStateManagerType as GestureStateManager } from './handlers/gestures/gestureStateManager';
|
|
83
|
+
export type { GestureStateManagerType as GestureStateManager } from './handlers/gestures/gestureStateManager';
|
|
80
84
|
export { NativeViewGestureHandler } from './handlers/NativeViewGestureHandler';
|
|
81
85
|
export type {
|
|
82
86
|
RawButtonProps,
|
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
|
}
|
package/src/jestUtils.ts
ADDED
|
@@ -0,0 +1,506 @@
|
|
|
1
|
+
import invariant from 'invariant';
|
|
2
|
+
import { DeviceEventEmitter } from 'react-native';
|
|
3
|
+
import { ReactTestInstance } from 'react-test-renderer';
|
|
4
|
+
import {
|
|
5
|
+
FlingGestureHandler,
|
|
6
|
+
FlingGestureHandlerEventPayload,
|
|
7
|
+
flingHandlerName,
|
|
8
|
+
} from './handlers/FlingGestureHandler';
|
|
9
|
+
import {
|
|
10
|
+
ForceTouchGestureHandler,
|
|
11
|
+
ForceTouchGestureHandlerEventPayload,
|
|
12
|
+
forceTouchHandlerName,
|
|
13
|
+
} from './handlers/ForceTouchGestureHandler';
|
|
14
|
+
import {
|
|
15
|
+
BaseGestureHandlerProps,
|
|
16
|
+
GestureEvent,
|
|
17
|
+
HandlerStateChangeEvent,
|
|
18
|
+
} from './handlers/gestureHandlerCommon';
|
|
19
|
+
import { FlingGesture } from './handlers/gestures/flingGesture';
|
|
20
|
+
import { ForceTouchGesture } from './handlers/gestures/forceTouchGesture';
|
|
21
|
+
import { BaseGesture, GestureType } from './handlers/gestures/gesture';
|
|
22
|
+
import { LongPressGesture } from './handlers/gestures/longPressGesture';
|
|
23
|
+
import { NativeGesture } from './handlers/gestures/nativeGesture';
|
|
24
|
+
import { PanGesture } from './handlers/gestures/panGesture';
|
|
25
|
+
import { PinchGesture } from './handlers/gestures/pinchGesture';
|
|
26
|
+
import { RotationGesture } from './handlers/gestures/rotationGesture';
|
|
27
|
+
import { TapGesture } from './handlers/gestures/tapGesture';
|
|
28
|
+
import { findHandlerByTestID } from './handlers/handlersRegistry';
|
|
29
|
+
import {
|
|
30
|
+
LongPressGestureHandler,
|
|
31
|
+
LongPressGestureHandlerEventPayload,
|
|
32
|
+
longPressHandlerName,
|
|
33
|
+
} from './handlers/LongPressGestureHandler';
|
|
34
|
+
import {
|
|
35
|
+
NativeViewGestureHandler,
|
|
36
|
+
NativeViewGestureHandlerPayload,
|
|
37
|
+
nativeViewHandlerName,
|
|
38
|
+
} from './handlers/NativeViewGestureHandler';
|
|
39
|
+
import {
|
|
40
|
+
PanGestureHandler,
|
|
41
|
+
PanGestureHandlerEventPayload,
|
|
42
|
+
panHandlerName,
|
|
43
|
+
} from './handlers/PanGestureHandler';
|
|
44
|
+
import {
|
|
45
|
+
PinchGestureHandler,
|
|
46
|
+
PinchGestureHandlerEventPayload,
|
|
47
|
+
pinchHandlerName,
|
|
48
|
+
} from './handlers/PinchGestureHandler';
|
|
49
|
+
import {
|
|
50
|
+
RotationGestureHandler,
|
|
51
|
+
RotationGestureHandlerEventPayload,
|
|
52
|
+
rotationHandlerName,
|
|
53
|
+
} from './handlers/RotationGestureHandler';
|
|
54
|
+
import {
|
|
55
|
+
TapGestureHandler,
|
|
56
|
+
TapGestureHandlerEventPayload,
|
|
57
|
+
tapHandlerName,
|
|
58
|
+
} from './handlers/TapGestureHandler';
|
|
59
|
+
import { State } from './State';
|
|
60
|
+
import { hasProperty, withPrevAndCurrent } from './utils';
|
|
61
|
+
|
|
62
|
+
// load fireEvent conditionally, so RNGH may be used in setups without testing-library
|
|
63
|
+
let fireEvent = (
|
|
64
|
+
_element: ReactTestInstance,
|
|
65
|
+
_name: string,
|
|
66
|
+
..._data: any[]
|
|
67
|
+
) => {
|
|
68
|
+
// NOOP
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
try {
|
|
72
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
73
|
+
fireEvent = require('@testing-library/react-native').fireEvent;
|
|
74
|
+
} catch (_e) {
|
|
75
|
+
// do nothing if not available
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
type GestureHandlerTestEvent<
|
|
79
|
+
TEventPayload extends Record<string, unknown> = Record<string, unknown>
|
|
80
|
+
> = (
|
|
81
|
+
| GestureEvent<TEventPayload>
|
|
82
|
+
| HandlerStateChangeEvent<TEventPayload>
|
|
83
|
+
)['nativeEvent'];
|
|
84
|
+
|
|
85
|
+
type HandlerNames = keyof DefaultEventsMapping;
|
|
86
|
+
|
|
87
|
+
type WithNumberOfPointers<T> = {
|
|
88
|
+
[P in keyof T]: T[P] & { numberOfPointers: number };
|
|
89
|
+
};
|
|
90
|
+
type DefaultEventsMapping = WithNumberOfPointers<{
|
|
91
|
+
[flingHandlerName]: FlingGestureHandlerEventPayload;
|
|
92
|
+
[forceTouchHandlerName]: ForceTouchGestureHandlerEventPayload;
|
|
93
|
+
[longPressHandlerName]: LongPressGestureHandlerEventPayload;
|
|
94
|
+
[nativeViewHandlerName]: NativeViewGestureHandlerPayload;
|
|
95
|
+
[panHandlerName]: PanGestureHandlerEventPayload;
|
|
96
|
+
[pinchHandlerName]: PinchGestureHandlerEventPayload;
|
|
97
|
+
[rotationHandlerName]: RotationGestureHandlerEventPayload;
|
|
98
|
+
[tapHandlerName]: TapGestureHandlerEventPayload;
|
|
99
|
+
}>;
|
|
100
|
+
|
|
101
|
+
const handlersDefaultEvents: DefaultEventsMapping = {
|
|
102
|
+
[flingHandlerName]: {
|
|
103
|
+
x: 0,
|
|
104
|
+
y: 0,
|
|
105
|
+
absoluteX: 0,
|
|
106
|
+
absoluteY: 0,
|
|
107
|
+
numberOfPointers: 1,
|
|
108
|
+
},
|
|
109
|
+
[forceTouchHandlerName]: {
|
|
110
|
+
x: 0,
|
|
111
|
+
y: 0,
|
|
112
|
+
absoluteX: 0,
|
|
113
|
+
absoluteY: 0,
|
|
114
|
+
force: 1,
|
|
115
|
+
numberOfPointers: 1,
|
|
116
|
+
},
|
|
117
|
+
[longPressHandlerName]: {
|
|
118
|
+
x: 0,
|
|
119
|
+
y: 0,
|
|
120
|
+
absoluteX: 0,
|
|
121
|
+
absoluteY: 0,
|
|
122
|
+
duration: 100,
|
|
123
|
+
numberOfPointers: 1,
|
|
124
|
+
},
|
|
125
|
+
[nativeViewHandlerName]: {
|
|
126
|
+
pointerInside: true,
|
|
127
|
+
numberOfPointers: 1,
|
|
128
|
+
},
|
|
129
|
+
[panHandlerName]: {
|
|
130
|
+
x: 0,
|
|
131
|
+
y: 0,
|
|
132
|
+
absoluteX: 0,
|
|
133
|
+
absoluteY: 0,
|
|
134
|
+
translationX: 100,
|
|
135
|
+
translationY: 0,
|
|
136
|
+
velocityX: 3,
|
|
137
|
+
velocityY: 0,
|
|
138
|
+
numberOfPointers: 1,
|
|
139
|
+
},
|
|
140
|
+
[pinchHandlerName]: {
|
|
141
|
+
focalX: 0,
|
|
142
|
+
focalY: 0,
|
|
143
|
+
scale: 2,
|
|
144
|
+
velocity: 1,
|
|
145
|
+
numberOfPointers: 2,
|
|
146
|
+
},
|
|
147
|
+
[rotationHandlerName]: {
|
|
148
|
+
anchorX: 0,
|
|
149
|
+
anchorY: 0,
|
|
150
|
+
rotation: 3.14,
|
|
151
|
+
velocity: 2,
|
|
152
|
+
numberOfPointers: 2,
|
|
153
|
+
},
|
|
154
|
+
[tapHandlerName]: {
|
|
155
|
+
x: 0,
|
|
156
|
+
y: 0,
|
|
157
|
+
absoluteX: 0,
|
|
158
|
+
absoluteY: 0,
|
|
159
|
+
numberOfPointers: 1,
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
function isGesture(
|
|
164
|
+
componentOrGesture: ReactTestInstance | GestureType
|
|
165
|
+
): componentOrGesture is GestureType {
|
|
166
|
+
return componentOrGesture instanceof BaseGesture;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
interface WrappedGestureHandlerTestEvent {
|
|
170
|
+
nativeEvent: GestureHandlerTestEvent;
|
|
171
|
+
}
|
|
172
|
+
function wrapWithNativeEvent(
|
|
173
|
+
event: GestureHandlerTestEvent
|
|
174
|
+
): WrappedGestureHandlerTestEvent {
|
|
175
|
+
return { nativeEvent: event };
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
function fillOldStateChanges(
|
|
179
|
+
previousEvent: GestureHandlerTestEvent | null,
|
|
180
|
+
currentEvent: Omit<GestureHandlerTestEvent, 'oldState'>
|
|
181
|
+
): GestureHandlerTestEvent {
|
|
182
|
+
const isFirstEvent = previousEvent === null;
|
|
183
|
+
if (isFirstEvent) {
|
|
184
|
+
return {
|
|
185
|
+
oldState: State.UNDETERMINED,
|
|
186
|
+
...currentEvent,
|
|
187
|
+
} as GestureHandlerTestEvent;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
const isGestureStateEvent = previousEvent.state !== currentEvent.state;
|
|
191
|
+
if (isGestureStateEvent) {
|
|
192
|
+
return {
|
|
193
|
+
oldState: previousEvent?.state,
|
|
194
|
+
...currentEvent,
|
|
195
|
+
} as GestureHandlerTestEvent;
|
|
196
|
+
} else {
|
|
197
|
+
return currentEvent as GestureHandlerTestEvent;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
type EventWithStates = Partial<
|
|
202
|
+
Pick<GestureHandlerTestEvent, 'oldState' | 'state'>
|
|
203
|
+
>;
|
|
204
|
+
function validateStateTransitions(
|
|
205
|
+
previousEvent: EventWithStates | null,
|
|
206
|
+
currentEvent: EventWithStates
|
|
207
|
+
) {
|
|
208
|
+
function stringify(event: Record<string, unknown> | null) {
|
|
209
|
+
return JSON.stringify(event, null, 2);
|
|
210
|
+
}
|
|
211
|
+
function errorMsgWithBothEvents(description: string) {
|
|
212
|
+
return `${description}, invalid event: ${stringify(
|
|
213
|
+
currentEvent
|
|
214
|
+
)}, previous event: ${stringify(previousEvent)}`;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
function errorMsgWithCurrentEvent(description: string) {
|
|
218
|
+
return `${description}, invalid event: ${stringify(currentEvent)}`;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
invariant(
|
|
222
|
+
hasProperty(currentEvent, 'state'),
|
|
223
|
+
errorMsgWithCurrentEvent('every event must have state')
|
|
224
|
+
);
|
|
225
|
+
|
|
226
|
+
const isFirstEvent = previousEvent === null;
|
|
227
|
+
if (isFirstEvent) {
|
|
228
|
+
invariant(
|
|
229
|
+
currentEvent.state === State.BEGAN,
|
|
230
|
+
errorMsgWithCurrentEvent('first event must have BEGAN state')
|
|
231
|
+
);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
if (previousEvent !== null) {
|
|
235
|
+
if (previousEvent.state !== currentEvent.state) {
|
|
236
|
+
invariant(
|
|
237
|
+
hasProperty(currentEvent, 'oldState'),
|
|
238
|
+
errorMsgWithCurrentEvent(
|
|
239
|
+
'when state changes, oldState field should be present'
|
|
240
|
+
)
|
|
241
|
+
);
|
|
242
|
+
invariant(
|
|
243
|
+
currentEvent.oldState === previousEvent.state,
|
|
244
|
+
errorMsgWithBothEvents(
|
|
245
|
+
"when state changes, oldState should be the same as previous event' state"
|
|
246
|
+
)
|
|
247
|
+
);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
return currentEvent;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
type EventWithoutStates = Omit<GestureHandlerTestEvent, 'oldState' | 'state'>;
|
|
255
|
+
interface HandlerInfo {
|
|
256
|
+
handlerType: HandlerNames;
|
|
257
|
+
handlerTag: number;
|
|
258
|
+
}
|
|
259
|
+
function fillMissingDefaultsFor({
|
|
260
|
+
handlerType,
|
|
261
|
+
handlerTag,
|
|
262
|
+
}: HandlerInfo): (
|
|
263
|
+
event: Partial<GestureHandlerTestEvent>
|
|
264
|
+
) => EventWithoutStates {
|
|
265
|
+
return (event) => {
|
|
266
|
+
return {
|
|
267
|
+
...handlersDefaultEvents[handlerType],
|
|
268
|
+
...event,
|
|
269
|
+
handlerTag,
|
|
270
|
+
};
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
function isDiscreteHandler(handlerType: HandlerNames) {
|
|
275
|
+
return (
|
|
276
|
+
handlerType === 'TapGestureHandler' ||
|
|
277
|
+
handlerType === 'LongPressGestureHandler'
|
|
278
|
+
);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
function fillMissingStatesTransitions(
|
|
282
|
+
events: EventWithoutStates[],
|
|
283
|
+
isDiscreteHandler: boolean
|
|
284
|
+
): EventWithoutStates[] {
|
|
285
|
+
type Event = EventWithoutStates | null;
|
|
286
|
+
const _events = [...events];
|
|
287
|
+
const lastEvent = _events[_events.length - 1] ?? null;
|
|
288
|
+
const firstEvent = _events[0] ?? null;
|
|
289
|
+
|
|
290
|
+
const shouldDuplicateFirstEvent =
|
|
291
|
+
!isDiscreteHandler && !hasState(State.BEGAN)(firstEvent);
|
|
292
|
+
if (shouldDuplicateFirstEvent) {
|
|
293
|
+
const duplicated = { ...firstEvent, state: State.BEGAN };
|
|
294
|
+
// @ts-ignore badly typed, property may exist and we don't want to copy it
|
|
295
|
+
delete duplicated.oldState;
|
|
296
|
+
_events.unshift(duplicated);
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
const shouldDuplicateLastEvent =
|
|
300
|
+
!hasState(State.END)(lastEvent) ||
|
|
301
|
+
!hasState(State.FAILED)(lastEvent) ||
|
|
302
|
+
!hasState(State.CANCELLED)(lastEvent);
|
|
303
|
+
|
|
304
|
+
if (shouldDuplicateLastEvent) {
|
|
305
|
+
const duplicated = { ...lastEvent, state: State.END };
|
|
306
|
+
// @ts-ignore badly typed, property may exist and we don't want to copy it
|
|
307
|
+
delete duplicated.oldState;
|
|
308
|
+
_events.push(duplicated);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
function isWithoutState(event: Event) {
|
|
312
|
+
return event !== null && !hasProperty(event, 'state');
|
|
313
|
+
}
|
|
314
|
+
function hasState(state: State) {
|
|
315
|
+
return (event: Event) => event !== null && event.state === state;
|
|
316
|
+
}
|
|
317
|
+
function noEventsLeft(event: Event) {
|
|
318
|
+
return event === null;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
function trueFn() {
|
|
322
|
+
return true;
|
|
323
|
+
}
|
|
324
|
+
interface Args {
|
|
325
|
+
shouldConsumeEvent?: (event: Event) => boolean;
|
|
326
|
+
shouldTransitionToNextState?: (nextEvent: Event) => boolean;
|
|
327
|
+
}
|
|
328
|
+
function fillEventsForCurrentState({
|
|
329
|
+
shouldConsumeEvent = trueFn,
|
|
330
|
+
shouldTransitionToNextState = trueFn,
|
|
331
|
+
}: Args) {
|
|
332
|
+
function peekCurrentEvent(): Event {
|
|
333
|
+
return _events[0] ?? null;
|
|
334
|
+
}
|
|
335
|
+
function peekNextEvent(): Event {
|
|
336
|
+
return _events[1] ?? null;
|
|
337
|
+
}
|
|
338
|
+
function consumeCurrentEvent() {
|
|
339
|
+
_events.shift();
|
|
340
|
+
}
|
|
341
|
+
const currentEvent = peekCurrentEvent();
|
|
342
|
+
const nextEvent = peekNextEvent();
|
|
343
|
+
const currentRequiredState = REQUIRED_EVENTS[currentStateIdx];
|
|
344
|
+
|
|
345
|
+
let eventData = {};
|
|
346
|
+
const shouldUseEvent = shouldConsumeEvent(currentEvent);
|
|
347
|
+
if (shouldUseEvent) {
|
|
348
|
+
eventData = currentEvent!;
|
|
349
|
+
consumeCurrentEvent();
|
|
350
|
+
}
|
|
351
|
+
transformedEvents.push({ state: currentRequiredState, ...eventData });
|
|
352
|
+
if (shouldTransitionToNextState(nextEvent)) {
|
|
353
|
+
currentStateIdx++;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
const REQUIRED_EVENTS = [State.BEGAN, State.ACTIVE, State.END];
|
|
358
|
+
|
|
359
|
+
let currentStateIdx = 0;
|
|
360
|
+
const transformedEvents: EventWithoutStates[] = [];
|
|
361
|
+
let hasAllStates;
|
|
362
|
+
let iterations = 0;
|
|
363
|
+
do {
|
|
364
|
+
const nextRequiredState = REQUIRED_EVENTS[currentStateIdx];
|
|
365
|
+
if (nextRequiredState === State.BEGAN) {
|
|
366
|
+
fillEventsForCurrentState({
|
|
367
|
+
shouldConsumeEvent: (e: Event) =>
|
|
368
|
+
isWithoutState(e) || hasState(State.BEGAN)(e),
|
|
369
|
+
});
|
|
370
|
+
} else if (nextRequiredState === State.ACTIVE) {
|
|
371
|
+
const shouldConsumeEvent = (e: Event) =>
|
|
372
|
+
isWithoutState(e) || hasState(State.ACTIVE)(e);
|
|
373
|
+
const shouldTransitionToNextState = (nextEvent: Event) =>
|
|
374
|
+
noEventsLeft(nextEvent) ||
|
|
375
|
+
hasState(State.END)(nextEvent) ||
|
|
376
|
+
hasState(State.FAILED)(nextEvent) ||
|
|
377
|
+
hasState(State.CANCELLED)(nextEvent);
|
|
378
|
+
|
|
379
|
+
fillEventsForCurrentState({
|
|
380
|
+
shouldConsumeEvent,
|
|
381
|
+
shouldTransitionToNextState,
|
|
382
|
+
});
|
|
383
|
+
} else if (nextRequiredState === State.END) {
|
|
384
|
+
fillEventsForCurrentState({});
|
|
385
|
+
}
|
|
386
|
+
hasAllStates = currentStateIdx === REQUIRED_EVENTS.length;
|
|
387
|
+
|
|
388
|
+
invariant(
|
|
389
|
+
iterations++ <= 500,
|
|
390
|
+
'exceeded max number of iterations, please report a bug in RNGH repository with your test case'
|
|
391
|
+
);
|
|
392
|
+
} while (!hasAllStates);
|
|
393
|
+
|
|
394
|
+
return transformedEvents;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
type EventEmitter = (
|
|
398
|
+
eventName: string,
|
|
399
|
+
args: { nativeEvent: GestureHandlerTestEvent }
|
|
400
|
+
) => void;
|
|
401
|
+
interface HandlerData {
|
|
402
|
+
emitEvent: EventEmitter;
|
|
403
|
+
handlerType: HandlerNames;
|
|
404
|
+
handlerTag: number;
|
|
405
|
+
}
|
|
406
|
+
function getHandlerData(
|
|
407
|
+
componentOrGesture: ReactTestInstance | GestureType
|
|
408
|
+
): HandlerData {
|
|
409
|
+
if (isGesture(componentOrGesture)) {
|
|
410
|
+
const gesture = componentOrGesture;
|
|
411
|
+
return {
|
|
412
|
+
emitEvent: (eventName, args) => {
|
|
413
|
+
DeviceEventEmitter.emit(eventName, args.nativeEvent);
|
|
414
|
+
},
|
|
415
|
+
handlerType: gesture.handlerName as HandlerNames,
|
|
416
|
+
handlerTag: gesture.handlerTag,
|
|
417
|
+
};
|
|
418
|
+
}
|
|
419
|
+
const gestureHandlerComponent = componentOrGesture;
|
|
420
|
+
return {
|
|
421
|
+
emitEvent: (eventName, args) => {
|
|
422
|
+
fireEvent(gestureHandlerComponent, eventName, args);
|
|
423
|
+
},
|
|
424
|
+
handlerType: gestureHandlerComponent.props.handlerType as HandlerNames,
|
|
425
|
+
handlerTag: gestureHandlerComponent.props.handlerTag as number,
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
type AllGestures =
|
|
429
|
+
| TapGesture
|
|
430
|
+
| PanGesture
|
|
431
|
+
| LongPressGesture
|
|
432
|
+
| RotationGesture
|
|
433
|
+
| PinchGesture
|
|
434
|
+
| FlingGesture
|
|
435
|
+
| ForceTouchGesture
|
|
436
|
+
| NativeGesture;
|
|
437
|
+
|
|
438
|
+
type AllHandlers =
|
|
439
|
+
| TapGestureHandler
|
|
440
|
+
| PanGestureHandler
|
|
441
|
+
| LongPressGestureHandler
|
|
442
|
+
| RotationGestureHandler
|
|
443
|
+
| PinchGestureHandler
|
|
444
|
+
| FlingGestureHandler
|
|
445
|
+
| ForceTouchGestureHandler
|
|
446
|
+
| NativeViewGestureHandler;
|
|
447
|
+
|
|
448
|
+
// prettier-ignore
|
|
449
|
+
type ClassComponentConstructor<P> = new (props: P) => React.Component<P, any, any>;
|
|
450
|
+
|
|
451
|
+
type ExtractPayloadFromProps<T> = T extends BaseGestureHandlerProps<
|
|
452
|
+
infer TPayload
|
|
453
|
+
>
|
|
454
|
+
? TPayload
|
|
455
|
+
: never;
|
|
456
|
+
|
|
457
|
+
type ExtractConfig<T> = T extends BaseGesture<infer TGesturePayload>
|
|
458
|
+
? TGesturePayload
|
|
459
|
+
: T extends ClassComponentConstructor<infer THandlerProps>
|
|
460
|
+
? ExtractPayloadFromProps<THandlerProps>
|
|
461
|
+
: Record<string, unknown>;
|
|
462
|
+
|
|
463
|
+
export function fireGestureHandler<THandler extends AllGestures | AllHandlers>(
|
|
464
|
+
componentOrGesture: ReactTestInstance | GestureType,
|
|
465
|
+
eventList: Partial<GestureHandlerTestEvent<ExtractConfig<THandler>>>[] = []
|
|
466
|
+
): void {
|
|
467
|
+
const { emitEvent, handlerType, handlerTag } = getHandlerData(
|
|
468
|
+
componentOrGesture
|
|
469
|
+
);
|
|
470
|
+
|
|
471
|
+
let _ = fillMissingStatesTransitions(
|
|
472
|
+
eventList,
|
|
473
|
+
isDiscreteHandler(handlerType)
|
|
474
|
+
);
|
|
475
|
+
_ = _.map(fillMissingDefaultsFor({ handlerTag, handlerType }));
|
|
476
|
+
_ = withPrevAndCurrent(_, fillOldStateChanges);
|
|
477
|
+
_ = withPrevAndCurrent(_, validateStateTransitions);
|
|
478
|
+
// @ts-ignore TODO
|
|
479
|
+
_ = _.map(wrapWithNativeEvent);
|
|
480
|
+
|
|
481
|
+
const events = (_ as unknown) as WrappedGestureHandlerTestEvent[];
|
|
482
|
+
|
|
483
|
+
const firstEvent = events.shift()!;
|
|
484
|
+
|
|
485
|
+
emitEvent('onGestureHandlerStateChange', firstEvent);
|
|
486
|
+
let lastSentEvent = firstEvent;
|
|
487
|
+
for (const event of events) {
|
|
488
|
+
const hasChangedState =
|
|
489
|
+
lastSentEvent.nativeEvent.state !== event.nativeEvent.state;
|
|
490
|
+
|
|
491
|
+
if (hasChangedState) {
|
|
492
|
+
emitEvent('onGestureHandlerStateChange', event);
|
|
493
|
+
} else {
|
|
494
|
+
emitEvent('onGestureHandlerEvent', event);
|
|
495
|
+
}
|
|
496
|
+
lastSentEvent = event;
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
export function getByGestureTestId(testID: string) {
|
|
501
|
+
const handler = findHandlerByTestID(testID);
|
|
502
|
+
if (handler === null) {
|
|
503
|
+
throw new Error(`Handler with id: '${testID}' cannot be found`);
|
|
504
|
+
}
|
|
505
|
+
return handler;
|
|
506
|
+
}
|
package/src/utils.ts
CHANGED
|
@@ -5,3 +5,41 @@ export function toArray<T>(object: T | T[]): T[] {
|
|
|
5
5
|
|
|
6
6
|
return object;
|
|
7
7
|
}
|
|
8
|
+
|
|
9
|
+
export type withPrevAndCurrentMapFn<T, Transformed> = (
|
|
10
|
+
previous: Transformed | null,
|
|
11
|
+
current: T
|
|
12
|
+
) => Transformed;
|
|
13
|
+
export function withPrevAndCurrent<T, Transformed>(
|
|
14
|
+
array: T[],
|
|
15
|
+
mapFn: withPrevAndCurrentMapFn<T, Transformed>
|
|
16
|
+
): Transformed[] {
|
|
17
|
+
const previousArr: (null | Transformed)[] = [null];
|
|
18
|
+
const currentArr = [...array];
|
|
19
|
+
const transformedArr: Transformed[] = [];
|
|
20
|
+
currentArr.forEach((current, i) => {
|
|
21
|
+
const previous = previousArr[i];
|
|
22
|
+
const transformed = mapFn(previous, current);
|
|
23
|
+
previousArr.push(transformed);
|
|
24
|
+
transformedArr.push(transformed);
|
|
25
|
+
});
|
|
26
|
+
return transformedArr;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
30
|
+
export function hasProperty(object: object, key: string) {
|
|
31
|
+
return Object.prototype.hasOwnProperty.call(object, key);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function isJestEnv(): boolean {
|
|
35
|
+
return hasProperty(global, 'process') && !!process.env.JEST_WORKER_ID;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function tagMessage(msg: string) {
|
|
39
|
+
return `[react-native-gesture-handler] ${msg}`;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function isFabric(): boolean {
|
|
43
|
+
// @ts-expect-error nativeFabricUIManager is not yet included in the RN types
|
|
44
|
+
return !!global?.nativeFabricUIManager;
|
|
45
|
+
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
package com.swmansion.gesturehandler
|
|
2
|
-
|
|
3
|
-
abstract class BaseGestureHandlerInteractionController : GestureHandlerInteractionController {
|
|
4
|
-
override fun shouldWaitForHandlerFailure(
|
|
5
|
-
handler: GestureHandler<*>,
|
|
6
|
-
otherHandler: GestureHandler<*>,
|
|
7
|
-
) = false
|
|
8
|
-
|
|
9
|
-
override fun shouldRequireHandlerToWaitForFailure(
|
|
10
|
-
handler: GestureHandler<*>,
|
|
11
|
-
otherHandler: GestureHandler<*>,
|
|
12
|
-
) = false
|
|
13
|
-
|
|
14
|
-
override fun shouldRecognizeSimultaneously(
|
|
15
|
-
handler: GestureHandler<*>,
|
|
16
|
-
otherHandler: GestureHandler<*>,
|
|
17
|
-
) = false
|
|
18
|
-
}
|
package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistryImpl.kt
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
package com.swmansion.gesturehandler
|
|
2
|
-
|
|
3
|
-
import android.view.View
|
|
4
|
-
import java.util.*
|
|
5
|
-
|
|
6
|
-
class GestureHandlerRegistryImpl : GestureHandlerRegistry {
|
|
7
|
-
private val handlers = WeakHashMap<View?, ArrayList<GestureHandler<*>>>()
|
|
8
|
-
fun <T : GestureHandler<*>> registerHandlerForView(view: View?, handler: T): T {
|
|
9
|
-
var listToAdd = handlers[view]
|
|
10
|
-
if (listToAdd == null) {
|
|
11
|
-
listToAdd = ArrayList(1)
|
|
12
|
-
listToAdd.add(handler)
|
|
13
|
-
handlers[view] = listToAdd
|
|
14
|
-
} else {
|
|
15
|
-
listToAdd.add(handler)
|
|
16
|
-
}
|
|
17
|
-
return handler
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
override fun getHandlersForView(view: View) = handlers[view]
|
|
21
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
package com.swmansion.gesturehandler.react
|
|
2
|
-
|
|
3
|
-
import com.facebook.react.ReactPackage
|
|
4
|
-
import com.facebook.react.bridge.NativeModule
|
|
5
|
-
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
|
-
import com.facebook.react.uimanager.ViewManager
|
|
7
|
-
import java.util.*
|
|
8
|
-
|
|
9
|
-
class RNGestureHandlerPackage : ReactPackage {
|
|
10
|
-
override fun createNativeModules(reactContext: ReactApplicationContext) =
|
|
11
|
-
listOf<NativeModule>(RNGestureHandlerModule(reactContext))
|
|
12
|
-
|
|
13
|
-
override fun createViewManagers(reactContext: ReactApplicationContext) =
|
|
14
|
-
listOf<ViewManager<*, *>>(
|
|
15
|
-
RNGestureHandlerRootViewManager(),
|
|
16
|
-
RNGestureHandlerButtonViewManager())
|
|
17
|
-
}
|