react-native-gesture-handler 2.5.0 → 2.6.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/README.md +1 -0
- package/RNGestureHandler.podspec +17 -5
- package/android/build.gradle +71 -15
- package/android/lib/src/main/java/com/swmansion/gesturehandler/FlingGestureHandler.kt +2 -1
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.kt +30 -9
- package/android/lib/src/main/java/com/swmansion/gesturehandler/LongPressGestureHandler.kt +5 -2
- package/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.kt +2 -1
- package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt +2 -1
- package/android/lib/src/main/java/com/swmansion/gesturehandler/TapGestureHandler.kt +3 -2
- package/android/src/fabric/java/com/swmansion/gesturehandler/RNGestureHandlerComponentsRegistry.java +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +0 -8
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +7 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +1 -1
- package/android/src/main/jni/CMakeLists.txt +59 -0
- package/ios/RNGestureHandlerButtonComponentView.mm +1 -1
- package/ios/RNGestureHandlerManager.mm +0 -5
- package/ios/RNGestureHandlerRootViewComponentView.mm +1 -1
- package/lib/commonjs/EnableExperimentalWebImplementation.js +24 -0
- package/lib/commonjs/EnableExperimentalWebImplementation.js.map +1 -0
- package/lib/commonjs/RNGestureHandlerModule.macos.js +87 -30
- package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.web.js +87 -25
- package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/commonjs/RNRenderer.js +16 -0
- package/lib/commonjs/RNRenderer.js.map +1 -0
- package/lib/commonjs/RNRenderer.web.js +11 -0
- package/lib/commonjs/RNRenderer.web.js.map +1 -0
- package/lib/commonjs/components/DrawerLayout.js +3 -1
- package/lib/commonjs/components/DrawerLayout.js.map +1 -1
- package/lib/commonjs/components/GestureButtons.js +42 -9
- package/lib/commonjs/components/GestureButtons.js.map +1 -1
- package/lib/commonjs/components/GestureComponents.js +41 -4
- package/lib/commonjs/components/GestureComponents.js.map +1 -1
- package/lib/commonjs/components/GestureComponents.web.js +7 -2
- package/lib/commonjs/components/GestureComponents.web.js.map +1 -1
- package/lib/commonjs/components/Swipeable.js +3 -1
- package/lib/commonjs/components/Swipeable.js.map +1 -1
- package/lib/commonjs/components/touchables/GenericTouchable.js +2 -1
- package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
- package/lib/commonjs/handlers/createHandler.js +8 -1
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector.js +67 -12
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +7 -0
- package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -1
- package/lib/commonjs/index.js +14 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/web/constants.js +3 -51
- package/lib/commonjs/web/constants.js.map +1 -1
- package/lib/commonjs/web/detectors/RotationGestureDetector.js +169 -0
- package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -0
- package/lib/commonjs/web/detectors/ScaleGestureDetector.js +167 -0
- package/lib/commonjs/web/detectors/ScaleGestureDetector.js.map +1 -0
- package/lib/commonjs/web/handlers/FlingGestureHandler.js +154 -0
- package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/GestureHandler.js +538 -0
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js +147 -0
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +116 -0
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/PanGestureHandler.js +451 -0
- package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/PinchGestureHandler.js +171 -0
- package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/RotationGestureHandler.js +187 -0
- package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/TapGestureHandler.js +296 -0
- package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -0
- package/lib/commonjs/web/interfaces.js +34 -0
- package/lib/commonjs/web/interfaces.js.map +1 -0
- package/lib/commonjs/web/tools/EventManager.js +169 -0
- package/lib/commonjs/web/tools/EventManager.js.map +1 -0
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +283 -0
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -0
- package/lib/commonjs/web/tools/InteractionManager.js +102 -0
- package/lib/commonjs/web/tools/InteractionManager.js.map +1 -0
- package/lib/commonjs/web/tools/NodeManager.js +48 -0
- package/lib/commonjs/web/tools/NodeManager.js.map +1 -0
- package/lib/commonjs/web/tools/PointerTracker.js +132 -0
- package/lib/commonjs/web/tools/PointerTracker.js.map +1 -0
- package/lib/commonjs/{web → web_hammer}/DiscreteGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/DiscreteGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/DraggingGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/DraggingGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/Errors.js +0 -0
- package/lib/commonjs/{web → web_hammer}/Errors.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/FlingGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/FlingGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/GestureHandler.js +83 -42
- package/lib/commonjs/web_hammer/GestureHandler.js.map +1 -0
- package/lib/commonjs/{web → web_hammer}/IndiscreteGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/IndiscreteGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/LongPressGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/LongPressGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/NativeViewGestureHandler.js +4 -0
- package/lib/commonjs/web_hammer/NativeViewGestureHandler.js.map +1 -0
- package/lib/commonjs/{web → web_hammer}/NodeManager.js +0 -0
- package/lib/commonjs/web_hammer/NodeManager.js.map +1 -0
- package/lib/commonjs/{web → web_hammer}/PanGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/PanGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/PinchGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/PinchGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/PressGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/PressGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/RotationGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/RotationGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/TapGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/TapGestureHandler.js.map +0 -0
- package/lib/commonjs/web_hammer/constants.js +64 -0
- package/lib/commonjs/web_hammer/constants.js.map +1 -0
- package/lib/commonjs/{web → web_hammer}/utils.js +0 -0
- package/lib/commonjs/{web → web_hammer}/utils.js.map +0 -0
- package/lib/module/EnableExperimentalWebImplementation.js +15 -0
- package/lib/module/EnableExperimentalWebImplementation.js.map +1 -0
- package/lib/module/RNGestureHandlerModule.macos.js +74 -29
- package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.web.js +73 -24
- package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/module/RNRenderer.js +4 -0
- package/lib/module/RNRenderer.js.map +1 -0
- package/lib/module/RNRenderer.web.js +4 -0
- package/lib/module/RNRenderer.web.js.map +1 -0
- package/lib/module/components/DrawerLayout.js +3 -1
- package/lib/module/components/DrawerLayout.js.map +1 -1
- package/lib/module/components/GestureButtons.js +43 -9
- package/lib/module/components/GestureButtons.js.map +1 -1
- package/lib/module/components/GestureComponents.js +39 -4
- package/lib/module/components/GestureComponents.js.map +1 -1
- package/lib/module/components/GestureComponents.web.js +6 -2
- package/lib/module/components/GestureComponents.web.js.map +1 -1
- package/lib/module/components/Swipeable.js +3 -1
- package/lib/module/components/Swipeable.js.map +1 -1
- package/lib/module/components/touchables/GenericTouchable.js +2 -1
- package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
- package/lib/module/handlers/createHandler.js +9 -2
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector.js +64 -11
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/module/handlers/gestures/reanimatedWrapper.js +7 -0
- package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -1
- package/lib/module/index.js +2 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/web/constants.js +1 -36
- package/lib/module/web/constants.js.map +1 -1
- package/lib/module/web/detectors/RotationGestureDetector.js +159 -0
- package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -0
- package/lib/module/web/detectors/ScaleGestureDetector.js +156 -0
- package/lib/module/web/detectors/ScaleGestureDetector.js.map +1 -0
- package/lib/module/web/handlers/FlingGestureHandler.js +139 -0
- package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/GestureHandler.js +521 -0
- package/lib/module/web/handlers/GestureHandler.js.map +1 -0
- package/lib/module/web/handlers/LongPressGestureHandler.js +133 -0
- package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/NativeViewGestureHandler.js +103 -0
- package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/PanGestureHandler.js +434 -0
- package/lib/module/web/handlers/PanGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/PinchGestureHandler.js +155 -0
- package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/RotationGestureHandler.js +171 -0
- package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/TapGestureHandler.js +281 -0
- package/lib/module/web/handlers/TapGestureHandler.js.map +1 -0
- package/lib/module/web/interfaces.js +26 -0
- package/lib/module/web/interfaces.js.map +1 -0
- package/lib/module/web/tools/EventManager.js +160 -0
- package/lib/module/web/tools/EventManager.js.map +1 -0
- package/lib/module/web/tools/GestureHandlerOrchestrator.js +270 -0
- package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -0
- package/lib/module/web/tools/InteractionManager.js +93 -0
- package/lib/module/web/tools/InteractionManager.js.map +1 -0
- package/lib/module/web/tools/NodeManager.js +39 -0
- package/lib/module/web/tools/NodeManager.js.map +1 -0
- package/lib/module/web/tools/PointerTracker.js +122 -0
- package/lib/module/web/tools/PointerTracker.js.map +1 -0
- package/lib/module/{web → web_hammer}/DiscreteGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/DiscreteGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/DraggingGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/DraggingGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/Errors.js +0 -0
- package/lib/module/{web → web_hammer}/Errors.js.map +0 -0
- package/lib/module/{web → web_hammer}/FlingGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/FlingGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/GestureHandler.js +83 -42
- package/lib/module/web_hammer/GestureHandler.js.map +1 -0
- package/lib/module/{web → web_hammer}/IndiscreteGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/IndiscreteGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/LongPressGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/LongPressGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/NativeViewGestureHandler.js +4 -0
- package/lib/module/web_hammer/NativeViewGestureHandler.js.map +1 -0
- package/lib/module/{web → web_hammer}/NodeManager.js +0 -0
- package/lib/module/web_hammer/NodeManager.js.map +1 -0
- package/lib/module/{web → web_hammer}/PanGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/PanGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/PinchGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/PinchGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/PressGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/PressGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/RotationGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/RotationGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/TapGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/TapGestureHandler.js.map +0 -0
- package/lib/module/web_hammer/constants.js +43 -0
- package/lib/module/web_hammer/constants.js.map +1 -0
- package/lib/module/{web → web_hammer}/utils.js +0 -0
- package/lib/module/{web → web_hammer}/utils.js.map +0 -0
- package/lib/typescript/EnableExperimentalWebImplementation.d.ts +2 -0
- package/lib/typescript/RNGestureHandlerModule.macos.d.ts +28 -18
- package/lib/typescript/RNGestureHandlerModule.web.d.ts +29 -18
- package/lib/typescript/RNRenderer.d.ts +1 -0
- package/lib/typescript/RNRenderer.web.d.ts +3 -0
- package/lib/typescript/components/DrawerLayout.d.ts +1 -1
- package/lib/typescript/components/GestureButtons.d.ts +16 -0
- package/lib/typescript/components/GestureComponents.d.ts +7 -3
- package/lib/typescript/components/GestureComponents.web.d.ts +1 -0
- package/lib/typescript/components/Swipeable.d.ts +1 -1
- package/lib/typescript/index.d.ts +2 -1
- package/lib/typescript/web/constants.d.ts +1 -33
- package/lib/typescript/web/detectors/RotationGestureDetector.d.ts +30 -0
- package/lib/typescript/web/detectors/ScaleGestureDetector.d.ts +30 -0
- package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +31 -0
- package/lib/typescript/web/handlers/GestureHandler.d.ts +84 -0
- package/lib/typescript/web/handlers/LongPressGestureHandler.d.ts +33 -0
- package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +16 -0
- package/lib/typescript/web/handlers/PanGestureHandler.d.ts +68 -0
- package/lib/typescript/web/handlers/PinchGestureHandler.d.ts +30 -0
- package/lib/typescript/web/handlers/RotationGestureHandler.d.ts +30 -0
- package/lib/typescript/web/handlers/TapGestureHandler.d.ts +49 -0
- package/lib/typescript/web/interfaces.d.ts +97 -0
- package/lib/typescript/web/tools/EventManager.d.ts +28 -0
- package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +28 -0
- package/lib/typescript/web/tools/InteractionManager.d.ts +13 -0
- package/lib/typescript/web/tools/NodeManager.d.ts +11 -0
- package/lib/typescript/web/tools/PointerTracker.d.ts +28 -0
- package/lib/typescript/{web → web_hammer}/DiscreteGestureHandler.d.ts +0 -0
- package/lib/typescript/{web → web_hammer}/DraggingGestureHandler.d.ts +0 -0
- package/lib/typescript/{web → web_hammer}/Errors.d.ts +0 -0
- package/lib/typescript/{web → web_hammer}/FlingGestureHandler.d.ts +1 -0
- package/lib/typescript/{web → web_hammer}/GestureHandler.d.ts +6 -0
- package/lib/typescript/{web → web_hammer}/IndiscreteGestureHandler.d.ts +1 -0
- package/lib/typescript/{web → web_hammer}/LongPressGestureHandler.d.ts +1 -0
- package/lib/typescript/{web → web_hammer}/NativeViewGestureHandler.d.ts +1 -0
- package/lib/typescript/web_hammer/NodeManager.d.ts +8 -0
- package/lib/typescript/{web → web_hammer}/PanGestureHandler.d.ts +1 -0
- package/lib/typescript/{web → web_hammer}/PinchGestureHandler.d.ts +0 -0
- package/lib/typescript/{web → web_hammer}/PressGestureHandler.d.ts +2 -0
- package/lib/typescript/{web → web_hammer}/RotationGestureHandler.d.ts +0 -0
- package/lib/typescript/{web → web_hammer}/TapGestureHandler.d.ts +1 -0
- package/lib/typescript/web_hammer/constants.d.ts +39 -0
- package/lib/typescript/{web → web_hammer}/utils.d.ts +0 -0
- package/package.json +1 -1
- package/src/EnableExperimentalWebImplementation.ts +18 -0
- package/src/RNGestureHandlerModule.macos.ts +81 -29
- package/src/RNGestureHandlerModule.web.ts +89 -26
- package/src/RNRenderer.ts +3 -0
- package/src/RNRenderer.web.ts +3 -0
- package/src/components/DrawerLayout.tsx +3 -4
- package/src/components/GestureButtons.tsx +57 -0
- package/src/components/GestureComponents.tsx +66 -6
- package/src/components/GestureComponents.web.tsx +5 -0
- package/src/components/Swipeable.tsx +3 -1
- package/src/components/touchables/GenericTouchable.tsx +1 -0
- package/src/handlers/createHandler.tsx +13 -2
- package/src/handlers/gestures/GestureDetector.tsx +78 -12
- package/src/handlers/gestures/reanimatedWrapper.ts +7 -0
- package/src/index.ts +3 -0
- package/src/web/constants.ts +1 -41
- package/src/web/detectors/RotationGestureDetector.ts +199 -0
- package/src/web/detectors/ScaleGestureDetector.ts +208 -0
- package/src/web/handlers/FlingGestureHandler.ts +146 -0
- package/src/web/handlers/GestureHandler.ts +572 -0
- package/src/web/handlers/LongPressGestureHandler.ts +122 -0
- package/src/web/handlers/NativeViewGestureHandler.ts +109 -0
- package/src/web/handlers/PanGestureHandler.ts +488 -0
- package/src/web/handlers/PinchGestureHandler.ts +162 -0
- package/src/web/handlers/RotationGestureHandler.ts +181 -0
- package/src/web/handlers/TapGestureHandler.ts +275 -0
- package/src/web/interfaces.ts +114 -0
- package/src/web/tools/EventManager.ts +186 -0
- package/src/web/tools/GestureHandlerOrchestrator.ts +329 -0
- package/src/web/tools/InteractionManager.ts +108 -0
- package/src/web/tools/NodeManager.ts +43 -0
- package/src/web/tools/PointerTracker.ts +130 -0
- package/src/{web → web_hammer}/DiscreteGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/DraggingGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/Errors.ts +0 -0
- package/src/{web → web_hammer}/FlingGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/GestureHandler.ts +102 -55
- package/src/{web → web_hammer}/IndiscreteGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/LongPressGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/NativeViewGestureHandler.ts +4 -0
- package/src/{web → web_hammer}/NodeManager.ts +6 -3
- package/src/{web → web_hammer}/PanGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/PinchGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/PressGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/RotationGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/TapGestureHandler.ts +0 -0
- package/src/web_hammer/constants.ts +48 -0
- package/src/{web → web_hammer}/utils.ts +0 -0
- package/android/src/main/jni/Android.mk +0 -52
- package/android/src/main/jni/OnLoad.cpp +0 -9
- package/android/src/main/jni/RNGestureHandlerComponentsRegistry.cpp +0 -71
- package/android/src/main/jni/RNGestureHandlerComponentsRegistry.h +0 -34
- package/lib/commonjs/web/GestureHandler.js.map +0 -1
- package/lib/commonjs/web/NativeViewGestureHandler.js.map +0 -1
- package/lib/commonjs/web/NodeManager.js.map +0 -1
- package/lib/module/web/GestureHandler.js.map +0 -1
- package/lib/module/web/NativeViewGestureHandler.js.map +0 -1
- package/lib/module/web/NodeManager.js.map +0 -1
- package/lib/typescript/web/NodeManager.d.ts +0 -8
|
@@ -0,0 +1,572 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-empty-function */
|
|
2
|
+
import { findNodeHandle } from 'react-native';
|
|
3
|
+
import { State } from '../../State';
|
|
4
|
+
import {
|
|
5
|
+
Config,
|
|
6
|
+
AdaptedPointerEvent,
|
|
7
|
+
PropsRef,
|
|
8
|
+
ResultEvent,
|
|
9
|
+
} from '../interfaces';
|
|
10
|
+
import EventManager from '../tools/EventManager';
|
|
11
|
+
import GestureHandlerOrchestrator from '../tools/GestureHandlerOrchestrator';
|
|
12
|
+
import InteractionManager from '../tools/InteractionManager';
|
|
13
|
+
import PointerTracker from '../tools/PointerTracker';
|
|
14
|
+
|
|
15
|
+
export default abstract class GestureHandler {
|
|
16
|
+
private lastSentState: State | null = null;
|
|
17
|
+
protected currentState: State = State.UNDETERMINED;
|
|
18
|
+
|
|
19
|
+
protected shouldCancellWhenOutside = false;
|
|
20
|
+
protected hasCustomActivationCriteria: boolean;
|
|
21
|
+
protected enabled = false;
|
|
22
|
+
|
|
23
|
+
private ref!: number;
|
|
24
|
+
private propsRef!: React.RefObject<unknown>;
|
|
25
|
+
protected config: Config = { enabled: false };
|
|
26
|
+
private handlerTag!: number;
|
|
27
|
+
protected view: HTMLElement | null = null;
|
|
28
|
+
|
|
29
|
+
protected eventManager!: EventManager;
|
|
30
|
+
protected tracker: PointerTracker = new PointerTracker();
|
|
31
|
+
protected interactionManager!: InteractionManager;
|
|
32
|
+
|
|
33
|
+
// Orchestrator properties
|
|
34
|
+
protected activationIndex = 0;
|
|
35
|
+
protected awaiting = false;
|
|
36
|
+
protected active = false;
|
|
37
|
+
protected shouldResetProgress = false;
|
|
38
|
+
|
|
39
|
+
public constructor() {
|
|
40
|
+
this.hasCustomActivationCriteria = false;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
//
|
|
44
|
+
// Initializing handler
|
|
45
|
+
//
|
|
46
|
+
|
|
47
|
+
protected init(ref: number, propsRef: React.RefObject<unknown>) {
|
|
48
|
+
this.propsRef = propsRef;
|
|
49
|
+
this.ref = ref;
|
|
50
|
+
|
|
51
|
+
this.currentState = State.UNDETERMINED;
|
|
52
|
+
|
|
53
|
+
this.setView(ref);
|
|
54
|
+
this.setEventManager();
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
private setView(ref: number) {
|
|
58
|
+
if (!ref) {
|
|
59
|
+
this.view = null;
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
this.view = (findNodeHandle(ref) as unknown) as HTMLElement;
|
|
64
|
+
this.view.style['touchAction'] = 'none';
|
|
65
|
+
this.view.style['webkitUserSelect'] = 'none';
|
|
66
|
+
this.view.style['userSelect'] = 'none';
|
|
67
|
+
|
|
68
|
+
//@ts-ignore This one disables default events on Safari
|
|
69
|
+
this.view.style['WebkitTouchCallout'] = 'none';
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
private setEventManager(): void {
|
|
73
|
+
if (!this.view) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
this.eventManager = new EventManager(this.view);
|
|
78
|
+
|
|
79
|
+
this.eventManager.setOnPointerDown(this.onPointerDown.bind(this));
|
|
80
|
+
this.eventManager.setOnPointerUp(this.onPointerUp.bind(this));
|
|
81
|
+
this.eventManager.setOnPointerMove(this.onPointerMove.bind(this));
|
|
82
|
+
this.eventManager.setOnPointerEnter(this.onPointerEnter.bind(this));
|
|
83
|
+
this.eventManager.setOnPointerOut(this.onPointerOut.bind(this));
|
|
84
|
+
this.eventManager.setOnPointerCancel(this.onPointerCancel.bind(this));
|
|
85
|
+
this.eventManager.setOnPointerOutOfBounds(
|
|
86
|
+
this.onPointerOutOfBounds.bind(this)
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
this.eventManager.setListeners();
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
public setInteractionManager(manager: InteractionManager): void {
|
|
93
|
+
this.interactionManager = manager;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
//
|
|
97
|
+
// Resetting handler
|
|
98
|
+
//
|
|
99
|
+
|
|
100
|
+
protected onCancel(): void {}
|
|
101
|
+
protected onReset(): void {}
|
|
102
|
+
protected resetProgress(): void {}
|
|
103
|
+
|
|
104
|
+
public reset(): void {
|
|
105
|
+
this.tracker.resetTracker();
|
|
106
|
+
this.onReset();
|
|
107
|
+
this.currentState = State.UNDETERMINED;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
//
|
|
111
|
+
// State logic
|
|
112
|
+
//
|
|
113
|
+
|
|
114
|
+
public moveToState(newState: State, event: AdaptedPointerEvent) {
|
|
115
|
+
if (this.currentState === newState) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const oldState = this.currentState;
|
|
120
|
+
this.currentState = newState;
|
|
121
|
+
|
|
122
|
+
GestureHandlerOrchestrator.getInstance().onHandlerStateChange(
|
|
123
|
+
this,
|
|
124
|
+
newState,
|
|
125
|
+
oldState,
|
|
126
|
+
event
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
this.onStateChange(newState, oldState);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
protected onStateChange(_newState: State, _oldState: State): void {}
|
|
133
|
+
|
|
134
|
+
public begin(event: AdaptedPointerEvent): void {
|
|
135
|
+
if (!this.checkHitSlop(event)) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
if (this.currentState === State.UNDETERMINED) {
|
|
140
|
+
this.moveToState(State.BEGAN, event);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
public fail(event: AdaptedPointerEvent): void {
|
|
145
|
+
if (
|
|
146
|
+
this.currentState === State.ACTIVE ||
|
|
147
|
+
this.currentState === State.BEGAN
|
|
148
|
+
) {
|
|
149
|
+
this.moveToState(State.FAILED, event);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
this.resetProgress();
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
public cancel(event: AdaptedPointerEvent): void {
|
|
156
|
+
if (
|
|
157
|
+
this.currentState === State.ACTIVE ||
|
|
158
|
+
this.currentState === State.UNDETERMINED ||
|
|
159
|
+
this.currentState === State.BEGAN
|
|
160
|
+
) {
|
|
161
|
+
this.onCancel();
|
|
162
|
+
this.moveToState(State.CANCELLED, event);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
protected activate(event: AdaptedPointerEvent, _force = false) {
|
|
167
|
+
if (
|
|
168
|
+
this.currentState === State.UNDETERMINED ||
|
|
169
|
+
this.currentState === State.BEGAN
|
|
170
|
+
) {
|
|
171
|
+
this.moveToState(State.ACTIVE, event);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
public end(event: AdaptedPointerEvent) {
|
|
176
|
+
if (
|
|
177
|
+
this.currentState === State.BEGAN ||
|
|
178
|
+
this.currentState === State.ACTIVE
|
|
179
|
+
) {
|
|
180
|
+
this.moveToState(State.END, event);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
this.resetProgress();
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
//
|
|
187
|
+
// Methods for orchestrator
|
|
188
|
+
//
|
|
189
|
+
|
|
190
|
+
public isAwaiting(): boolean {
|
|
191
|
+
return this.awaiting;
|
|
192
|
+
}
|
|
193
|
+
public setAwaiting(value: boolean): void {
|
|
194
|
+
this.awaiting = value;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
public isActive(): boolean {
|
|
198
|
+
return this.active;
|
|
199
|
+
}
|
|
200
|
+
public setActive(value: boolean): void {
|
|
201
|
+
this.active = value;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
public getShouldResetProgress(): boolean {
|
|
205
|
+
return this.shouldResetProgress;
|
|
206
|
+
}
|
|
207
|
+
public setShouldResetProgress(value: boolean): void {
|
|
208
|
+
this.shouldResetProgress = value;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
public getActivationIndex(): number {
|
|
212
|
+
return this.activationIndex;
|
|
213
|
+
}
|
|
214
|
+
public setActivationIndex(value: number): void {
|
|
215
|
+
this.activationIndex = value;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
public shouldWaitForHandlerFailure(handler: GestureHandler): boolean {
|
|
219
|
+
if (handler === this) {
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
return this.interactionManager.shouldWaitForHandlerFailure(this, handler);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
public shouldRequireToWaitForFailure(handler: GestureHandler): boolean {
|
|
227
|
+
if (handler === this) {
|
|
228
|
+
return false;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
return this.interactionManager.shouldRequireHandlerToWaitForFailure(
|
|
232
|
+
this,
|
|
233
|
+
handler
|
|
234
|
+
);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
public shouldRecognizeSimultaneously(handler: GestureHandler): boolean {
|
|
238
|
+
if (handler === this) {
|
|
239
|
+
return true;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
return this.interactionManager.shouldRecognizeSimultaneously(this, handler);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
public shouldBeCancelledByOther(handler: GestureHandler): boolean {
|
|
246
|
+
if (handler === this) {
|
|
247
|
+
return false;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
return this.interactionManager.shouldHandlerBeCancelledBy(this, handler);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
//
|
|
254
|
+
// Event actions
|
|
255
|
+
//
|
|
256
|
+
|
|
257
|
+
protected onPointerDown(_event: AdaptedPointerEvent): void {
|
|
258
|
+
GestureHandlerOrchestrator.getInstance().recordHandlerIfNotPresent(this);
|
|
259
|
+
}
|
|
260
|
+
// Adding another pointer to existing ones
|
|
261
|
+
protected onPointerAdd(_event: AdaptedPointerEvent): void {}
|
|
262
|
+
protected onPointerUp(_event: AdaptedPointerEvent): void {}
|
|
263
|
+
// Removing pointer, when there is more than one pointers
|
|
264
|
+
protected onPointerRemove(_event: AdaptedPointerEvent): void {}
|
|
265
|
+
protected onPointerMove(event: AdaptedPointerEvent): void {
|
|
266
|
+
this.tryToSendMoveEvent(event, false);
|
|
267
|
+
}
|
|
268
|
+
protected onPointerOut(_event: AdaptedPointerEvent): void {}
|
|
269
|
+
protected onPointerEnter(_event: AdaptedPointerEvent): void {}
|
|
270
|
+
protected onPointerCancel(_event: AdaptedPointerEvent): void {}
|
|
271
|
+
protected onPointerOutOfBounds(event: AdaptedPointerEvent): void {
|
|
272
|
+
this.tryToSendMoveEvent(event, true);
|
|
273
|
+
}
|
|
274
|
+
private tryToSendMoveEvent(event: AdaptedPointerEvent, out: boolean): void {
|
|
275
|
+
if (
|
|
276
|
+
this.currentState === State.ACTIVE &&
|
|
277
|
+
(!out || (out && !this.shouldCancellWhenOutside))
|
|
278
|
+
) {
|
|
279
|
+
this.sendEvent(event, this.currentState, this.currentState);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
//
|
|
284
|
+
// Events Sending
|
|
285
|
+
//
|
|
286
|
+
|
|
287
|
+
public sendEvent = (
|
|
288
|
+
event: AdaptedPointerEvent,
|
|
289
|
+
newState: State,
|
|
290
|
+
oldState: State
|
|
291
|
+
): void => {
|
|
292
|
+
const {
|
|
293
|
+
onGestureHandlerEvent,
|
|
294
|
+
onGestureHandlerStateChange,
|
|
295
|
+
}: PropsRef = this.propsRef.current as PropsRef;
|
|
296
|
+
|
|
297
|
+
const resultEvent: ResultEvent = this.transformEventData(
|
|
298
|
+
event,
|
|
299
|
+
newState,
|
|
300
|
+
oldState
|
|
301
|
+
);
|
|
302
|
+
|
|
303
|
+
// In the new API oldState field has to be undefined, unless we send event state changed
|
|
304
|
+
// Here the order is flipped to avoid workarounds such as making backup of the state and setting it to undefined first, then changing it back
|
|
305
|
+
// Flipping order with setting oldState to undefined solves issue, when events were being sent twice instead of once
|
|
306
|
+
// However, this may cause trouble in the future (but for now we don't know that)
|
|
307
|
+
|
|
308
|
+
if (this.lastSentState !== newState) {
|
|
309
|
+
this.lastSentState = newState;
|
|
310
|
+
invokeNullableMethod(onGestureHandlerStateChange, resultEvent);
|
|
311
|
+
}
|
|
312
|
+
if (this.currentState === State.ACTIVE) {
|
|
313
|
+
resultEvent.nativeEvent.oldState = undefined;
|
|
314
|
+
invokeNullableMethod(onGestureHandlerEvent, resultEvent);
|
|
315
|
+
}
|
|
316
|
+
};
|
|
317
|
+
|
|
318
|
+
private transformEventData(
|
|
319
|
+
event: AdaptedPointerEvent,
|
|
320
|
+
newState: State,
|
|
321
|
+
oldState: State
|
|
322
|
+
): ResultEvent {
|
|
323
|
+
return {
|
|
324
|
+
nativeEvent: {
|
|
325
|
+
numberOfPointers: this.tracker.getTrackedPointersCount(),
|
|
326
|
+
state: newState,
|
|
327
|
+
pointerInside: this.eventManager?.isPointerInBounds({
|
|
328
|
+
x: event.x,
|
|
329
|
+
y: event.y,
|
|
330
|
+
}),
|
|
331
|
+
...this.transformNativeEvent(event),
|
|
332
|
+
handlerTag: this.handlerTag,
|
|
333
|
+
target: this.ref,
|
|
334
|
+
oldState: newState !== oldState ? oldState : undefined,
|
|
335
|
+
},
|
|
336
|
+
timeStamp: Date.now(),
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
protected transformNativeEvent(_event: AdaptedPointerEvent) {
|
|
341
|
+
return {};
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
//
|
|
345
|
+
// Handling config
|
|
346
|
+
//
|
|
347
|
+
|
|
348
|
+
public updateGestureConfig({ enabled = true, ...props }): void {
|
|
349
|
+
this.config = { enabled, ...props };
|
|
350
|
+
this.validateHitSlops();
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
protected checkCustomActivationCriteria(criterias: string[]): void {
|
|
354
|
+
for (const key in this.config) {
|
|
355
|
+
if (criterias.indexOf(key) >= 0) {
|
|
356
|
+
this.hasCustomActivationCriteria = true;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
private validateHitSlops(): void {
|
|
362
|
+
if (!this.config.hitSlop) {
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
if (
|
|
367
|
+
this.config.hitSlop.left !== undefined &&
|
|
368
|
+
this.config.hitSlop.right !== undefined &&
|
|
369
|
+
this.config.hitSlop.width !== undefined
|
|
370
|
+
) {
|
|
371
|
+
throw new Error(
|
|
372
|
+
'HitSlop Error: Cannot define left, right and width at the same time'
|
|
373
|
+
);
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
if (
|
|
377
|
+
this.config.hitSlop.width !== undefined &&
|
|
378
|
+
this.config.hitSlop.left === undefined &&
|
|
379
|
+
this.config.hitSlop.right === undefined
|
|
380
|
+
) {
|
|
381
|
+
throw new Error(
|
|
382
|
+
'HitSlop Error: When width is defined, either left or right has to be defined'
|
|
383
|
+
);
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
if (
|
|
387
|
+
this.config.hitSlop.height !== undefined &&
|
|
388
|
+
this.config.hitSlop.top !== undefined &&
|
|
389
|
+
this.config.hitSlop.bottom !== undefined
|
|
390
|
+
) {
|
|
391
|
+
throw new Error(
|
|
392
|
+
'HitSlop Error: Cannot define top, bottom and height at the same time'
|
|
393
|
+
);
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
if (
|
|
397
|
+
this.config.hitSlop.height !== undefined &&
|
|
398
|
+
this.config.hitSlop.top === undefined &&
|
|
399
|
+
this.config.hitSlop.bottom === undefined
|
|
400
|
+
) {
|
|
401
|
+
throw new Error(
|
|
402
|
+
'HitSlop Error: When height is defined, either top or bottom has to be defined'
|
|
403
|
+
);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
private checkHitSlop(event: AdaptedPointerEvent): boolean {
|
|
408
|
+
if (!this.config.hitSlop || !this.view) {
|
|
409
|
+
return true;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
const width = this.view.getBoundingClientRect().width;
|
|
413
|
+
const height = this.view.getBoundingClientRect().height;
|
|
414
|
+
|
|
415
|
+
let left = 0;
|
|
416
|
+
let top = 0;
|
|
417
|
+
let right: number = width;
|
|
418
|
+
let bottom: number = height;
|
|
419
|
+
|
|
420
|
+
if (this.config.hitSlop.horizontal !== undefined) {
|
|
421
|
+
left -= this.config.hitSlop.horizontal;
|
|
422
|
+
right += this.config.hitSlop.horizontal;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
if (this.config.hitSlop.vertical !== undefined) {
|
|
426
|
+
top -= this.config.hitSlop.vertical;
|
|
427
|
+
bottom += this.config.hitSlop.vertical;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
if (this.config.hitSlop.left !== undefined) {
|
|
431
|
+
left = -this.config.hitSlop.left;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
if (this.config.hitSlop.right !== undefined) {
|
|
435
|
+
right = width + this.config.hitSlop.right;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
if (this.config.hitSlop.top !== undefined) {
|
|
439
|
+
top = -this.config.hitSlop.top;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
if (this.config.hitSlop.bottom !== undefined) {
|
|
443
|
+
bottom = width + this.config.hitSlop.bottom;
|
|
444
|
+
}
|
|
445
|
+
if (this.config.hitSlop.width !== undefined) {
|
|
446
|
+
if (this.config.hitSlop.left !== undefined) {
|
|
447
|
+
right = left + this.config.hitSlop.width;
|
|
448
|
+
} else if (this.config.hitSlop.right !== undefined) {
|
|
449
|
+
left = right - this.config.hitSlop.width;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
if (this.config.hitSlop.height !== undefined) {
|
|
454
|
+
if (this.config.hitSlop.top !== undefined) {
|
|
455
|
+
bottom = top + this.config.hitSlop.height;
|
|
456
|
+
} else if (this.config.hitSlop.bottom !== undefined) {
|
|
457
|
+
top = bottom - this.config.hitSlop.height;
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
if (
|
|
462
|
+
event.offsetX >= left &&
|
|
463
|
+
event.offsetX <= right &&
|
|
464
|
+
event.offsetY >= top &&
|
|
465
|
+
event.offsetY <= bottom
|
|
466
|
+
) {
|
|
467
|
+
return true;
|
|
468
|
+
}
|
|
469
|
+
return false;
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
protected resetConfig(): void {}
|
|
473
|
+
|
|
474
|
+
//
|
|
475
|
+
// Getters and setters
|
|
476
|
+
//
|
|
477
|
+
|
|
478
|
+
public getTag(): number {
|
|
479
|
+
return this.handlerTag;
|
|
480
|
+
}
|
|
481
|
+
public setTag(tag: number): void {
|
|
482
|
+
this.handlerTag = tag;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
protected getConfig() {
|
|
486
|
+
return this.config;
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
public getShouldEnableGestureOnSetup(): boolean {
|
|
490
|
+
throw new Error('Must override GestureHandler.shouldEnableGestureOnSetup');
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
public getView(): HTMLElement | null {
|
|
494
|
+
return this.view;
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
public getEventManager(): EventManager {
|
|
498
|
+
return this.eventManager;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
public getTracker(): PointerTracker {
|
|
502
|
+
return this.tracker;
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
public getTrackedPointersID(): number[] {
|
|
506
|
+
return this.tracker.getTrackedPointersID();
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
public getState(): State {
|
|
510
|
+
return this.currentState;
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
protected setShouldCancelWhenOutside(flag: boolean) {
|
|
514
|
+
this.shouldCancellWhenOutside = flag;
|
|
515
|
+
}
|
|
516
|
+
protected getShouldCancelWhenOutside(): boolean {
|
|
517
|
+
return this.shouldCancellWhenOutside;
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
function invokeNullableMethod(
|
|
522
|
+
method:
|
|
523
|
+
| ((event: ResultEvent) => void)
|
|
524
|
+
| { __getHandler: () => (event: ResultEvent) => void }
|
|
525
|
+
| { __nodeConfig: { argMapping: unknown[] } },
|
|
526
|
+
event: ResultEvent
|
|
527
|
+
): void {
|
|
528
|
+
if (!method) {
|
|
529
|
+
return;
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
if (typeof method === 'function') {
|
|
533
|
+
method(event);
|
|
534
|
+
return;
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
if ('__getHandler' in method && typeof method.__getHandler === 'function') {
|
|
538
|
+
const handler = method.__getHandler();
|
|
539
|
+
invokeNullableMethod(handler, event);
|
|
540
|
+
return;
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
if (!('__nodeConfig' in method)) {
|
|
544
|
+
return;
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
const { argMapping } = method.__nodeConfig;
|
|
548
|
+
if (!Array.isArray(argMapping)) {
|
|
549
|
+
return;
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
for (const [index, [key, value]] of argMapping.entries()) {
|
|
553
|
+
if (!(key in event.nativeEvent)) {
|
|
554
|
+
continue;
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
558
|
+
const nativeValue = event.nativeEvent[key];
|
|
559
|
+
|
|
560
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
561
|
+
if (value?.setValue) {
|
|
562
|
+
//Reanimated API
|
|
563
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
|
|
564
|
+
value.setValue(nativeValue);
|
|
565
|
+
} else {
|
|
566
|
+
//RN Animated API
|
|
567
|
+
method.__nodeConfig.argMapping[index] = [key, nativeValue];
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
return;
|
|
572
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { State } from '../../State';
|
|
2
|
+
import { AdaptedPointerEvent } from '../interfaces';
|
|
3
|
+
|
|
4
|
+
import GestureHandler from './GestureHandler';
|
|
5
|
+
|
|
6
|
+
const DEFAULT_MIN_DURATION_MS = 500;
|
|
7
|
+
const DEFAULT_MAX_DIST_DP = 10;
|
|
8
|
+
const SCALING_FACTOR = 10;
|
|
9
|
+
|
|
10
|
+
export default class LongPressGestureHandler extends GestureHandler {
|
|
11
|
+
private minDurationMs = DEFAULT_MIN_DURATION_MS;
|
|
12
|
+
private defaultMaxDistSq = DEFAULT_MAX_DIST_DP * SCALING_FACTOR;
|
|
13
|
+
|
|
14
|
+
private maxDistSq = this.defaultMaxDistSq;
|
|
15
|
+
private startX = 0;
|
|
16
|
+
private startY = 0;
|
|
17
|
+
|
|
18
|
+
private startTime = 0;
|
|
19
|
+
private previousTime = 0;
|
|
20
|
+
|
|
21
|
+
private activationTimeout: number | undefined;
|
|
22
|
+
|
|
23
|
+
public init(ref: number, propsRef: React.RefObject<unknown>) {
|
|
24
|
+
super.init(ref, propsRef);
|
|
25
|
+
this.setShouldCancelWhenOutside(true);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
protected transformNativeEvent(event: AdaptedPointerEvent) {
|
|
29
|
+
return {
|
|
30
|
+
x: event.offsetX,
|
|
31
|
+
y: event.offsetY,
|
|
32
|
+
absoluteX: event.x,
|
|
33
|
+
absoluteY: event.y,
|
|
34
|
+
duration: Date.now() - this.startTime,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
public updateGestureConfig({ enabled = true, ...props }): void {
|
|
39
|
+
super.updateGestureConfig({ enabled: enabled, ...props });
|
|
40
|
+
|
|
41
|
+
this.enabled = enabled;
|
|
42
|
+
|
|
43
|
+
if (this.config.minDurationMs !== undefined) {
|
|
44
|
+
this.minDurationMs = this.config.minDurationMs;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (this.config.maxDist !== undefined) {
|
|
48
|
+
this.maxDistSq = this.config.maxDist * this.config.maxDist;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
protected resetConfig(): void {
|
|
53
|
+
super.resetConfig();
|
|
54
|
+
this.minDurationMs = DEFAULT_MIN_DURATION_MS;
|
|
55
|
+
this.maxDistSq = this.defaultMaxDistSq;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
protected onStateChange(_newState: State, _oldState: State): void {
|
|
59
|
+
clearTimeout(this.activationTimeout);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
protected onPointerDown(event: AdaptedPointerEvent): void {
|
|
63
|
+
super.onPointerDown(event);
|
|
64
|
+
this.tryBegin(event);
|
|
65
|
+
this.tryActivate(event);
|
|
66
|
+
this.checkDistanceFail(event);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
protected onPointerUp(event: AdaptedPointerEvent): void {
|
|
70
|
+
super.onPointerUp(event);
|
|
71
|
+
|
|
72
|
+
if (this.currentState === State.ACTIVE) {
|
|
73
|
+
this.end(event);
|
|
74
|
+
} else {
|
|
75
|
+
this.fail(event);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
protected onPointerMove(event: AdaptedPointerEvent): void {
|
|
80
|
+
this.checkDistanceFail(event);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
private tryBegin(event: AdaptedPointerEvent): void {
|
|
84
|
+
if (this.currentState !== State.UNDETERMINED) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
this.previousTime = Date.now();
|
|
89
|
+
this.startTime = this.previousTime;
|
|
90
|
+
|
|
91
|
+
this.begin(event);
|
|
92
|
+
|
|
93
|
+
this.startX = event.x;
|
|
94
|
+
this.startY = event.y;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
private tryActivate(event: AdaptedPointerEvent): void {
|
|
98
|
+
if (this.minDurationMs > 0) {
|
|
99
|
+
this.activationTimeout = setTimeout(() => {
|
|
100
|
+
this.activate(event);
|
|
101
|
+
}, this.minDurationMs);
|
|
102
|
+
} else if (this.minDurationMs === 0) {
|
|
103
|
+
this.activate(event);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
private checkDistanceFail(event: AdaptedPointerEvent): void {
|
|
108
|
+
const dx = event.x - this.startX;
|
|
109
|
+
const dy = event.y - this.startY;
|
|
110
|
+
const distSq = dx * dx + dy * dy;
|
|
111
|
+
|
|
112
|
+
if (distSq <= this.maxDistSq) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if (this.currentState === State.ACTIVE) {
|
|
117
|
+
this.cancel(event);
|
|
118
|
+
} else {
|
|
119
|
+
this.fail(event);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|