react-native-gesture-handler 2.5.0 → 2.6.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -21,6 +21,7 @@ export declare type Config = Partial<{
|
|
21
21
|
activeOffsetYStart: number;
|
22
22
|
activeOffsetYEnd: number;
|
23
23
|
waitFor: any[] | null;
|
24
|
+
simultaneousHandlers: any[] | null;
|
24
25
|
}>;
|
25
26
|
declare abstract class GestureHandler {
|
26
27
|
handlerTag: any;
|
@@ -43,6 +44,7 @@ declare abstract class GestureHandler {
|
|
43
44
|
private ref;
|
44
45
|
abstract get name(): string;
|
45
46
|
get id(): string;
|
47
|
+
get isNative(): boolean;
|
46
48
|
get isDiscrete(): boolean;
|
47
49
|
get shouldEnableGestureOnSetup(): boolean;
|
48
50
|
constructor();
|
@@ -65,6 +67,7 @@ declare abstract class GestureHandler {
|
|
65
67
|
activeOffsetYStart: number;
|
66
68
|
activeOffsetYEnd: number;
|
67
69
|
waitFor: any[] | null;
|
70
|
+
simultaneousHandlers: any[] | null;
|
68
71
|
}>;
|
69
72
|
onWaitingEnded(_gesture: this): void;
|
70
73
|
removePendingGesture(id: string): void;
|
@@ -98,6 +101,7 @@ declare abstract class GestureHandler {
|
|
98
101
|
activeOffsetYStart: number;
|
99
102
|
activeOffsetYEnd: number;
|
100
103
|
waitFor: any[] | null;
|
104
|
+
simultaneousHandlers: any[] | null;
|
101
105
|
}>;
|
102
106
|
destroy: () => void;
|
103
107
|
isPointInView: ({ x, y }: {
|
@@ -124,6 +128,7 @@ declare abstract class GestureHandler {
|
|
124
128
|
forceInvalidate(event: HammerInputExt): void;
|
125
129
|
cancelEvent(event: HammerInputExt): void;
|
126
130
|
onRawEvent({ isFirst }: HammerInputExt): void;
|
131
|
+
shouldUseTouchEvents(config: Config): boolean;
|
127
132
|
setView(ref: Parameters<typeof findNodeHandle>['0'], propsRef: any): void;
|
128
133
|
setupEvents(): void;
|
129
134
|
onStart({ deltaX, deltaY, rotation }: HammerInputExt): void;
|
@@ -135,5 +140,6 @@ declare abstract class GestureHandler {
|
|
135
140
|
};
|
136
141
|
sync: () => void;
|
137
142
|
simulateCancelEvent(_inputData: any): void;
|
143
|
+
ensureConfig(config: Config): Required<Config>;
|
138
144
|
}
|
139
145
|
export default GestureHandler;
|
@@ -27,6 +27,7 @@ declare abstract class IndiscreteGestureHandler extends GestureHandler {
|
|
27
27
|
activeOffsetYStart: number;
|
28
28
|
activeOffsetYEnd: number;
|
29
29
|
waitFor: any[] | null;
|
30
|
+
simultaneousHandlers: any[] | null;
|
30
31
|
}>;
|
31
32
|
isGestureEnabledForEvent({ minPointers, maxPointers }: any, _recognizer: any, { maxPointers: pointerLength }: any): {
|
32
33
|
failed: boolean;
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import { HammerInputExt } from './GestureHandler';
|
2
2
|
import PressGestureHandler from './PressGestureHandler';
|
3
3
|
declare class NativeViewGestureHandler extends PressGestureHandler {
|
4
|
+
get isNative(): boolean;
|
4
5
|
onRawEvent(ev: HammerInputExt): void;
|
5
6
|
}
|
6
7
|
export default NativeViewGestureHandler;
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { ValueOf } from '../typeUtils';
|
2
|
+
import { HammerGestures } from '../RNGestureHandlerModule.web';
|
3
|
+
export declare function getHandler(tag: number): import("./NativeViewGestureHandler").default | import("./PanGestureHandler").default | import("./TapGestureHandler").default | import("./LongPressGestureHandler").default | import("./PinchGestureHandler").default | import("./RotationGestureHandler").default | import("./FlingGestureHandler").default;
|
4
|
+
export declare function createGestureHandler(handlerTag: number, handler: InstanceType<ValueOf<typeof HammerGestures>>): void;
|
5
|
+
export declare function dropGestureHandler(handlerTag: number): void;
|
6
|
+
export declare function getNodes(): {
|
7
|
+
[x: number]: import("./NativeViewGestureHandler").default | import("./PanGestureHandler").default | import("./TapGestureHandler").default | import("./LongPressGestureHandler").default | import("./PinchGestureHandler").default | import("./RotationGestureHandler").default | import("./FlingGestureHandler").default;
|
8
|
+
};
|
@@ -30,6 +30,7 @@ declare class PanGestureHandler extends DraggingGestureHandler {
|
|
30
30
|
activeOffsetYStart: number;
|
31
31
|
activeOffsetYEnd: number;
|
32
32
|
waitFor: any[] | null;
|
33
|
+
simultaneousHandlers: any[] | null;
|
33
34
|
}>;
|
34
35
|
shouldFailUnderCustomCriteria({ deltaX, deltaY }: HammerInputExt, criteria: any): boolean;
|
35
36
|
shouldActivateUnderCustomCriteria({ deltaX, deltaY, velocity }: any, criteria: any): boolean;
|
File without changes
|
@@ -34,6 +34,7 @@ declare class PressGestureHandler extends DiscreteGestureHandler {
|
|
34
34
|
activeOffsetYStart: number;
|
35
35
|
activeOffsetYEnd: number;
|
36
36
|
waitFor: any[] | null;
|
37
|
+
simultaneousHandlers: any[] | null;
|
37
38
|
}> | {
|
38
39
|
shouldCancelWhenOutside: boolean;
|
39
40
|
maxDistSq: number;
|
@@ -76,6 +77,7 @@ declare class PressGestureHandler extends DiscreteGestureHandler {
|
|
76
77
|
activeOffsetYStart: number;
|
77
78
|
activeOffsetYEnd: number;
|
78
79
|
waitFor: any[] | null;
|
80
|
+
simultaneousHandlers: any[] | null;
|
79
81
|
}>;
|
80
82
|
}
|
81
83
|
export default PressGestureHandler;
|
File without changes
|
@@ -49,6 +49,7 @@ declare class TapGestureHandler extends DiscreteGestureHandler {
|
|
49
49
|
activeOffsetYStart: number;
|
50
50
|
activeOffsetYEnd: number;
|
51
51
|
waitFor: any[] | null;
|
52
|
+
simultaneousHandlers: any[] | null;
|
52
53
|
}>;
|
53
54
|
onGestureEnded(...props: any): void;
|
54
55
|
onWaitingEnded(_gesture: any): void;
|
@@ -0,0 +1,39 @@
|
|
1
|
+
export declare const CONTENT_TOUCHES_DELAY = 240;
|
2
|
+
export declare const CONTENT_TOUCHES_QUICK_TAP_END_DELAY = 50;
|
3
|
+
export declare const MULTI_FINGER_PAN_MAX_PINCH_THRESHOLD = 0.1;
|
4
|
+
export declare const MULTI_FINGER_PAN_MAX_ROTATION_THRESHOLD = 7;
|
5
|
+
export declare const DEG_RAD: number;
|
6
|
+
export declare const EventMap: {
|
7
|
+
readonly 1: 2;
|
8
|
+
readonly 2: 4;
|
9
|
+
readonly 4: 5;
|
10
|
+
readonly 8: 1;
|
11
|
+
};
|
12
|
+
export declare const Direction: {
|
13
|
+
RIGHT: number;
|
14
|
+
LEFT: number;
|
15
|
+
UP: number;
|
16
|
+
DOWN: number;
|
17
|
+
};
|
18
|
+
export declare const DirectionMap: {
|
19
|
+
4: number;
|
20
|
+
2: number;
|
21
|
+
8: number;
|
22
|
+
16: number;
|
23
|
+
};
|
24
|
+
export declare const HammerInputNames: {
|
25
|
+
1: string;
|
26
|
+
2: string;
|
27
|
+
4: string;
|
28
|
+
8: string;
|
29
|
+
};
|
30
|
+
export declare const HammerDirectionNames: {
|
31
|
+
6: string;
|
32
|
+
8: string;
|
33
|
+
16: string;
|
34
|
+
24: string;
|
35
|
+
1: string;
|
36
|
+
30: string;
|
37
|
+
4: string;
|
38
|
+
2: string;
|
39
|
+
};
|
File without changes
|
package/package.json
CHANGED
@@ -0,0 +1,18 @@
|
|
1
|
+
let EXPERIMENTAL_WEB_IMPLEMENTATION = false;
|
2
|
+
let getWasCalled = false;
|
3
|
+
|
4
|
+
export function enableExperimentalWebImplementation(shouldEnable = true): void {
|
5
|
+
if (getWasCalled) {
|
6
|
+
console.error(
|
7
|
+
'Some parts of this application have already started using old gesture handler implementation. No changes will be applied. You can try enabling new implementation earlier.'
|
8
|
+
);
|
9
|
+
return;
|
10
|
+
}
|
11
|
+
|
12
|
+
EXPERIMENTAL_WEB_IMPLEMENTATION = shouldEnable;
|
13
|
+
}
|
14
|
+
|
15
|
+
export function isExperimentalWebImplementationEnabled(): boolean {
|
16
|
+
getWasCalled = true;
|
17
|
+
return EXPERIMENTAL_WEB_IMPLEMENTATION;
|
18
|
+
}
|
@@ -1,61 +1,113 @@
|
|
1
1
|
import { ActionType } from './ActionType';
|
2
|
-
import {
|
3
|
-
|
4
|
-
|
5
|
-
import
|
6
|
-
import
|
7
|
-
import PanGestureHandler from './web/PanGestureHandler';
|
8
|
-
import
|
9
|
-
import
|
10
|
-
import
|
2
|
+
import { isExperimentalWebImplementationEnabled } from './EnableExperimentalWebImplementation';
|
3
|
+
|
4
|
+
//GestureHandlers
|
5
|
+
import InteractionManager from './web/tools/InteractionManager';
|
6
|
+
import NodeManager from './web/tools/NodeManager';
|
7
|
+
import PanGestureHandler from './web/handlers/PanGestureHandler';
|
8
|
+
import TapGestureHandler from './web/handlers/TapGestureHandler';
|
9
|
+
import LongPressGestureHandler from './web/handlers/LongPressGestureHandler';
|
10
|
+
import PinchGestureHandler from './web/handlers/PinchGestureHandler';
|
11
|
+
import RotationGestureHandler from './web/handlers/RotationGestureHandler';
|
12
|
+
import FlingGestureHandler from './web/handlers/FlingGestureHandler';
|
13
|
+
import NativeViewGestureHandler from './web/handlers/NativeViewGestureHandler';
|
14
|
+
|
15
|
+
//Hammer Handlers
|
16
|
+
import * as HammerNodeManager from './web_hammer/NodeManager';
|
17
|
+
import HammerNativeViewGestureHandler from './web_hammer/NativeViewGestureHandler';
|
18
|
+
import HammerPanGestureHandler from './web_hammer/PanGestureHandler';
|
19
|
+
import HammerTapGestureHandler from './web_hammer/TapGestureHandler';
|
20
|
+
import HammerLongPressGestureHandler from './web_hammer/LongPressGestureHandler';
|
21
|
+
import HammerPinchGestureHandler from './web_hammer/PinchGestureHandler';
|
22
|
+
import HammerRotationGestureHandler from './web_hammer/RotationGestureHandler';
|
23
|
+
import HammerFlingGestureHandler from './web_hammer/FlingGestureHandler';
|
24
|
+
import { Config } from './web_hammer/GestureHandler';
|
11
25
|
|
12
26
|
export const Gestures = {
|
27
|
+
NativeViewGestureHandler,
|
13
28
|
PanGestureHandler,
|
14
|
-
RotationGestureHandler,
|
15
|
-
PinchGestureHandler,
|
16
29
|
TapGestureHandler,
|
17
|
-
NativeViewGestureHandler,
|
18
30
|
LongPressGestureHandler,
|
31
|
+
PinchGestureHandler,
|
32
|
+
RotationGestureHandler,
|
19
33
|
FlingGestureHandler,
|
20
|
-
|
34
|
+
};
|
35
|
+
|
36
|
+
export const HammerGestures = {
|
37
|
+
NativeViewGestureHandler: HammerNativeViewGestureHandler,
|
38
|
+
PanGestureHandler: HammerPanGestureHandler,
|
39
|
+
TapGestureHandler: HammerTapGestureHandler,
|
40
|
+
LongPressGestureHandler: HammerLongPressGestureHandler,
|
41
|
+
PinchGestureHandler: HammerPinchGestureHandler,
|
42
|
+
RotationGestureHandler: HammerRotationGestureHandler,
|
43
|
+
FlingGestureHandler: HammerFlingGestureHandler,
|
21
44
|
};
|
22
45
|
|
23
46
|
export default {
|
24
|
-
Direction,
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
handleClearJSResponder() {
|
47
|
+
// Direction,
|
48
|
+
handleSetJSResponder(tag: number, blockNativeResponder: boolean) {
|
49
|
+
console.warn('handleSetJSResponder: ', tag, blockNativeResponder);
|
50
|
+
},
|
51
|
+
handleClearJSResponder() {
|
52
|
+
console.warn('handleClearJSResponder: ');
|
53
|
+
},
|
29
54
|
createGestureHandler<T>(
|
30
55
|
handlerName: keyof typeof Gestures,
|
31
56
|
handlerTag: number,
|
32
57
|
config: T
|
33
58
|
) {
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
59
|
+
if (isExperimentalWebImplementationEnabled()) {
|
60
|
+
if (!(handlerName in Gestures)) return;
|
61
|
+
|
62
|
+
const interactionManager = new InteractionManager();
|
63
|
+
|
64
|
+
const GestureClass = Gestures[handlerName];
|
65
|
+
NodeManager.createGestureHandler(handlerTag, new GestureClass());
|
66
|
+
interactionManager.configureInteractions(
|
67
|
+
NodeManager.getHandler(handlerTag),
|
68
|
+
(config as unknown) as Config
|
38
69
|
);
|
39
|
-
|
40
|
-
|
70
|
+
} else {
|
71
|
+
if (!(handlerName in HammerGestures)) return;
|
72
|
+
|
73
|
+
const GestureClass = HammerGestures[handlerName];
|
74
|
+
HammerNodeManager.createGestureHandler(handlerTag, new GestureClass());
|
75
|
+
}
|
76
|
+
|
41
77
|
this.updateGestureHandler(handlerTag, config);
|
42
78
|
},
|
43
79
|
attachGestureHandler(
|
44
80
|
handlerTag: number,
|
45
|
-
newView: number,
|
81
|
+
newView: number, //ref
|
46
82
|
_actionType: ActionType,
|
47
83
|
propsRef: React.RefObject<unknown>
|
48
84
|
) {
|
49
|
-
|
85
|
+
if (isExperimentalWebImplementationEnabled()) {
|
86
|
+
NodeManager.getHandler(handlerTag).init(newView, propsRef);
|
87
|
+
} else {
|
88
|
+
HammerNodeManager.getHandler(handlerTag).setView(newView, propsRef);
|
89
|
+
}
|
50
90
|
},
|
51
91
|
updateGestureHandler(handlerTag: number, newConfig: any) {
|
52
|
-
|
92
|
+
if (isExperimentalWebImplementationEnabled()) {
|
93
|
+
NodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
|
94
|
+
} else {
|
95
|
+
HammerNodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
|
96
|
+
}
|
53
97
|
},
|
54
98
|
getGestureHandlerNode(handlerTag: number) {
|
55
|
-
|
99
|
+
if (isExperimentalWebImplementationEnabled()) {
|
100
|
+
return NodeManager.getHandler(handlerTag);
|
101
|
+
} else {
|
102
|
+
return HammerNodeManager.getHandler(handlerTag);
|
103
|
+
}
|
56
104
|
},
|
57
105
|
dropGestureHandler(handlerTag: number) {
|
58
|
-
|
106
|
+
if (isExperimentalWebImplementationEnabled()) {
|
107
|
+
NodeManager.dropGestureHandler(handlerTag);
|
108
|
+
} else {
|
109
|
+
HammerNodeManager.dropGestureHandler(handlerTag);
|
110
|
+
}
|
59
111
|
},
|
60
112
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
61
113
|
flushOperations() {},
|
@@ -1,27 +1,52 @@
|
|
1
1
|
import { ActionType } from './ActionType';
|
2
|
-
|
3
|
-
|
4
|
-
import
|
5
|
-
import
|
6
|
-
import
|
7
|
-
import
|
8
|
-
import
|
9
|
-
import
|
10
|
-
import
|
2
|
+
|
3
|
+
//GestureHandlers
|
4
|
+
import InteractionManager from './web/tools/InteractionManager';
|
5
|
+
import NodeManager from './web/tools/NodeManager';
|
6
|
+
import PanGestureHandler from './web/handlers/PanGestureHandler';
|
7
|
+
import TapGestureHandler from './web/handlers/TapGestureHandler';
|
8
|
+
import LongPressGestureHandler from './web/handlers/LongPressGestureHandler';
|
9
|
+
import PinchGestureHandler from './web/handlers/PinchGestureHandler';
|
10
|
+
import RotationGestureHandler from './web/handlers/RotationGestureHandler';
|
11
|
+
import FlingGestureHandler from './web/handlers/FlingGestureHandler';
|
12
|
+
import NativeViewGestureHandler from './web/handlers/NativeViewGestureHandler';
|
13
|
+
|
14
|
+
//Hammer Handlers
|
15
|
+
import * as HammerNodeManager from './web_hammer/NodeManager';
|
16
|
+
import HammerNativeViewGestureHandler from './web_hammer/NativeViewGestureHandler';
|
17
|
+
import HammerPanGestureHandler from './web_hammer/PanGestureHandler';
|
18
|
+
import HammerTapGestureHandler from './web_hammer/TapGestureHandler';
|
19
|
+
import HammerLongPressGestureHandler from './web_hammer/LongPressGestureHandler';
|
20
|
+
import HammerPinchGestureHandler from './web_hammer/PinchGestureHandler';
|
21
|
+
import HammerRotationGestureHandler from './web_hammer/RotationGestureHandler';
|
22
|
+
import HammerFlingGestureHandler from './web_hammer/FlingGestureHandler';
|
23
|
+
import { Config } from './web/interfaces';
|
24
|
+
import { isExperimentalWebImplementationEnabled } from './EnableExperimentalWebImplementation';
|
11
25
|
|
12
26
|
export const Gestures = {
|
27
|
+
NativeViewGestureHandler,
|
13
28
|
PanGestureHandler,
|
14
|
-
RotationGestureHandler,
|
15
|
-
PinchGestureHandler,
|
16
29
|
TapGestureHandler,
|
17
|
-
NativeViewGestureHandler,
|
18
30
|
LongPressGestureHandler,
|
31
|
+
PinchGestureHandler,
|
32
|
+
RotationGestureHandler,
|
19
33
|
FlingGestureHandler,
|
20
|
-
// ForceTouchGestureHandler,
|
21
34
|
};
|
22
35
|
|
36
|
+
export const HammerGestures = {
|
37
|
+
NativeViewGestureHandler: HammerNativeViewGestureHandler,
|
38
|
+
PanGestureHandler: HammerPanGestureHandler,
|
39
|
+
TapGestureHandler: HammerTapGestureHandler,
|
40
|
+
LongPressGestureHandler: HammerLongPressGestureHandler,
|
41
|
+
PinchGestureHandler: HammerPinchGestureHandler,
|
42
|
+
RotationGestureHandler: HammerRotationGestureHandler,
|
43
|
+
FlingGestureHandler: HammerFlingGestureHandler,
|
44
|
+
};
|
45
|
+
|
46
|
+
const interactionManager = new InteractionManager();
|
47
|
+
|
23
48
|
export default {
|
24
|
-
Direction,
|
49
|
+
// Direction,
|
25
50
|
handleSetJSResponder(tag: number, blockNativeResponder: boolean) {
|
26
51
|
console.warn('handleSetJSResponder: ', tag, blockNativeResponder);
|
27
52
|
},
|
@@ -33,14 +58,31 @@ export default {
|
|
33
58
|
handlerTag: number,
|
34
59
|
config: T
|
35
60
|
) {
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
61
|
+
if (isExperimentalWebImplementationEnabled()) {
|
62
|
+
if (!(handlerName in Gestures)) {
|
63
|
+
throw new Error(
|
64
|
+
`react-native-gesture-handler: ${handlerName} is not supported on web.`
|
65
|
+
);
|
66
|
+
}
|
67
|
+
|
68
|
+
const GestureClass = Gestures[handlerName];
|
69
|
+
NodeManager.createGestureHandler(handlerTag, new GestureClass());
|
70
|
+
interactionManager.configureInteractions(
|
71
|
+
NodeManager.getHandler(handlerTag),
|
72
|
+
(config as unknown) as Config
|
40
73
|
);
|
41
|
-
|
42
|
-
|
43
|
-
|
74
|
+
} else {
|
75
|
+
if (!(handlerName in HammerGestures)) {
|
76
|
+
throw new Error(
|
77
|
+
`react-native-gesture-handler: ${handlerName} is not supported on web.`
|
78
|
+
);
|
79
|
+
}
|
80
|
+
|
81
|
+
const GestureClass = HammerGestures[handlerName];
|
82
|
+
HammerNodeManager.createGestureHandler(handlerTag, new GestureClass());
|
83
|
+
}
|
84
|
+
|
85
|
+
this.updateGestureHandler(handlerTag, (config as unknown) as Config);
|
44
86
|
},
|
45
87
|
attachGestureHandler(
|
46
88
|
handlerTag: number,
|
@@ -48,16 +90,37 @@ export default {
|
|
48
90
|
_actionType: ActionType,
|
49
91
|
propsRef: React.RefObject<unknown>
|
50
92
|
) {
|
51
|
-
|
93
|
+
if (isExperimentalWebImplementationEnabled()) {
|
94
|
+
NodeManager.getHandler(handlerTag).init(newView, propsRef);
|
95
|
+
} else {
|
96
|
+
HammerNodeManager.getHandler(handlerTag).setView(newView, propsRef);
|
97
|
+
}
|
52
98
|
},
|
53
|
-
updateGestureHandler(handlerTag: number, newConfig:
|
54
|
-
|
99
|
+
updateGestureHandler(handlerTag: number, newConfig: Config) {
|
100
|
+
if (isExperimentalWebImplementationEnabled()) {
|
101
|
+
NodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
|
102
|
+
|
103
|
+
interactionManager.configureInteractions(
|
104
|
+
NodeManager.getHandler(handlerTag),
|
105
|
+
newConfig
|
106
|
+
);
|
107
|
+
} else {
|
108
|
+
HammerNodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
|
109
|
+
}
|
55
110
|
},
|
56
111
|
getGestureHandlerNode(handlerTag: number) {
|
57
|
-
|
112
|
+
if (isExperimentalWebImplementationEnabled()) {
|
113
|
+
return NodeManager.getHandler(handlerTag);
|
114
|
+
} else {
|
115
|
+
return HammerNodeManager.getHandler(handlerTag);
|
116
|
+
}
|
58
117
|
},
|
59
118
|
dropGestureHandler(handlerTag: number) {
|
60
|
-
|
119
|
+
if (isExperimentalWebImplementationEnabled()) {
|
120
|
+
NodeManager.dropGestureHandler(handlerTag);
|
121
|
+
} else {
|
122
|
+
HammerNodeManager.dropGestureHandler(handlerTag);
|
123
|
+
}
|
61
124
|
},
|
62
125
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
63
126
|
flushOperations() {},
|
@@ -203,10 +203,7 @@ export default class DrawerLayout extends Component<
|
|
203
203
|
this.updateAnimatedEvent(props, this.state);
|
204
204
|
}
|
205
205
|
|
206
|
-
|
207
|
-
props: DrawerLayoutProps,
|
208
|
-
state: DrawerLayoutState
|
209
|
-
) {
|
206
|
+
shouldComponentUpdate(props: DrawerLayoutProps, state: DrawerLayoutState) {
|
210
207
|
if (
|
211
208
|
this.props.drawerPosition !== props.drawerPosition ||
|
212
209
|
this.props.drawerWidth !== props.drawerWidth ||
|
@@ -215,6 +212,8 @@ export default class DrawerLayout extends Component<
|
|
215
212
|
) {
|
216
213
|
this.updateAnimatedEvent(props, state);
|
217
214
|
}
|
215
|
+
|
216
|
+
return true;
|
218
217
|
}
|
219
218
|
|
220
219
|
private openValue?: Animated.AnimatedInterpolation;
|
@@ -72,6 +72,12 @@ export interface BaseButtonProps extends RawButtonProps {
|
|
72
72
|
*/
|
73
73
|
onPress?: (pointerInside: boolean) => void;
|
74
74
|
|
75
|
+
/**
|
76
|
+
* Called when the button gets pressed and is held for `delayLongPress`
|
77
|
+
* milliseconds.
|
78
|
+
*/
|
79
|
+
onLongPress?: () => void;
|
80
|
+
|
75
81
|
/**
|
76
82
|
* Called when button changes from inactive to active and vice versa. It
|
77
83
|
* passes active state as a boolean variable as a first parameter for that
|
@@ -80,6 +86,12 @@ export interface BaseButtonProps extends RawButtonProps {
|
|
80
86
|
onActiveStateChange?: (active: boolean) => void;
|
81
87
|
style?: StyleProp<ViewStyle>;
|
82
88
|
testID?: string;
|
89
|
+
|
90
|
+
/**
|
91
|
+
* Delay, in milliseconds, after which the `onLongPress` callback gets called.
|
92
|
+
* Defaults to 600.
|
93
|
+
*/
|
94
|
+
delayLongPress?: number;
|
83
95
|
}
|
84
96
|
|
85
97
|
export interface RectButtonProps extends BaseButtonProps {
|
@@ -111,11 +123,18 @@ export const RawButton = createNativeWrapper(GestureHandlerButton, {
|
|
111
123
|
});
|
112
124
|
|
113
125
|
export class BaseButton extends React.Component<BaseButtonProps> {
|
126
|
+
static defaultProps = {
|
127
|
+
delayLongPress: 600,
|
128
|
+
};
|
129
|
+
|
114
130
|
private lastActive: boolean;
|
131
|
+
private longPressTimeout: ReturnType<typeof setTimeout> | undefined;
|
132
|
+
private longPressDetected: boolean;
|
115
133
|
|
116
134
|
constructor(props: BaseButtonProps) {
|
117
135
|
super(props);
|
118
136
|
this.lastActive = false;
|
137
|
+
this.longPressDetected = false;
|
119
138
|
}
|
120
139
|
|
121
140
|
private handleEvent = ({
|
@@ -129,6 +148,7 @@ export class BaseButton extends React.Component<BaseButtonProps> {
|
|
129
148
|
}
|
130
149
|
|
131
150
|
if (
|
151
|
+
!this.longPressDetected &&
|
132
152
|
oldState === State.ACTIVE &&
|
133
153
|
state !== State.CANCELLED &&
|
134
154
|
this.lastActive &&
|
@@ -137,9 +157,46 @@ export class BaseButton extends React.Component<BaseButtonProps> {
|
|
137
157
|
this.props.onPress(active);
|
138
158
|
}
|
139
159
|
|
160
|
+
if (
|
161
|
+
!this.lastActive &&
|
162
|
+
// NativeViewGestureHandler sends different events based on platform
|
163
|
+
state === (Platform.OS !== 'android' ? State.ACTIVE : State.BEGAN) &&
|
164
|
+
pointerInside
|
165
|
+
) {
|
166
|
+
this.longPressDetected = false;
|
167
|
+
if (this.props.onLongPress) {
|
168
|
+
this.longPressTimeout = setTimeout(
|
169
|
+
this.onLongPress,
|
170
|
+
this.props.delayLongPress
|
171
|
+
);
|
172
|
+
}
|
173
|
+
} else if (
|
174
|
+
// cancel longpress timeout if it's set and the finger moved out of the view
|
175
|
+
state === State.ACTIVE &&
|
176
|
+
!pointerInside &&
|
177
|
+
this.longPressTimeout !== undefined
|
178
|
+
) {
|
179
|
+
clearTimeout(this.longPressTimeout);
|
180
|
+
this.longPressTimeout = undefined;
|
181
|
+
} else if (
|
182
|
+
// cancel longpress timeout if it's set and the gesture has finished
|
183
|
+
this.longPressTimeout !== undefined &&
|
184
|
+
(state === State.END ||
|
185
|
+
state === State.CANCELLED ||
|
186
|
+
state === State.FAILED)
|
187
|
+
) {
|
188
|
+
clearTimeout(this.longPressTimeout);
|
189
|
+
this.longPressTimeout = undefined;
|
190
|
+
}
|
191
|
+
|
140
192
|
this.lastActive = active;
|
141
193
|
};
|
142
194
|
|
195
|
+
private onLongPress = () => {
|
196
|
+
this.longPressDetected = true;
|
197
|
+
this.props.onLongPress?.();
|
198
|
+
};
|
199
|
+
|
143
200
|
// Normally, the parent would execute it's handler first, then forward the
|
144
201
|
// event to listeners. However, here our handler is virtually only forwarding
|
145
202
|
// events to listeners, so we reverse the order to keep the proper order of
|