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.
- package/LICENSE +1 -1
- package/README.md +5 -1
- package/RNGestureHandler.podspec +27 -3
- package/android/build.gradle +81 -8
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt +5 -1
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.kt +14 -12
- package/android/lib/src/main/java/com/swmansion/gesturehandler/PinchGestureHandler.kt +2 -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 +111 -47
- 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 +61 -9
- 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 -0
- 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 +60 -10
- 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 -0
- 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 +1 -0
- package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -0
- package/lib/typescript/handlers/PanGestureHandler.d.ts +1 -0
- 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 +4 -0
- 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 +3 -1
- package/src/handlers/NativeViewGestureHandler.ts +3 -1
- package/src/handlers/PanGestureHandler.ts +3 -1
- 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 +69 -7
- 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 +4 -0
- 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/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/RNGestureHandler.xcodeproj/xcuserdata/jakubpiasecki.xcuserdatad/xcschemes/xcschememanagement.plist +0 -19
@@ -0,0 +1,350 @@
|
|
1
|
+
import invariant from 'invariant';
|
2
|
+
import { DeviceEventEmitter } from 'react-native';
|
3
|
+
import { flingHandlerName } from './handlers/FlingGestureHandler';
|
4
|
+
import { forceTouchHandlerName } from './handlers/ForceTouchGestureHandler';
|
5
|
+
import { BaseGesture } from './handlers/gestures/gesture';
|
6
|
+
import { findHandlerByTestID } from './handlers/handlersRegistry';
|
7
|
+
import { longPressHandlerName } from './handlers/LongPressGestureHandler';
|
8
|
+
import { nativeViewHandlerName } from './handlers/NativeViewGestureHandler';
|
9
|
+
import { panHandlerName } from './handlers/PanGestureHandler';
|
10
|
+
import { pinchHandlerName } from './handlers/PinchGestureHandler';
|
11
|
+
import { rotationHandlerName } from './handlers/RotationGestureHandler';
|
12
|
+
import { tapHandlerName } from './handlers/TapGestureHandler';
|
13
|
+
import { State } from './State';
|
14
|
+
import { hasProperty, withPrevAndCurrent } from './utils'; // load fireEvent conditionally, so RNGH may be used in setups without testing-library
|
15
|
+
|
16
|
+
let fireEvent = (_element, _name, ..._data) => {// NOOP
|
17
|
+
};
|
18
|
+
|
19
|
+
try {
|
20
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
21
|
+
fireEvent = require('@testing-library/react-native').fireEvent;
|
22
|
+
} catch (_e) {// do nothing if not available
|
23
|
+
}
|
24
|
+
|
25
|
+
const handlersDefaultEvents = {
|
26
|
+
[flingHandlerName]: {
|
27
|
+
x: 0,
|
28
|
+
y: 0,
|
29
|
+
absoluteX: 0,
|
30
|
+
absoluteY: 0,
|
31
|
+
numberOfPointers: 1
|
32
|
+
},
|
33
|
+
[forceTouchHandlerName]: {
|
34
|
+
x: 0,
|
35
|
+
y: 0,
|
36
|
+
absoluteX: 0,
|
37
|
+
absoluteY: 0,
|
38
|
+
force: 1,
|
39
|
+
numberOfPointers: 1
|
40
|
+
},
|
41
|
+
[longPressHandlerName]: {
|
42
|
+
x: 0,
|
43
|
+
y: 0,
|
44
|
+
absoluteX: 0,
|
45
|
+
absoluteY: 0,
|
46
|
+
duration: 100,
|
47
|
+
numberOfPointers: 1
|
48
|
+
},
|
49
|
+
[nativeViewHandlerName]: {
|
50
|
+
pointerInside: true,
|
51
|
+
numberOfPointers: 1
|
52
|
+
},
|
53
|
+
[panHandlerName]: {
|
54
|
+
x: 0,
|
55
|
+
y: 0,
|
56
|
+
absoluteX: 0,
|
57
|
+
absoluteY: 0,
|
58
|
+
translationX: 100,
|
59
|
+
translationY: 0,
|
60
|
+
velocityX: 3,
|
61
|
+
velocityY: 0,
|
62
|
+
numberOfPointers: 1
|
63
|
+
},
|
64
|
+
[pinchHandlerName]: {
|
65
|
+
focalX: 0,
|
66
|
+
focalY: 0,
|
67
|
+
scale: 2,
|
68
|
+
velocity: 1,
|
69
|
+
numberOfPointers: 2
|
70
|
+
},
|
71
|
+
[rotationHandlerName]: {
|
72
|
+
anchorX: 0,
|
73
|
+
anchorY: 0,
|
74
|
+
rotation: 3.14,
|
75
|
+
velocity: 2,
|
76
|
+
numberOfPointers: 2
|
77
|
+
},
|
78
|
+
[tapHandlerName]: {
|
79
|
+
x: 0,
|
80
|
+
y: 0,
|
81
|
+
absoluteX: 0,
|
82
|
+
absoluteY: 0,
|
83
|
+
numberOfPointers: 1
|
84
|
+
}
|
85
|
+
};
|
86
|
+
|
87
|
+
function isGesture(componentOrGesture) {
|
88
|
+
return componentOrGesture instanceof BaseGesture;
|
89
|
+
}
|
90
|
+
|
91
|
+
function wrapWithNativeEvent(event) {
|
92
|
+
return {
|
93
|
+
nativeEvent: event
|
94
|
+
};
|
95
|
+
}
|
96
|
+
|
97
|
+
function fillOldStateChanges(previousEvent, currentEvent) {
|
98
|
+
const isFirstEvent = previousEvent === null;
|
99
|
+
|
100
|
+
if (isFirstEvent) {
|
101
|
+
return {
|
102
|
+
oldState: State.UNDETERMINED,
|
103
|
+
...currentEvent
|
104
|
+
};
|
105
|
+
}
|
106
|
+
|
107
|
+
const isGestureStateEvent = previousEvent.state !== currentEvent.state;
|
108
|
+
|
109
|
+
if (isGestureStateEvent) {
|
110
|
+
return {
|
111
|
+
oldState: previousEvent === null || previousEvent === void 0 ? void 0 : previousEvent.state,
|
112
|
+
...currentEvent
|
113
|
+
};
|
114
|
+
} else {
|
115
|
+
return currentEvent;
|
116
|
+
}
|
117
|
+
}
|
118
|
+
|
119
|
+
function validateStateTransitions(previousEvent, currentEvent) {
|
120
|
+
function stringify(event) {
|
121
|
+
return JSON.stringify(event, null, 2);
|
122
|
+
}
|
123
|
+
|
124
|
+
function errorMsgWithBothEvents(description) {
|
125
|
+
return `${description}, invalid event: ${stringify(currentEvent)}, previous event: ${stringify(previousEvent)}`;
|
126
|
+
}
|
127
|
+
|
128
|
+
function errorMsgWithCurrentEvent(description) {
|
129
|
+
return `${description}, invalid event: ${stringify(currentEvent)}`;
|
130
|
+
}
|
131
|
+
|
132
|
+
invariant(hasProperty(currentEvent, 'state'), errorMsgWithCurrentEvent('every event must have state'));
|
133
|
+
const isFirstEvent = previousEvent === null;
|
134
|
+
|
135
|
+
if (isFirstEvent) {
|
136
|
+
invariant(currentEvent.state === State.BEGAN, errorMsgWithCurrentEvent('first event must have BEGAN state'));
|
137
|
+
}
|
138
|
+
|
139
|
+
if (previousEvent !== null) {
|
140
|
+
if (previousEvent.state !== currentEvent.state) {
|
141
|
+
invariant(hasProperty(currentEvent, 'oldState'), errorMsgWithCurrentEvent('when state changes, oldState field should be present'));
|
142
|
+
invariant(currentEvent.oldState === previousEvent.state, errorMsgWithBothEvents("when state changes, oldState should be the same as previous event' state"));
|
143
|
+
}
|
144
|
+
}
|
145
|
+
|
146
|
+
return currentEvent;
|
147
|
+
}
|
148
|
+
|
149
|
+
function fillMissingDefaultsFor({
|
150
|
+
handlerType,
|
151
|
+
handlerTag
|
152
|
+
}) {
|
153
|
+
return event => {
|
154
|
+
return { ...handlersDefaultEvents[handlerType],
|
155
|
+
...event,
|
156
|
+
handlerTag
|
157
|
+
};
|
158
|
+
};
|
159
|
+
}
|
160
|
+
|
161
|
+
function isDiscreteHandler(handlerType) {
|
162
|
+
return handlerType === 'TapGestureHandler' || handlerType === 'LongPressGestureHandler';
|
163
|
+
}
|
164
|
+
|
165
|
+
function fillMissingStatesTransitions(events, isDiscreteHandler) {
|
166
|
+
var _events2, _events$;
|
167
|
+
|
168
|
+
const _events = [...events];
|
169
|
+
const lastEvent = (_events2 = _events[_events.length - 1]) !== null && _events2 !== void 0 ? _events2 : null;
|
170
|
+
const firstEvent = (_events$ = _events[0]) !== null && _events$ !== void 0 ? _events$ : null;
|
171
|
+
const shouldDuplicateFirstEvent = !isDiscreteHandler && !hasState(State.BEGAN)(firstEvent);
|
172
|
+
|
173
|
+
if (shouldDuplicateFirstEvent) {
|
174
|
+
const duplicated = { ...firstEvent,
|
175
|
+
state: State.BEGAN
|
176
|
+
}; // @ts-ignore badly typed, property may exist and we don't want to copy it
|
177
|
+
|
178
|
+
delete duplicated.oldState;
|
179
|
+
|
180
|
+
_events.unshift(duplicated);
|
181
|
+
}
|
182
|
+
|
183
|
+
const shouldDuplicateLastEvent = !hasState(State.END)(lastEvent) || !hasState(State.FAILED)(lastEvent) || !hasState(State.CANCELLED)(lastEvent);
|
184
|
+
|
185
|
+
if (shouldDuplicateLastEvent) {
|
186
|
+
const duplicated = { ...lastEvent,
|
187
|
+
state: State.END
|
188
|
+
}; // @ts-ignore badly typed, property may exist and we don't want to copy it
|
189
|
+
|
190
|
+
delete duplicated.oldState;
|
191
|
+
|
192
|
+
_events.push(duplicated);
|
193
|
+
}
|
194
|
+
|
195
|
+
function isWithoutState(event) {
|
196
|
+
return event !== null && !hasProperty(event, 'state');
|
197
|
+
}
|
198
|
+
|
199
|
+
function hasState(state) {
|
200
|
+
return event => event !== null && event.state === state;
|
201
|
+
}
|
202
|
+
|
203
|
+
function noEventsLeft(event) {
|
204
|
+
return event === null;
|
205
|
+
}
|
206
|
+
|
207
|
+
function trueFn() {
|
208
|
+
return true;
|
209
|
+
}
|
210
|
+
|
211
|
+
function fillEventsForCurrentState({
|
212
|
+
shouldConsumeEvent = trueFn,
|
213
|
+
shouldTransitionToNextState = trueFn
|
214
|
+
}) {
|
215
|
+
function peekCurrentEvent() {
|
216
|
+
var _events$2;
|
217
|
+
|
218
|
+
return (_events$2 = _events[0]) !== null && _events$2 !== void 0 ? _events$2 : null;
|
219
|
+
}
|
220
|
+
|
221
|
+
function peekNextEvent() {
|
222
|
+
var _events$3;
|
223
|
+
|
224
|
+
return (_events$3 = _events[1]) !== null && _events$3 !== void 0 ? _events$3 : null;
|
225
|
+
}
|
226
|
+
|
227
|
+
function consumeCurrentEvent() {
|
228
|
+
_events.shift();
|
229
|
+
}
|
230
|
+
|
231
|
+
const currentEvent = peekCurrentEvent();
|
232
|
+
const nextEvent = peekNextEvent();
|
233
|
+
const currentRequiredState = REQUIRED_EVENTS[currentStateIdx];
|
234
|
+
let eventData = {};
|
235
|
+
const shouldUseEvent = shouldConsumeEvent(currentEvent);
|
236
|
+
|
237
|
+
if (shouldUseEvent) {
|
238
|
+
eventData = currentEvent;
|
239
|
+
consumeCurrentEvent();
|
240
|
+
}
|
241
|
+
|
242
|
+
transformedEvents.push({
|
243
|
+
state: currentRequiredState,
|
244
|
+
...eventData
|
245
|
+
});
|
246
|
+
|
247
|
+
if (shouldTransitionToNextState(nextEvent)) {
|
248
|
+
currentStateIdx++;
|
249
|
+
}
|
250
|
+
}
|
251
|
+
|
252
|
+
const REQUIRED_EVENTS = [State.BEGAN, State.ACTIVE, State.END];
|
253
|
+
let currentStateIdx = 0;
|
254
|
+
const transformedEvents = [];
|
255
|
+
let hasAllStates;
|
256
|
+
let iterations = 0;
|
257
|
+
|
258
|
+
do {
|
259
|
+
const nextRequiredState = REQUIRED_EVENTS[currentStateIdx];
|
260
|
+
|
261
|
+
if (nextRequiredState === State.BEGAN) {
|
262
|
+
fillEventsForCurrentState({
|
263
|
+
shouldConsumeEvent: e => isWithoutState(e) || hasState(State.BEGAN)(e)
|
264
|
+
});
|
265
|
+
} else if (nextRequiredState === State.ACTIVE) {
|
266
|
+
const shouldConsumeEvent = e => isWithoutState(e) || hasState(State.ACTIVE)(e);
|
267
|
+
|
268
|
+
const shouldTransitionToNextState = nextEvent => noEventsLeft(nextEvent) || hasState(State.END)(nextEvent) || hasState(State.FAILED)(nextEvent) || hasState(State.CANCELLED)(nextEvent);
|
269
|
+
|
270
|
+
fillEventsForCurrentState({
|
271
|
+
shouldConsumeEvent,
|
272
|
+
shouldTransitionToNextState
|
273
|
+
});
|
274
|
+
} else if (nextRequiredState === State.END) {
|
275
|
+
fillEventsForCurrentState({});
|
276
|
+
}
|
277
|
+
|
278
|
+
hasAllStates = currentStateIdx === REQUIRED_EVENTS.length;
|
279
|
+
invariant(iterations++ <= 500, 'exceeded max number of iterations, please report a bug in RNGH repository with your test case');
|
280
|
+
} while (!hasAllStates);
|
281
|
+
|
282
|
+
return transformedEvents;
|
283
|
+
}
|
284
|
+
|
285
|
+
function getHandlerData(componentOrGesture) {
|
286
|
+
if (isGesture(componentOrGesture)) {
|
287
|
+
const gesture = componentOrGesture;
|
288
|
+
return {
|
289
|
+
emitEvent: (eventName, args) => {
|
290
|
+
DeviceEventEmitter.emit(eventName, args.nativeEvent);
|
291
|
+
},
|
292
|
+
handlerType: gesture.handlerName,
|
293
|
+
handlerTag: gesture.handlerTag
|
294
|
+
};
|
295
|
+
}
|
296
|
+
|
297
|
+
const gestureHandlerComponent = componentOrGesture;
|
298
|
+
return {
|
299
|
+
emitEvent: (eventName, args) => {
|
300
|
+
fireEvent(gestureHandlerComponent, eventName, args);
|
301
|
+
},
|
302
|
+
handlerType: gestureHandlerComponent.props.handlerType,
|
303
|
+
handlerTag: gestureHandlerComponent.props.handlerTag
|
304
|
+
};
|
305
|
+
}
|
306
|
+
|
307
|
+
export function fireGestureHandler(componentOrGesture, eventList = []) {
|
308
|
+
const {
|
309
|
+
emitEvent,
|
310
|
+
handlerType,
|
311
|
+
handlerTag
|
312
|
+
} = getHandlerData(componentOrGesture);
|
313
|
+
|
314
|
+
let _ = fillMissingStatesTransitions(eventList, isDiscreteHandler(handlerType));
|
315
|
+
|
316
|
+
_ = _.map(fillMissingDefaultsFor({
|
317
|
+
handlerTag,
|
318
|
+
handlerType
|
319
|
+
}));
|
320
|
+
_ = withPrevAndCurrent(_, fillOldStateChanges);
|
321
|
+
_ = withPrevAndCurrent(_, validateStateTransitions); // @ts-ignore TODO
|
322
|
+
|
323
|
+
_ = _.map(wrapWithNativeEvent);
|
324
|
+
const events = _;
|
325
|
+
const firstEvent = events.shift();
|
326
|
+
emitEvent('onGestureHandlerStateChange', firstEvent);
|
327
|
+
let lastSentEvent = firstEvent;
|
328
|
+
|
329
|
+
for (const event of events) {
|
330
|
+
const hasChangedState = lastSentEvent.nativeEvent.state !== event.nativeEvent.state;
|
331
|
+
|
332
|
+
if (hasChangedState) {
|
333
|
+
emitEvent('onGestureHandlerStateChange', event);
|
334
|
+
} else {
|
335
|
+
emitEvent('onGestureHandlerEvent', event);
|
336
|
+
}
|
337
|
+
|
338
|
+
lastSentEvent = event;
|
339
|
+
}
|
340
|
+
}
|
341
|
+
export function getByGestureTestId(testID) {
|
342
|
+
const handler = findHandlerByTestID(testID);
|
343
|
+
|
344
|
+
if (handler === null) {
|
345
|
+
throw new Error(`Handler with id: '${testID}' cannot be found`);
|
346
|
+
}
|
347
|
+
|
348
|
+
return handler;
|
349
|
+
}
|
350
|
+
//# sourceMappingURL=jestUtils.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["jestUtils.ts"],"names":["invariant","DeviceEventEmitter","flingHandlerName","forceTouchHandlerName","BaseGesture","findHandlerByTestID","longPressHandlerName","nativeViewHandlerName","panHandlerName","pinchHandlerName","rotationHandlerName","tapHandlerName","State","hasProperty","withPrevAndCurrent","fireEvent","_element","_name","_data","require","_e","handlersDefaultEvents","x","y","absoluteX","absoluteY","numberOfPointers","force","duration","pointerInside","translationX","translationY","velocityX","velocityY","focalX","focalY","scale","velocity","anchorX","anchorY","rotation","isGesture","componentOrGesture","wrapWithNativeEvent","event","nativeEvent","fillOldStateChanges","previousEvent","currentEvent","isFirstEvent","oldState","UNDETERMINED","isGestureStateEvent","state","validateStateTransitions","stringify","JSON","errorMsgWithBothEvents","description","errorMsgWithCurrentEvent","BEGAN","fillMissingDefaultsFor","handlerType","handlerTag","isDiscreteHandler","fillMissingStatesTransitions","events","_events","lastEvent","length","firstEvent","shouldDuplicateFirstEvent","hasState","duplicated","unshift","shouldDuplicateLastEvent","END","FAILED","CANCELLED","push","isWithoutState","noEventsLeft","trueFn","fillEventsForCurrentState","shouldConsumeEvent","shouldTransitionToNextState","peekCurrentEvent","peekNextEvent","consumeCurrentEvent","shift","nextEvent","currentRequiredState","REQUIRED_EVENTS","currentStateIdx","eventData","shouldUseEvent","transformedEvents","ACTIVE","hasAllStates","iterations","nextRequiredState","e","getHandlerData","gesture","emitEvent","eventName","args","emit","handlerName","gestureHandlerComponent","props","fireGestureHandler","eventList","_","map","lastSentEvent","hasChangedState","getByGestureTestId","testID","handler","Error"],"mappings":"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","sourcesContent":["import invariant from 'invariant';\nimport { DeviceEventEmitter } from 'react-native';\nimport { ReactTestInstance } from 'react-test-renderer';\nimport {\n FlingGestureHandler,\n FlingGestureHandlerEventPayload,\n flingHandlerName,\n} from './handlers/FlingGestureHandler';\nimport {\n ForceTouchGestureHandler,\n ForceTouchGestureHandlerEventPayload,\n forceTouchHandlerName,\n} from './handlers/ForceTouchGestureHandler';\nimport {\n BaseGestureHandlerProps,\n GestureEvent,\n HandlerStateChangeEvent,\n} from './handlers/gestureHandlerCommon';\nimport { FlingGesture } from './handlers/gestures/flingGesture';\nimport { ForceTouchGesture } from './handlers/gestures/forceTouchGesture';\nimport { BaseGesture, GestureType } from './handlers/gestures/gesture';\nimport { LongPressGesture } from './handlers/gestures/longPressGesture';\nimport { NativeGesture } from './handlers/gestures/nativeGesture';\nimport { PanGesture } from './handlers/gestures/panGesture';\nimport { PinchGesture } from './handlers/gestures/pinchGesture';\nimport { RotationGesture } from './handlers/gestures/rotationGesture';\nimport { TapGesture } from './handlers/gestures/tapGesture';\nimport { findHandlerByTestID } from './handlers/handlersRegistry';\nimport {\n LongPressGestureHandler,\n LongPressGestureHandlerEventPayload,\n longPressHandlerName,\n} from './handlers/LongPressGestureHandler';\nimport {\n NativeViewGestureHandler,\n NativeViewGestureHandlerPayload,\n nativeViewHandlerName,\n} from './handlers/NativeViewGestureHandler';\nimport {\n PanGestureHandler,\n PanGestureHandlerEventPayload,\n panHandlerName,\n} from './handlers/PanGestureHandler';\nimport {\n PinchGestureHandler,\n PinchGestureHandlerEventPayload,\n pinchHandlerName,\n} from './handlers/PinchGestureHandler';\nimport {\n RotationGestureHandler,\n RotationGestureHandlerEventPayload,\n rotationHandlerName,\n} from './handlers/RotationGestureHandler';\nimport {\n TapGestureHandler,\n TapGestureHandlerEventPayload,\n tapHandlerName,\n} from './handlers/TapGestureHandler';\nimport { State } from './State';\nimport { hasProperty, withPrevAndCurrent } from './utils';\n\n// load fireEvent conditionally, so RNGH may be used in setups without testing-library\nlet fireEvent = (\n _element: ReactTestInstance,\n _name: string,\n ..._data: any[]\n) => {\n // NOOP\n};\n\ntry {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n fireEvent = require('@testing-library/react-native').fireEvent;\n} catch (_e) {\n // do nothing if not available\n}\n\ntype GestureHandlerTestEvent<\n TEventPayload extends Record<string, unknown> = Record<string, unknown>\n> = (\n | GestureEvent<TEventPayload>\n | HandlerStateChangeEvent<TEventPayload>\n)['nativeEvent'];\n\ntype HandlerNames = keyof DefaultEventsMapping;\n\ntype WithNumberOfPointers<T> = {\n [P in keyof T]: T[P] & { numberOfPointers: number };\n};\ntype DefaultEventsMapping = WithNumberOfPointers<{\n [flingHandlerName]: FlingGestureHandlerEventPayload;\n [forceTouchHandlerName]: ForceTouchGestureHandlerEventPayload;\n [longPressHandlerName]: LongPressGestureHandlerEventPayload;\n [nativeViewHandlerName]: NativeViewGestureHandlerPayload;\n [panHandlerName]: PanGestureHandlerEventPayload;\n [pinchHandlerName]: PinchGestureHandlerEventPayload;\n [rotationHandlerName]: RotationGestureHandlerEventPayload;\n [tapHandlerName]: TapGestureHandlerEventPayload;\n}>;\n\nconst handlersDefaultEvents: DefaultEventsMapping = {\n [flingHandlerName]: {\n x: 0,\n y: 0,\n absoluteX: 0,\n absoluteY: 0,\n numberOfPointers: 1,\n },\n [forceTouchHandlerName]: {\n x: 0,\n y: 0,\n absoluteX: 0,\n absoluteY: 0,\n force: 1,\n numberOfPointers: 1,\n },\n [longPressHandlerName]: {\n x: 0,\n y: 0,\n absoluteX: 0,\n absoluteY: 0,\n duration: 100,\n numberOfPointers: 1,\n },\n [nativeViewHandlerName]: {\n pointerInside: true,\n numberOfPointers: 1,\n },\n [panHandlerName]: {\n x: 0,\n y: 0,\n absoluteX: 0,\n absoluteY: 0,\n translationX: 100,\n translationY: 0,\n velocityX: 3,\n velocityY: 0,\n numberOfPointers: 1,\n },\n [pinchHandlerName]: {\n focalX: 0,\n focalY: 0,\n scale: 2,\n velocity: 1,\n numberOfPointers: 2,\n },\n [rotationHandlerName]: {\n anchorX: 0,\n anchorY: 0,\n rotation: 3.14,\n velocity: 2,\n numberOfPointers: 2,\n },\n [tapHandlerName]: {\n x: 0,\n y: 0,\n absoluteX: 0,\n absoluteY: 0,\n numberOfPointers: 1,\n },\n};\n\nfunction isGesture(\n componentOrGesture: ReactTestInstance | GestureType\n): componentOrGesture is GestureType {\n return componentOrGesture instanceof BaseGesture;\n}\n\ninterface WrappedGestureHandlerTestEvent {\n nativeEvent: GestureHandlerTestEvent;\n}\nfunction wrapWithNativeEvent(\n event: GestureHandlerTestEvent\n): WrappedGestureHandlerTestEvent {\n return { nativeEvent: event };\n}\n\nfunction fillOldStateChanges(\n previousEvent: GestureHandlerTestEvent | null,\n currentEvent: Omit<GestureHandlerTestEvent, 'oldState'>\n): GestureHandlerTestEvent {\n const isFirstEvent = previousEvent === null;\n if (isFirstEvent) {\n return {\n oldState: State.UNDETERMINED,\n ...currentEvent,\n } as GestureHandlerTestEvent;\n }\n\n const isGestureStateEvent = previousEvent.state !== currentEvent.state;\n if (isGestureStateEvent) {\n return {\n oldState: previousEvent?.state,\n ...currentEvent,\n } as GestureHandlerTestEvent;\n } else {\n return currentEvent as GestureHandlerTestEvent;\n }\n}\n\ntype EventWithStates = Partial<\n Pick<GestureHandlerTestEvent, 'oldState' | 'state'>\n>;\nfunction validateStateTransitions(\n previousEvent: EventWithStates | null,\n currentEvent: EventWithStates\n) {\n function stringify(event: Record<string, unknown> | null) {\n return JSON.stringify(event, null, 2);\n }\n function errorMsgWithBothEvents(description: string) {\n return `${description}, invalid event: ${stringify(\n currentEvent\n )}, previous event: ${stringify(previousEvent)}`;\n }\n\n function errorMsgWithCurrentEvent(description: string) {\n return `${description}, invalid event: ${stringify(currentEvent)}`;\n }\n\n invariant(\n hasProperty(currentEvent, 'state'),\n errorMsgWithCurrentEvent('every event must have state')\n );\n\n const isFirstEvent = previousEvent === null;\n if (isFirstEvent) {\n invariant(\n currentEvent.state === State.BEGAN,\n errorMsgWithCurrentEvent('first event must have BEGAN state')\n );\n }\n\n if (previousEvent !== null) {\n if (previousEvent.state !== currentEvent.state) {\n invariant(\n hasProperty(currentEvent, 'oldState'),\n errorMsgWithCurrentEvent(\n 'when state changes, oldState field should be present'\n )\n );\n invariant(\n currentEvent.oldState === previousEvent.state,\n errorMsgWithBothEvents(\n \"when state changes, oldState should be the same as previous event' state\"\n )\n );\n }\n }\n\n return currentEvent;\n}\n\ntype EventWithoutStates = Omit<GestureHandlerTestEvent, 'oldState' | 'state'>;\ninterface HandlerInfo {\n handlerType: HandlerNames;\n handlerTag: number;\n}\nfunction fillMissingDefaultsFor({\n handlerType,\n handlerTag,\n}: HandlerInfo): (\n event: Partial<GestureHandlerTestEvent>\n) => EventWithoutStates {\n return (event) => {\n return {\n ...handlersDefaultEvents[handlerType],\n ...event,\n handlerTag,\n };\n };\n}\n\nfunction isDiscreteHandler(handlerType: HandlerNames) {\n return (\n handlerType === 'TapGestureHandler' ||\n handlerType === 'LongPressGestureHandler'\n );\n}\n\nfunction fillMissingStatesTransitions(\n events: EventWithoutStates[],\n isDiscreteHandler: boolean\n): EventWithoutStates[] {\n type Event = EventWithoutStates | null;\n const _events = [...events];\n const lastEvent = _events[_events.length - 1] ?? null;\n const firstEvent = _events[0] ?? null;\n\n const shouldDuplicateFirstEvent =\n !isDiscreteHandler && !hasState(State.BEGAN)(firstEvent);\n if (shouldDuplicateFirstEvent) {\n const duplicated = { ...firstEvent, state: State.BEGAN };\n // @ts-ignore badly typed, property may exist and we don't want to copy it\n delete duplicated.oldState;\n _events.unshift(duplicated);\n }\n\n const shouldDuplicateLastEvent =\n !hasState(State.END)(lastEvent) ||\n !hasState(State.FAILED)(lastEvent) ||\n !hasState(State.CANCELLED)(lastEvent);\n\n if (shouldDuplicateLastEvent) {\n const duplicated = { ...lastEvent, state: State.END };\n // @ts-ignore badly typed, property may exist and we don't want to copy it\n delete duplicated.oldState;\n _events.push(duplicated);\n }\n\n function isWithoutState(event: Event) {\n return event !== null && !hasProperty(event, 'state');\n }\n function hasState(state: State) {\n return (event: Event) => event !== null && event.state === state;\n }\n function noEventsLeft(event: Event) {\n return event === null;\n }\n\n function trueFn() {\n return true;\n }\n interface Args {\n shouldConsumeEvent?: (event: Event) => boolean;\n shouldTransitionToNextState?: (nextEvent: Event) => boolean;\n }\n function fillEventsForCurrentState({\n shouldConsumeEvent = trueFn,\n shouldTransitionToNextState = trueFn,\n }: Args) {\n function peekCurrentEvent(): Event {\n return _events[0] ?? null;\n }\n function peekNextEvent(): Event {\n return _events[1] ?? null;\n }\n function consumeCurrentEvent() {\n _events.shift();\n }\n const currentEvent = peekCurrentEvent();\n const nextEvent = peekNextEvent();\n const currentRequiredState = REQUIRED_EVENTS[currentStateIdx];\n\n let eventData = {};\n const shouldUseEvent = shouldConsumeEvent(currentEvent);\n if (shouldUseEvent) {\n eventData = currentEvent!;\n consumeCurrentEvent();\n }\n transformedEvents.push({ state: currentRequiredState, ...eventData });\n if (shouldTransitionToNextState(nextEvent)) {\n currentStateIdx++;\n }\n }\n\n const REQUIRED_EVENTS = [State.BEGAN, State.ACTIVE, State.END];\n\n let currentStateIdx = 0;\n const transformedEvents: EventWithoutStates[] = [];\n let hasAllStates;\n let iterations = 0;\n do {\n const nextRequiredState = REQUIRED_EVENTS[currentStateIdx];\n if (nextRequiredState === State.BEGAN) {\n fillEventsForCurrentState({\n shouldConsumeEvent: (e: Event) =>\n isWithoutState(e) || hasState(State.BEGAN)(e),\n });\n } else if (nextRequiredState === State.ACTIVE) {\n const shouldConsumeEvent = (e: Event) =>\n isWithoutState(e) || hasState(State.ACTIVE)(e);\n const shouldTransitionToNextState = (nextEvent: Event) =>\n noEventsLeft(nextEvent) ||\n hasState(State.END)(nextEvent) ||\n hasState(State.FAILED)(nextEvent) ||\n hasState(State.CANCELLED)(nextEvent);\n\n fillEventsForCurrentState({\n shouldConsumeEvent,\n shouldTransitionToNextState,\n });\n } else if (nextRequiredState === State.END) {\n fillEventsForCurrentState({});\n }\n hasAllStates = currentStateIdx === REQUIRED_EVENTS.length;\n\n invariant(\n iterations++ <= 500,\n 'exceeded max number of iterations, please report a bug in RNGH repository with your test case'\n );\n } while (!hasAllStates);\n\n return transformedEvents;\n}\n\ntype EventEmitter = (\n eventName: string,\n args: { nativeEvent: GestureHandlerTestEvent }\n) => void;\ninterface HandlerData {\n emitEvent: EventEmitter;\n handlerType: HandlerNames;\n handlerTag: number;\n}\nfunction getHandlerData(\n componentOrGesture: ReactTestInstance | GestureType\n): HandlerData {\n if (isGesture(componentOrGesture)) {\n const gesture = componentOrGesture;\n return {\n emitEvent: (eventName, args) => {\n DeviceEventEmitter.emit(eventName, args.nativeEvent);\n },\n handlerType: gesture.handlerName as HandlerNames,\n handlerTag: gesture.handlerTag,\n };\n }\n const gestureHandlerComponent = componentOrGesture;\n return {\n emitEvent: (eventName, args) => {\n fireEvent(gestureHandlerComponent, eventName, args);\n },\n handlerType: gestureHandlerComponent.props.handlerType as HandlerNames,\n handlerTag: gestureHandlerComponent.props.handlerTag as number,\n };\n}\ntype AllGestures =\n | TapGesture\n | PanGesture\n | LongPressGesture\n | RotationGesture\n | PinchGesture\n | FlingGesture\n | ForceTouchGesture\n | NativeGesture;\n\ntype AllHandlers =\n | TapGestureHandler\n | PanGestureHandler\n | LongPressGestureHandler\n | RotationGestureHandler\n | PinchGestureHandler\n | FlingGestureHandler\n | ForceTouchGestureHandler\n | NativeViewGestureHandler;\n\n// prettier-ignore\ntype ClassComponentConstructor<P> = new (props: P) => React.Component<P, any, any>;\n\ntype ExtractPayloadFromProps<T> = T extends BaseGestureHandlerProps<\n infer TPayload\n>\n ? TPayload\n : never;\n\ntype ExtractConfig<T> = T extends BaseGesture<infer TGesturePayload>\n ? TGesturePayload\n : T extends ClassComponentConstructor<infer THandlerProps>\n ? ExtractPayloadFromProps<THandlerProps>\n : Record<string, unknown>;\n\nexport function fireGestureHandler<THandler extends AllGestures | AllHandlers>(\n componentOrGesture: ReactTestInstance | GestureType,\n eventList: Partial<GestureHandlerTestEvent<ExtractConfig<THandler>>>[] = []\n): void {\n const { emitEvent, handlerType, handlerTag } = getHandlerData(\n componentOrGesture\n );\n\n let _ = fillMissingStatesTransitions(\n eventList,\n isDiscreteHandler(handlerType)\n );\n _ = _.map(fillMissingDefaultsFor({ handlerTag, handlerType }));\n _ = withPrevAndCurrent(_, fillOldStateChanges);\n _ = withPrevAndCurrent(_, validateStateTransitions);\n // @ts-ignore TODO\n _ = _.map(wrapWithNativeEvent);\n\n const events = (_ as unknown) as WrappedGestureHandlerTestEvent[];\n\n const firstEvent = events.shift()!;\n\n emitEvent('onGestureHandlerStateChange', firstEvent);\n let lastSentEvent = firstEvent;\n for (const event of events) {\n const hasChangedState =\n lastSentEvent.nativeEvent.state !== event.nativeEvent.state;\n\n if (hasChangedState) {\n emitEvent('onGestureHandlerStateChange', event);\n } else {\n emitEvent('onGestureHandlerEvent', event);\n }\n lastSentEvent = event;\n }\n}\n\nexport function getByGestureTestId(testID: string) {\n const handler = findHandlerByTestID(testID);\n if (handler === null) {\n throw new Error(`Handler with id: '${testID}' cannot be found`);\n }\n return handler;\n}\n"]}
|
package/lib/module/utils.js
CHANGED
@@ -5,4 +5,32 @@ export function toArray(object) {
|
|
5
5
|
|
6
6
|
return object;
|
7
7
|
}
|
8
|
+
export function withPrevAndCurrent(array, mapFn) {
|
9
|
+
const previousArr = [null];
|
10
|
+
const currentArr = [...array];
|
11
|
+
const transformedArr = [];
|
12
|
+
currentArr.forEach((current, i) => {
|
13
|
+
const previous = previousArr[i];
|
14
|
+
const transformed = mapFn(previous, current);
|
15
|
+
previousArr.push(transformed);
|
16
|
+
transformedArr.push(transformed);
|
17
|
+
});
|
18
|
+
return transformedArr;
|
19
|
+
} // eslint-disable-next-line @typescript-eslint/ban-types
|
20
|
+
|
21
|
+
export function hasProperty(object, key) {
|
22
|
+
return Object.prototype.hasOwnProperty.call(object, key);
|
23
|
+
}
|
24
|
+
export function isJestEnv() {
|
25
|
+
return hasProperty(global, 'process') && !!process.env.JEST_WORKER_ID;
|
26
|
+
}
|
27
|
+
export function tagMessage(msg) {
|
28
|
+
return `[react-native-gesture-handler] ${msg}`;
|
29
|
+
}
|
30
|
+
export function isFabric() {
|
31
|
+
var _global;
|
32
|
+
|
33
|
+
// @ts-expect-error nativeFabricUIManager is not yet included in the RN types
|
34
|
+
return !!((_global = global) !== null && _global !== void 0 && _global.nativeFabricUIManager);
|
35
|
+
}
|
8
36
|
//# sourceMappingURL=utils.js.map
|
package/lib/module/utils.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["utils.ts"],"names":["toArray","object","Array","isArray"],"mappings":"AAAA,OAAO,SAASA,OAAT,CAAoBC,MAApB,EAA0C;AAC/C,MAAI,CAACC,KAAK,CAACC,OAAN,CAAcF,MAAd,CAAL,EAA4B;AAC1B,WAAO,CAACA,MAAD,CAAP;AACD;;AAED,SAAOA,MAAP;AACD","sourcesContent":["export function toArray<T>(object: T | T[]): T[] {\n if (!Array.isArray(object)) {\n return [object];\n }\n\n return object;\n}\n"]}
|
1
|
+
{"version":3,"sources":["utils.ts"],"names":["toArray","object","Array","isArray","withPrevAndCurrent","array","mapFn","previousArr","currentArr","transformedArr","forEach","current","i","previous","transformed","push","hasProperty","key","Object","prototype","hasOwnProperty","call","isJestEnv","global","process","env","JEST_WORKER_ID","tagMessage","msg","isFabric","nativeFabricUIManager"],"mappings":"AAAA,OAAO,SAASA,OAAT,CAAoBC,MAApB,EAA0C;AAC/C,MAAI,CAACC,KAAK,CAACC,OAAN,CAAcF,MAAd,CAAL,EAA4B;AAC1B,WAAO,CAACA,MAAD,CAAP;AACD;;AAED,SAAOA,MAAP;AACD;AAMD,OAAO,SAASG,kBAAT,CACLC,KADK,EAELC,KAFK,EAGU;AACf,QAAMC,WAAmC,GAAG,CAAC,IAAD,CAA5C;AACA,QAAMC,UAAU,GAAG,CAAC,GAAGH,KAAJ,CAAnB;AACA,QAAMI,cAA6B,GAAG,EAAtC;AACAD,EAAAA,UAAU,CAACE,OAAX,CAAmB,CAACC,OAAD,EAAUC,CAAV,KAAgB;AACjC,UAAMC,QAAQ,GAAGN,WAAW,CAACK,CAAD,CAA5B;AACA,UAAME,WAAW,GAAGR,KAAK,CAACO,QAAD,EAAWF,OAAX,CAAzB;AACAJ,IAAAA,WAAW,CAACQ,IAAZ,CAAiBD,WAAjB;AACAL,IAAAA,cAAc,CAACM,IAAf,CAAoBD,WAApB;AACD,GALD;AAMA,SAAOL,cAAP;AACD,C,CAED;;AACA,OAAO,SAASO,WAAT,CAAqBf,MAArB,EAAqCgB,GAArC,EAAkD;AACvD,SAAOC,MAAM,CAACC,SAAP,CAAiBC,cAAjB,CAAgCC,IAAhC,CAAqCpB,MAArC,EAA6CgB,GAA7C,CAAP;AACD;AAED,OAAO,SAASK,SAAT,GAA8B;AACnC,SAAON,WAAW,CAACO,MAAD,EAAS,SAAT,CAAX,IAAkC,CAAC,CAACC,OAAO,CAACC,GAAR,CAAYC,cAAvD;AACD;AAED,OAAO,SAASC,UAAT,CAAoBC,GAApB,EAAiC;AACtC,SAAQ,kCAAiCA,GAAI,EAA7C;AACD;AAED,OAAO,SAASC,QAAT,GAA6B;AAAA;;AAClC;AACA,SAAO,CAAC,aAACN,MAAD,oCAAC,QAAQO,qBAAT,CAAR;AACD","sourcesContent":["export function toArray<T>(object: T | T[]): T[] {\n if (!Array.isArray(object)) {\n return [object];\n }\n\n return object;\n}\n\nexport type withPrevAndCurrentMapFn<T, Transformed> = (\n previous: Transformed | null,\n current: T\n) => Transformed;\nexport function withPrevAndCurrent<T, Transformed>(\n array: T[],\n mapFn: withPrevAndCurrentMapFn<T, Transformed>\n): Transformed[] {\n const previousArr: (null | Transformed)[] = [null];\n const currentArr = [...array];\n const transformedArr: Transformed[] = [];\n currentArr.forEach((current, i) => {\n const previous = previousArr[i];\n const transformed = mapFn(previous, current);\n previousArr.push(transformed);\n transformedArr.push(transformed);\n });\n return transformedArr;\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function hasProperty(object: object, key: string) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nexport function isJestEnv(): boolean {\n return hasProperty(global, 'process') && !!process.env.JEST_WORKER_ID;\n}\n\nexport function tagMessage(msg: string) {\n return `[react-native-gesture-handler] ${msg}`;\n}\n\nexport function isFabric(): boolean {\n // @ts-expect-error nativeFabricUIManager is not yet included in the RN types\n return !!global?.nativeFabricUIManager;\n}\n"]}
|
@@ -1,2 +1,5 @@
|
|
1
|
-
import {
|
2
|
-
|
1
|
+
import { PropsWithChildren } from 'react';
|
2
|
+
import { ViewProps } from 'react-native';
|
3
|
+
export interface GestureHandlerRootViewProps extends PropsWithChildren<ViewProps> {
|
4
|
+
}
|
5
|
+
export default function GestureHandlerRootView(props: GestureHandlerRootViewProps): JSX.Element;
|
@@ -2,4 +2,4 @@ import { PropsWithChildren } from 'react';
|
|
2
2
|
import { ViewProps } from 'react-native';
|
3
3
|
export interface GestureHandlerRootViewProps extends PropsWithChildren<ViewProps> {
|
4
4
|
}
|
5
|
-
export default function GestureHandlerRootView(
|
5
|
+
export default function GestureHandlerRootView(props: GestureHandlerRootViewProps): JSX.Element;
|
@@ -1,10 +1,12 @@
|
|
1
|
+
import { ActionType } from './ActionType';
|
1
2
|
export declare type RNGestureHandlerModuleProps = {
|
2
3
|
handleSetJSResponder: (tag: number, blockNativeResponder: boolean) => void;
|
3
4
|
handleClearJSResponder: () => void;
|
4
5
|
createGestureHandler: (handlerName: string, handlerTag: number, config: Readonly<Record<string, unknown>>) => void;
|
5
|
-
attachGestureHandler: (handlerTag: number, newView: number,
|
6
|
+
attachGestureHandler: (handlerTag: number, newView: number, actionType: ActionType) => void;
|
6
7
|
updateGestureHandler: (handlerTag: number, newConfig: Readonly<Record<string, unknown>>) => void;
|
7
8
|
dropGestureHandler: (handlerTag: number) => void;
|
9
|
+
install: () => void;
|
8
10
|
};
|
9
11
|
declare const _default: RNGestureHandlerModuleProps;
|
10
12
|
export default _default;
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import { ActionType } from './ActionType';
|
1
2
|
import FlingGestureHandler from './web/FlingGestureHandler';
|
2
3
|
import LongPressGestureHandler from './web/LongPressGestureHandler';
|
3
4
|
import NativeViewGestureHandler from './web/NativeViewGestureHandler';
|
@@ -24,7 +25,7 @@ declare const _default: {
|
|
24
25
|
handleSetJSResponder(tag: number, blockNativeResponder: boolean): void;
|
25
26
|
handleClearJSResponder(): void;
|
26
27
|
createGestureHandler<T>(handlerName: keyof typeof Gestures, handlerTag: number, config: T): void;
|
27
|
-
attachGestureHandler(handlerTag: number, newView: number,
|
28
|
+
attachGestureHandler(handlerTag: number, newView: number, _actionType: ActionType, propsRef: React.RefObject<unknown>): void;
|
28
29
|
updateGestureHandler(handlerTag: number, newConfig: any): void;
|
29
30
|
getGestureHandlerNode(handlerTag: number): PanGestureHandler | RotationGestureHandler | PinchGestureHandler | TapGestureHandler | NativeViewGestureHandler | LongPressGestureHandler | FlingGestureHandler;
|
30
31
|
dropGestureHandler(handlerTag: number): void;
|
@@ -1,4 +1,4 @@
|
|
1
1
|
import { HostComponent } from 'react-native';
|
2
2
|
import { RawButtonProps } from './GestureButtons';
|
3
|
-
declare const
|
4
|
-
export default
|
3
|
+
declare const _default: HostComponent<RawButtonProps>;
|
4
|
+
export default _default;
|
@@ -49,37 +49,45 @@ export interface SwipeableProps extends Pick<PanGestureHandlerProps, SwipeableEx
|
|
49
49
|
*/
|
50
50
|
overshootFriction?: number;
|
51
51
|
/**
|
52
|
+
* @deprecated Use `direction` argument of onSwipeableOpen()
|
53
|
+
*
|
52
54
|
* Called when left action panel gets open.
|
53
55
|
*/
|
54
56
|
onSwipeableLeftOpen?: () => void;
|
55
57
|
/**
|
58
|
+
* @deprecated Use `direction` argument of onSwipeableOpen()
|
59
|
+
*
|
56
60
|
* Called when right action panel gets open.
|
57
61
|
*/
|
58
62
|
onSwipeableRightOpen?: () => void;
|
59
63
|
/**
|
60
64
|
* Called when action panel gets open (either right or left).
|
61
65
|
*/
|
62
|
-
onSwipeableOpen?: () => void;
|
66
|
+
onSwipeableOpen?: (direction: 'left' | 'right') => void;
|
63
67
|
/**
|
64
68
|
* Called when action panel is closed.
|
65
69
|
*/
|
66
|
-
onSwipeableClose?: () => void;
|
70
|
+
onSwipeableClose?: (direction: 'left' | 'right') => void;
|
67
71
|
/**
|
72
|
+
* @deprecated Use `direction` argument of onSwipeableWillOpen()
|
73
|
+
*
|
68
74
|
* Called when left action panel starts animating on open.
|
69
75
|
*/
|
70
76
|
onSwipeableLeftWillOpen?: () => void;
|
71
77
|
/**
|
78
|
+
* @deprecated Use `direction` argument of onSwipeableWillOpen()
|
79
|
+
*
|
72
80
|
* Called when right action panel starts animating on open.
|
73
81
|
*/
|
74
82
|
onSwipeableRightWillOpen?: () => void;
|
75
83
|
/**
|
76
84
|
* Called when action panel starts animating on open (either right or left).
|
77
85
|
*/
|
78
|
-
onSwipeableWillOpen?: () => void;
|
86
|
+
onSwipeableWillOpen?: (direction: 'left' | 'right') => void;
|
79
87
|
/**
|
80
88
|
* Called when action panel starts animating on close.
|
81
89
|
*/
|
82
|
-
onSwipeableWillClose?: () => void;
|
90
|
+
onSwipeableWillClose?: (direction: 'left' | 'right') => void;
|
83
91
|
/**
|
84
92
|
*
|
85
93
|
* This map describes the values to use as inputRange for extra interpolation:
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare function getShadowNodeFromRef(ref: any): any;
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare function getShadowNodeFromRef(_ref: any): null;
|
@@ -29,5 +29,6 @@ export interface FlingGestureConfig {
|
|
29
29
|
}
|
30
30
|
export interface FlingGestureHandlerProps extends BaseGestureHandlerProps<FlingGestureHandlerEventPayload>, FlingGestureConfig {
|
31
31
|
}
|
32
|
+
export declare const flingHandlerName = "FlingGestureHandler";
|
32
33
|
export declare type FlingGestureHandler = typeof FlingGestureHandler;
|
33
34
|
export declare const FlingGestureHandler: import("react").ComponentType<FlingGestureHandlerProps & import("react").RefAttributes<any>>;
|
@@ -39,5 +39,6 @@ export interface ForceTouchGestureHandlerProps extends BaseGestureHandlerProps<F
|
|
39
39
|
export declare type ForceTouchGestureHandler = typeof ForceTouchGestureHandler & {
|
40
40
|
forceTouchAvailable: boolean;
|
41
41
|
};
|
42
|
-
export declare const
|
42
|
+
export declare const forceTouchHandlerName = "ForceTouchGestureHandler";
|
43
|
+
export declare const ForceTouchGestureHandler: typeof ForceTouchFallback | React.ComponentType<ForceTouchGestureHandlerProps & React.RefAttributes<any>>;
|
43
44
|
export {};
|
@@ -51,5 +51,6 @@ export interface LongPressGestureConfig {
|
|
51
51
|
}
|
52
52
|
export interface LongPressGestureHandlerProps extends BaseGestureHandlerProps<LongPressGestureHandlerEventPayload>, LongPressGestureConfig {
|
53
53
|
}
|
54
|
+
export declare const longPressHandlerName = "LongPressGestureHandler";
|
54
55
|
export declare type LongPressGestureHandler = typeof LongPressGestureHandler;
|
55
56
|
export declare const LongPressGestureHandler: import("react").ComponentType<LongPressGestureHandlerProps & import("react").RefAttributes<any>>;
|
@@ -23,5 +23,6 @@ export declare type NativeViewGestureHandlerPayload = {
|
|
23
23
|
pointerInside: boolean;
|
24
24
|
};
|
25
25
|
export declare const nativeViewProps: readonly ["id", "enabled", "shouldCancelWhenOutside", "hitSlop", "waitFor", "simultaneousHandlers", "onBegan", "onFailed", "onCancelled", "onActivated", "onEnded", "onGestureEvent", "onHandlerStateChange", "shouldActivateOnStart", "disallowInterruption"];
|
26
|
+
export declare const nativeViewHandlerName = "NativeViewGestureHandler";
|
26
27
|
export declare type NativeViewGestureHandler = typeof NativeViewGestureHandler;
|
27
28
|
export declare const NativeViewGestureHandler: import("react").ComponentType<NativeViewGestureHandlerProps & import("react").RefAttributes<any>>;
|
@@ -131,6 +131,7 @@ export interface PanGestureHandlerProps extends BaseGestureHandlerProps<PanGestu
|
|
131
131
|
*/
|
132
132
|
failOffsetX?: number | number[];
|
133
133
|
}
|
134
|
+
export declare const panHandlerName = "PanGestureHandler";
|
134
135
|
export declare type PanGestureHandler = typeof PanGestureHandler;
|
135
136
|
export declare const PanGestureHandler: import("react").ComponentType<PanGestureHandlerProps & import("react").RefAttributes<any>>;
|
136
137
|
export declare function managePanProps(props: PanGestureHandlerProps): PanGestureHandlerProps & Partial<Record<"failOffsetXStart" | "failOffsetYStart" | "failOffsetXEnd" | "failOffsetYEnd" | "activeOffsetXStart" | "activeOffsetXEnd" | "activeOffsetYStart" | "activeOffsetYEnd", number>>;
|
@@ -24,5 +24,6 @@ export declare type PinchGestureHandlerEventPayload = {
|
|
24
24
|
};
|
25
25
|
export interface PinchGestureHandlerProps extends BaseGestureHandlerProps<PinchGestureHandlerEventPayload> {
|
26
26
|
}
|
27
|
+
export declare const pinchHandlerName = "PinchGestureHandler";
|
27
28
|
export declare type PinchGestureHandler = typeof PinchGestureHandler;
|
28
29
|
export declare const PinchGestureHandler: import("react").ComponentType<PinchGestureHandlerProps & import("react").RefAttributes<any>>;
|
@@ -24,5 +24,6 @@ export declare type RotationGestureHandlerEventPayload = {
|
|
24
24
|
};
|
25
25
|
export interface RotationGestureHandlerProps extends BaseGestureHandlerProps<RotationGestureHandlerEventPayload> {
|
26
26
|
}
|
27
|
+
export declare const rotationHandlerName = "RotationGestureHandler";
|
27
28
|
export declare type RotationGestureHandler = typeof RotationGestureHandler;
|
28
29
|
export declare const RotationGestureHandler: import("react").ComponentType<RotationGestureHandlerProps & import("react").RefAttributes<any>>;
|
@@ -52,5 +52,6 @@ export interface TapGestureConfig {
|
|
52
52
|
}
|
53
53
|
export interface TapGestureHandlerProps extends BaseGestureHandlerProps<TapGestureHandlerEventPayload>, TapGestureConfig {
|
54
54
|
}
|
55
|
+
export declare const tapHandlerName = "TapGestureHandler";
|
55
56
|
export declare type TapGestureHandler = typeof TapGestureHandler;
|
56
57
|
export declare const TapGestureHandler: import("react").ComponentType<TapGestureHandlerProps & import("react").RefAttributes<any>>;
|