react-native-gesture-handler 2.7.0 → 2.8.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/android/build.gradle +10 -5
- package/android/noreanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt +3 -3
- package/android/reanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt +7 -7
- package/android/src/fabric/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +2 -2
- package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +3 -3
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/FlingGestureHandler.kt +12 -9
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandler.kt +39 -31
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandlerInteractionController.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandlerOrchestrator.kt +28 -19
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandlerRegistry.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureUtils.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/LongPressGestureHandler.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/ManualGestureHandler.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/NativeViewGestureHandler.kt +5 -5
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/OnTouchEventListener.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/PanGestureHandler.kt +7 -5
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/PinchGestureHandler.kt +11 -4
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/PointerEventsConfig.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/RotationGestureDetector.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/RotationGestureHandler.kt +7 -2
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/ScaleGestureDetector.java +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/TapGestureHandler.kt +3 -3
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/ViewConfigurationHelper.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/react}/Extensions.kt +3 -3
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +7 -6
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.kt +1 -5
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +6 -6
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.kt +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +3 -3
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +35 -14
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.kt +2 -2
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +8 -6
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +0 -2
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.kt +4 -2
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +7 -7
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt +5 -5
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.kt +2 -2
- package/android/src/paper/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +5 -5
- package/ios/Handlers/RNManualHandler.m +24 -8
- package/ios/RNGestureHandlerButtonComponentView.mm +7 -8
- package/ios/RNGestureHandlerManager.mm +176 -178
- package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.windows.js +156 -0
- package/lib/commonjs/RNGestureHandlerModule.windows.js.map +1 -0
- package/lib/commonjs/components/DrawerLayout.js +1 -0
- package/lib/commonjs/components/DrawerLayout.js.map +1 -1
- package/lib/commonjs/components/Swipeable.js.map +1 -1
- package/lib/commonjs/components/touchables/TouchableOpacity.js.map +1 -1
- package/lib/commonjs/getShadowNodeFromRef.js +2 -2
- package/lib/commonjs/getShadowNodeFromRef.js.map +1 -1
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/gestureHandlerCommon.js +5 -2
- package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/commonjs/handlers/gestureHandlerTypesCompat.js +4 -0
- package/lib/commonjs/handlers/gestures/GestureDetector.js +26 -12
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gestureComposition.js +15 -4
- package/lib/commonjs/handlers/gestures/gestureComposition.js.map +1 -1
- package/lib/commonjs/jestUtils/jestUtils.js.map +1 -1
- package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -1
- package/lib/commonjs/web/handlers/FlingGestureHandler.js +18 -15
- package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/GestureHandler.js +36 -7
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js +2 -1
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/ManualGestureHandler.js +15 -0
- package/lib/commonjs/web/handlers/ManualGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +0 -5
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PanGestureHandler.js +0 -5
- package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PinchGestureHandler.js +0 -1
- package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/RotationGestureHandler.js +0 -1
- package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/TapGestureHandler.js +0 -1
- package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/commonjs/web/interfaces.js.map +1 -1
- package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
- package/lib/commonjs/web_hammer/GestureHandler.js.map +1 -1
- package/lib/commonjs/web_hammer/NodeManager.js +4 -1
- package/lib/commonjs/web_hammer/NodeManager.js.map +1 -1
- package/lib/commonjs/web_hammer/PanGestureHandler.js +25 -6
- package/lib/commonjs/web_hammer/PanGestureHandler.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.windows.js +117 -0
- package/lib/module/RNGestureHandlerModule.windows.js.map +1 -0
- package/lib/module/components/DrawerLayout.js +1 -0
- package/lib/module/components/DrawerLayout.js.map +1 -1
- package/lib/module/components/Swipeable.js.map +1 -1
- package/lib/module/components/touchables/TouchableOpacity.js.map +1 -1
- package/lib/module/getShadowNodeFromRef.js +2 -2
- package/lib/module/getShadowNodeFromRef.js.map +1 -1
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/gestureHandlerCommon.js +5 -2
- package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/module/handlers/gestureHandlerTypesCompat.js +1 -1
- package/lib/module/handlers/gestures/GestureDetector.js +26 -12
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
- package/lib/module/handlers/gestures/gesture.js.map +1 -1
- package/lib/module/handlers/gestures/gestureComposition.js +15 -4
- package/lib/module/handlers/gestures/gestureComposition.js.map +1 -1
- package/lib/module/jestUtils/jestUtils.js.map +1 -1
- package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -1
- package/lib/module/web/handlers/FlingGestureHandler.js +18 -15
- package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/GestureHandler.js +36 -6
- package/lib/module/web/handlers/GestureHandler.js.map +1 -1
- package/lib/module/web/handlers/LongPressGestureHandler.js +2 -1
- package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/ManualGestureHandler.js +15 -0
- package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/NativeViewGestureHandler.js +0 -5
- package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PanGestureHandler.js +0 -5
- package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PinchGestureHandler.js +0 -1
- package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/RotationGestureHandler.js +0 -1
- package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/TapGestureHandler.js +0 -1
- package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/module/web/interfaces.js.map +1 -1
- package/lib/module/web/tools/InteractionManager.js.map +1 -1
- package/lib/module/web_hammer/GestureHandler.js.map +1 -1
- package/lib/module/web_hammer/NodeManager.js +4 -1
- package/lib/module/web_hammer/NodeManager.js.map +1 -1
- package/lib/module/web_hammer/PanGestureHandler.js +25 -6
- package/lib/module/web_hammer/PanGestureHandler.js.map +1 -1
- package/lib/typescript/RNGestureHandlerModule.macos.d.ts +1 -1
- package/lib/typescript/RNGestureHandlerModule.web.d.ts +1 -1
- package/lib/typescript/RNGestureHandlerModule.windows.d.ts +48 -0
- package/lib/typescript/components/DrawerLayout.d.ts +7 -0
- package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -1
- package/lib/typescript/handlers/PanGestureHandler.d.ts +1 -1
- package/lib/typescript/handlers/gestureHandlerCommon.d.ts +3 -1
- package/lib/typescript/handlers/gestures/GestureDetector.d.ts +3 -1
- package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +1 -0
- package/lib/typescript/web/handlers/GestureHandler.d.ts +1 -0
- package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +3 -1
- package/lib/typescript/web/interfaces.d.ts +3 -1
- package/lib/typescript/web/tools/NodeManager.d.ts +2 -2
- package/package.json +14 -10
- package/src/RNGestureHandlerModule.macos.ts +2 -2
- package/src/RNGestureHandlerModule.web.ts +2 -2
- package/src/RNGestureHandlerModule.windows.ts +140 -0
- package/src/components/DrawerLayout.tsx +14 -8
- package/src/components/Swipeable.tsx +2 -4
- package/src/components/touchables/TouchableOpacity.tsx +1 -1
- package/src/getShadowNodeFromRef.ts +3 -3
- package/src/handlers/createHandler.tsx +13 -15
- package/src/handlers/gestureHandlerCommon.ts +9 -4
- package/src/handlers/gestureHandlerTypesCompat.ts +34 -17
- package/src/handlers/gestures/GestureDetector.tsx +46 -19
- package/src/handlers/gestures/eventReceiver.ts +2 -1
- package/src/handlers/gestures/gesture.ts +8 -12
- package/src/handlers/gestures/gestureComposition.ts +19 -6
- package/src/jestUtils/jestUtils.ts +3 -4
- package/src/web/detectors/RotationGestureDetector.ts +2 -1
- package/src/web/handlers/FlingGestureHandler.ts +28 -20
- package/src/web/handlers/GestureHandler.ts +42 -17
- package/src/web/handlers/LongPressGestureHandler.ts +2 -2
- package/src/web/handlers/ManualGestureHandler.ts +10 -1
- package/src/web/handlers/NativeViewGestureHandler.ts +0 -5
- package/src/web/handlers/PanGestureHandler.ts +0 -6
- package/src/web/handlers/PinchGestureHandler.ts +0 -2
- package/src/web/handlers/RotationGestureHandler.ts +2 -5
- package/src/web/handlers/TapGestureHandler.ts +0 -2
- package/src/web/interfaces.ts +3 -0
- package/src/web/tools/InteractionManager.ts +2 -3
- package/src/web_hammer/GestureHandler.ts +6 -8
- package/src/web_hammer/NodeManager.ts +3 -1
- package/src/web_hammer/PanGestureHandler.ts +12 -6
- package/android/lib/build.gradle +0 -28
- 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
|
@@ -68,7 +68,7 @@ export default {
|
|
|
68
68
|
NodeManager.createGestureHandler(handlerTag, new GestureClass());
|
|
69
69
|
InteractionManager.getInstance().configureInteractions(
|
|
70
70
|
NodeManager.getHandler(handlerTag),
|
|
71
|
-
|
|
71
|
+
config as unknown as Config
|
|
72
72
|
);
|
|
73
73
|
} else {
|
|
74
74
|
if (!(handlerName in HammerGestures)) {
|
|
@@ -84,7 +84,7 @@ export default {
|
|
|
84
84
|
HammerNodeManager.createGestureHandler(handlerTag, new GestureClass());
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
-
this.updateGestureHandler(handlerTag,
|
|
87
|
+
this.updateGestureHandler(handlerTag, config as unknown as Config);
|
|
88
88
|
},
|
|
89
89
|
attachGestureHandler(
|
|
90
90
|
handlerTag: number,
|
|
@@ -70,7 +70,7 @@ export default {
|
|
|
70
70
|
NodeManager.createGestureHandler(handlerTag, new GestureClass());
|
|
71
71
|
InteractionManager.getInstance().configureInteractions(
|
|
72
72
|
NodeManager.getHandler(handlerTag),
|
|
73
|
-
|
|
73
|
+
config as unknown as Config
|
|
74
74
|
);
|
|
75
75
|
} else {
|
|
76
76
|
if (!(handlerName in HammerGestures)) {
|
|
@@ -86,7 +86,7 @@ export default {
|
|
|
86
86
|
HammerNodeManager.createGestureHandler(handlerTag, new GestureClass());
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
-
this.updateGestureHandler(handlerTag,
|
|
89
|
+
this.updateGestureHandler(handlerTag, config as unknown as Config);
|
|
90
90
|
},
|
|
91
91
|
attachGestureHandler(
|
|
92
92
|
handlerTag: number,
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
import { ActionType } from './ActionType';
|
|
4
|
+
import { isExperimentalWebImplementationEnabled } from './EnableExperimentalWebImplementation';
|
|
5
|
+
|
|
6
|
+
//GestureHandlers
|
|
7
|
+
import InteractionManager from './web/tools/InteractionManager';
|
|
8
|
+
import NodeManager from './web/tools/NodeManager';
|
|
9
|
+
import PanGestureHandler from './web/handlers/PanGestureHandler';
|
|
10
|
+
import TapGestureHandler from './web/handlers/TapGestureHandler';
|
|
11
|
+
import LongPressGestureHandler from './web/handlers/LongPressGestureHandler';
|
|
12
|
+
import PinchGestureHandler from './web/handlers/PinchGestureHandler';
|
|
13
|
+
import RotationGestureHandler from './web/handlers/RotationGestureHandler';
|
|
14
|
+
import FlingGestureHandler from './web/handlers/FlingGestureHandler';
|
|
15
|
+
import NativeViewGestureHandler from './web/handlers/NativeViewGestureHandler';
|
|
16
|
+
import ManualGestureHandler from './web/handlers/ManualGestureHandler';
|
|
17
|
+
|
|
18
|
+
//Hammer Handlers
|
|
19
|
+
import * as HammerNodeManager from './web_hammer/NodeManager';
|
|
20
|
+
import HammerNativeViewGestureHandler from './web_hammer/NativeViewGestureHandler';
|
|
21
|
+
import HammerPanGestureHandler from './web_hammer/PanGestureHandler';
|
|
22
|
+
import HammerTapGestureHandler from './web_hammer/TapGestureHandler';
|
|
23
|
+
import HammerLongPressGestureHandler from './web_hammer/LongPressGestureHandler';
|
|
24
|
+
import HammerPinchGestureHandler from './web_hammer/PinchGestureHandler';
|
|
25
|
+
import HammerRotationGestureHandler from './web_hammer/RotationGestureHandler';
|
|
26
|
+
import HammerFlingGestureHandler from './web_hammer/FlingGestureHandler';
|
|
27
|
+
import { Config } from './web/interfaces';
|
|
28
|
+
|
|
29
|
+
export const Gestures = {
|
|
30
|
+
NativeViewGestureHandler,
|
|
31
|
+
PanGestureHandler,
|
|
32
|
+
TapGestureHandler,
|
|
33
|
+
LongPressGestureHandler,
|
|
34
|
+
PinchGestureHandler,
|
|
35
|
+
RotationGestureHandler,
|
|
36
|
+
FlingGestureHandler,
|
|
37
|
+
ManualGestureHandler,
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export const HammerGestures = {
|
|
41
|
+
NativeViewGestureHandler: HammerNativeViewGestureHandler,
|
|
42
|
+
PanGestureHandler: HammerPanGestureHandler,
|
|
43
|
+
TapGestureHandler: HammerTapGestureHandler,
|
|
44
|
+
LongPressGestureHandler: HammerLongPressGestureHandler,
|
|
45
|
+
PinchGestureHandler: HammerPinchGestureHandler,
|
|
46
|
+
RotationGestureHandler: HammerRotationGestureHandler,
|
|
47
|
+
FlingGestureHandler: HammerFlingGestureHandler,
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export default {
|
|
51
|
+
handleSetJSResponder(_tag: number, _blockNativeResponder: boolean) {
|
|
52
|
+
// NO-OP
|
|
53
|
+
},
|
|
54
|
+
handleClearJSResponder() {
|
|
55
|
+
// NO-OP
|
|
56
|
+
},
|
|
57
|
+
createGestureHandler<T>(
|
|
58
|
+
handlerName: keyof typeof Gestures,
|
|
59
|
+
handlerTag: number,
|
|
60
|
+
config: T
|
|
61
|
+
) {
|
|
62
|
+
if (isExperimentalWebImplementationEnabled()) {
|
|
63
|
+
if (!(handlerName in Gestures)) {
|
|
64
|
+
throw new Error(
|
|
65
|
+
`react-native-gesture-handler: ${handlerName} is not supported on web.`
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const GestureClass = Gestures[handlerName];
|
|
70
|
+
NodeManager.createGestureHandler(handlerTag, new GestureClass());
|
|
71
|
+
InteractionManager.getInstance().configureInteractions(
|
|
72
|
+
NodeManager.getHandler(handlerTag),
|
|
73
|
+
config as unknown as Config
|
|
74
|
+
);
|
|
75
|
+
} else {
|
|
76
|
+
if (!(handlerName in HammerGestures)) {
|
|
77
|
+
throw new Error(
|
|
78
|
+
`react-native-gesture-handler: ${handlerName} is not supported on web.`
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// @ts-ignore If it doesn't exist, the error is thrown
|
|
83
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
84
|
+
const GestureClass = HammerGestures[handlerName];
|
|
85
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
86
|
+
HammerNodeManager.createGestureHandler(handlerTag, new GestureClass());
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
this.updateGestureHandler(handlerTag, config as unknown as Config);
|
|
90
|
+
},
|
|
91
|
+
attachGestureHandler(
|
|
92
|
+
handlerTag: number,
|
|
93
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
94
|
+
newView: any,
|
|
95
|
+
_actionType: ActionType,
|
|
96
|
+
propsRef: React.RefObject<unknown>
|
|
97
|
+
) {
|
|
98
|
+
if (
|
|
99
|
+
!(newView instanceof HTMLElement || newView instanceof React.Component)
|
|
100
|
+
) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (isExperimentalWebImplementationEnabled()) {
|
|
105
|
+
//@ts-ignore Types should be HTMLElement or React.Component
|
|
106
|
+
NodeManager.getHandler(handlerTag).init(newView, propsRef);
|
|
107
|
+
} else {
|
|
108
|
+
//@ts-ignore Types should be HTMLElement or React.Component
|
|
109
|
+
HammerNodeManager.getHandler(handlerTag).setView(newView, propsRef);
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
updateGestureHandler(handlerTag: number, newConfig: Config) {
|
|
113
|
+
if (isExperimentalWebImplementationEnabled()) {
|
|
114
|
+
NodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
|
|
115
|
+
|
|
116
|
+
InteractionManager.getInstance().configureInteractions(
|
|
117
|
+
NodeManager.getHandler(handlerTag),
|
|
118
|
+
newConfig
|
|
119
|
+
);
|
|
120
|
+
} else {
|
|
121
|
+
HammerNodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
getGestureHandlerNode(handlerTag: number) {
|
|
125
|
+
if (isExperimentalWebImplementationEnabled()) {
|
|
126
|
+
return NodeManager.getHandler(handlerTag);
|
|
127
|
+
} else {
|
|
128
|
+
return HammerNodeManager.getHandler(handlerTag);
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
dropGestureHandler(handlerTag: number) {
|
|
132
|
+
if (isExperimentalWebImplementationEnabled()) {
|
|
133
|
+
NodeManager.dropGestureHandler(handlerTag);
|
|
134
|
+
} else {
|
|
135
|
+
HammerNodeManager.dropGestureHandler(handlerTag);
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
139
|
+
flushOperations() {},
|
|
140
|
+
};
|
|
@@ -26,6 +26,7 @@ import {
|
|
|
26
26
|
import {
|
|
27
27
|
GestureEvent,
|
|
28
28
|
HandlerStateChangeEvent,
|
|
29
|
+
UserSelect,
|
|
29
30
|
} from '../handlers/gestureHandlerCommon';
|
|
30
31
|
import {
|
|
31
32
|
PanGestureHandler,
|
|
@@ -153,6 +154,13 @@ export interface DrawerLayoutProps {
|
|
|
153
154
|
children?:
|
|
154
155
|
| React.ReactNode
|
|
155
156
|
| ((openValue?: Animated.AnimatedInterpolation) => React.ReactNode);
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* @default 'none'
|
|
160
|
+
* Defines which userSelect property should be used.
|
|
161
|
+
* Values: 'none'|'text'|'auto'
|
|
162
|
+
*/
|
|
163
|
+
userSelect?: UserSelect;
|
|
156
164
|
}
|
|
157
165
|
|
|
158
166
|
export type DrawerLayoutState = {
|
|
@@ -650,18 +658,15 @@ export default class DrawerLayout extends Component<
|
|
|
650
658
|
private setPanGestureRef = (ref: PanGestureHandler) => {
|
|
651
659
|
// TODO(TS): make sure it is OK taken from
|
|
652
660
|
// https://github.com/DefinitelyTyped/DefinitelyTyped/issues/31065#issuecomment-596081842
|
|
653
|
-
(
|
|
654
|
-
.panGestureHandler as React.MutableRefObject<PanGestureHandler>
|
|
661
|
+
(
|
|
662
|
+
this.panGestureHandler as React.MutableRefObject<PanGestureHandler>
|
|
663
|
+
).current = ref;
|
|
655
664
|
this.props.onGestureRef?.(ref);
|
|
656
665
|
};
|
|
657
666
|
|
|
658
667
|
render() {
|
|
659
|
-
const {
|
|
660
|
-
|
|
661
|
-
drawerLockMode,
|
|
662
|
-
edgeWidth,
|
|
663
|
-
minSwipeDistance,
|
|
664
|
-
} = this.props;
|
|
668
|
+
const { drawerPosition, drawerLockMode, edgeWidth, minSwipeDistance } =
|
|
669
|
+
this.props;
|
|
665
670
|
|
|
666
671
|
const fromLeft = drawerPosition === 'left';
|
|
667
672
|
|
|
@@ -681,6 +686,7 @@ export default class DrawerLayout extends Component<
|
|
|
681
686
|
return (
|
|
682
687
|
<PanGestureHandler
|
|
683
688
|
// @ts-ignore could be fixed in handler types
|
|
689
|
+
userSelect={this.props.userSelect}
|
|
684
690
|
ref={this.setPanGestureRef}
|
|
685
691
|
hitSlop={hitSlop}
|
|
686
692
|
activeOffsetX={gestureOrientation * minSwipeDistance!}
|
|
@@ -257,10 +257,8 @@ export default class Swipeable extends Component<
|
|
|
257
257
|
const { rightOffset = rowWidth } = state;
|
|
258
258
|
const rightWidth = Math.max(0, rowWidth - rightOffset);
|
|
259
259
|
|
|
260
|
-
const {
|
|
261
|
-
|
|
262
|
-
overshootRight = rightWidth > 0,
|
|
263
|
-
} = props;
|
|
260
|
+
const { overshootLeft = leftWidth > 0, overshootRight = rightWidth > 0 } =
|
|
261
|
+
props;
|
|
264
262
|
|
|
265
263
|
const transX = Animated.add(
|
|
266
264
|
rowTranslation,
|
|
@@ -63,7 +63,7 @@ export default class TouchableOpacity extends Component<
|
|
|
63
63
|
style={[
|
|
64
64
|
style,
|
|
65
65
|
{
|
|
66
|
-
opacity:
|
|
66
|
+
opacity: this.opacity as unknown as number, // TODO: fix this
|
|
67
67
|
},
|
|
68
68
|
]}
|
|
69
69
|
onStateChange={this.onStateChange}>
|
|
@@ -8,9 +8,9 @@ export function getShadowNodeFromRef(ref: any) {
|
|
|
8
8
|
// load findHostInstance_DEPRECATED lazily because it may not be available before render
|
|
9
9
|
if (findHostInstance_DEPRECATED === undefined) {
|
|
10
10
|
try {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
.findHostInstance_DEPRECATED;
|
|
11
|
+
findHostInstance_DEPRECATED =
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
13
|
+
require('react-native/Libraries/Renderer/shims/ReactFabric').findHostInstance_DEPRECATED;
|
|
14
14
|
} catch (e) {
|
|
15
15
|
findHostInstance_DEPRECATED = (_ref: any) => null;
|
|
16
16
|
}
|
|
@@ -132,15 +132,14 @@ const stateToPropMappings = {
|
|
|
132
132
|
[State.END]: 'onEnded',
|
|
133
133
|
} as const;
|
|
134
134
|
|
|
135
|
-
type CreateHandlerArgs<
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
}>;
|
|
135
|
+
type CreateHandlerArgs<HandlerPropsT extends Record<string, unknown>> =
|
|
136
|
+
Readonly<{
|
|
137
|
+
name: string;
|
|
138
|
+
allowedProps: Readonly<Extract<keyof HandlerPropsT, string>[]>;
|
|
139
|
+
config: Readonly<Record<string, unknown>>;
|
|
140
|
+
transformProps?: (props: HandlerPropsT) => HandlerPropsT;
|
|
141
|
+
customNativeProps?: Readonly<string[]>;
|
|
142
|
+
}>;
|
|
144
143
|
|
|
145
144
|
// TODO(TS) fix event types
|
|
146
145
|
type InternalEventHandlers = {
|
|
@@ -313,7 +312,9 @@ export default function createHandler<
|
|
|
313
312
|
|
|
314
313
|
if (Platform.OS === 'web') {
|
|
315
314
|
// typecast due to dynamic resolution, attachGestureHandler should have web version signature in this branch
|
|
316
|
-
(
|
|
315
|
+
(
|
|
316
|
+
RNGestureHandlerModule.attachGestureHandler as typeof RNGestureHandlerModuleWeb.attachGestureHandler
|
|
317
|
+
)(
|
|
317
318
|
this.handlerTag,
|
|
318
319
|
newViewTag,
|
|
319
320
|
ActionType.JS_FUNCTION_OLD_API, // ignored on web
|
|
@@ -403,11 +404,8 @@ export default function createHandler<
|
|
|
403
404
|
onGestureEvent?: BaseGestureHandlerProps<U>['onGestureEvent'];
|
|
404
405
|
onGestureHandlerEvent?: InternalEventHandlers['onGestureHandlerEvent'];
|
|
405
406
|
};
|
|
406
|
-
const {
|
|
407
|
-
|
|
408
|
-
onGestureHandlerEvent,
|
|
409
|
-
}: OnGestureEventHandlers = this.props;
|
|
410
|
-
|
|
407
|
+
const { onGestureEvent, onGestureHandlerEvent }: OnGestureEventHandlers =
|
|
408
|
+
this.props;
|
|
411
409
|
if (onGestureEvent && typeof onGestureEvent !== 'function') {
|
|
412
410
|
// If it's not a method it should be an native Animated.event
|
|
413
411
|
// object. We set it directly as the handler for the view
|
|
@@ -18,6 +18,7 @@ const commonProps = [
|
|
|
18
18
|
'shouldCancelWhenOutside',
|
|
19
19
|
'hitSlop',
|
|
20
20
|
'cancelsTouchesInView',
|
|
21
|
+
'userSelect',
|
|
21
22
|
] as const;
|
|
22
23
|
|
|
23
24
|
const componentInteractionProps = ['waitFor', 'simultaneousHandlers'] as const;
|
|
@@ -62,6 +63,8 @@ export type HitSlop =
|
|
|
62
63
|
| Record<'height' | 'top', number>
|
|
63
64
|
| Record<'height' | 'bottom', number>;
|
|
64
65
|
|
|
66
|
+
export type UserSelect = 'none' | 'auto' | 'text';
|
|
67
|
+
|
|
65
68
|
//TODO(TS) events in handlers
|
|
66
69
|
|
|
67
70
|
export interface GestureEvent<ExtraEventPayloadT = Record<string, unknown>> {
|
|
@@ -90,9 +93,8 @@ export type GestureTouchEvent = {
|
|
|
90
93
|
changedTouches: TouchData[];
|
|
91
94
|
};
|
|
92
95
|
|
|
93
|
-
export type GestureUpdateEvent<
|
|
94
|
-
|
|
95
|
-
> = GestureEventPayload & GestureEventPayloadT;
|
|
96
|
+
export type GestureUpdateEvent<GestureEventPayloadT = Record<string, unknown>> =
|
|
97
|
+
GestureEventPayload & GestureEventPayloadT;
|
|
96
98
|
|
|
97
99
|
export type GestureStateChangeEvent<
|
|
98
100
|
GestureStateChangeEventPayloadT = Record<string, unknown>
|
|
@@ -102,6 +104,7 @@ export type CommonGestureConfig = {
|
|
|
102
104
|
enabled?: boolean;
|
|
103
105
|
shouldCancelWhenOutside?: boolean;
|
|
104
106
|
hitSlop?: HitSlop;
|
|
107
|
+
userSelect?: UserSelect;
|
|
105
108
|
};
|
|
106
109
|
|
|
107
110
|
// Events payloads are types instead of interfaces due to TS limitation.
|
|
@@ -182,7 +185,9 @@ function transformIntoHandlerTags(handlerIDs: any) {
|
|
|
182
185
|
export function findNodeHandle(
|
|
183
186
|
node: null | number | React.Component<any, any> | React.ComponentClass<any>
|
|
184
187
|
): null | number | React.Component<any, any> | React.ComponentClass<any> {
|
|
185
|
-
if (Platform.OS === 'web')
|
|
188
|
+
if (Platform.OS === 'web') {
|
|
189
|
+
return node;
|
|
190
|
+
}
|
|
186
191
|
return findNodeHandleRN(node);
|
|
187
192
|
}
|
|
188
193
|
|
|
@@ -45,33 +45,50 @@ import {
|
|
|
45
45
|
|
|
46
46
|
// events
|
|
47
47
|
export type GestureHandlerGestureEventNativeEvent = GestureEventPayload;
|
|
48
|
-
export type GestureHandlerStateChangeNativeEvent =
|
|
48
|
+
export type GestureHandlerStateChangeNativeEvent =
|
|
49
|
+
HandlerStateChangeEventPayload;
|
|
49
50
|
export type GestureHandlerGestureEvent = GestureEvent;
|
|
50
51
|
export type GestureHandlerStateChangeEvent = HandlerStateChangeEvent;
|
|
51
52
|
// gesture handlers events
|
|
52
|
-
export type NativeViewGestureHandlerGestureEvent =
|
|
53
|
-
|
|
53
|
+
export type NativeViewGestureHandlerGestureEvent =
|
|
54
|
+
GestureEvent<NativeViewGestureHandlerPayload>;
|
|
55
|
+
export type NativeViewGestureHandlerStateChangeEvent =
|
|
56
|
+
HandlerStateChangeEvent<NativeViewGestureHandlerPayload>;
|
|
54
57
|
|
|
55
|
-
export type TapGestureHandlerGestureEvent =
|
|
56
|
-
|
|
58
|
+
export type TapGestureHandlerGestureEvent =
|
|
59
|
+
GestureEvent<TapGestureHandlerEventPayload>;
|
|
60
|
+
export type TapGestureHandlerStateChangeEvent =
|
|
61
|
+
HandlerStateChangeEvent<TapGestureHandlerEventPayload>;
|
|
57
62
|
|
|
58
|
-
export type ForceTouchGestureHandlerGestureEvent =
|
|
59
|
-
|
|
63
|
+
export type ForceTouchGestureHandlerGestureEvent =
|
|
64
|
+
GestureEvent<ForceTouchGestureHandlerEventPayload>;
|
|
65
|
+
export type ForceTouchGestureHandlerStateChangeEvent =
|
|
66
|
+
HandlerStateChangeEvent<ForceTouchGestureHandlerEventPayload>;
|
|
60
67
|
|
|
61
|
-
export type LongPressGestureHandlerGestureEvent =
|
|
62
|
-
|
|
68
|
+
export type LongPressGestureHandlerGestureEvent =
|
|
69
|
+
GestureEvent<LongPressGestureHandlerEventPayload>;
|
|
70
|
+
export type LongPressGestureHandlerStateChangeEvent =
|
|
71
|
+
HandlerStateChangeEvent<LongPressGestureHandlerEventPayload>;
|
|
63
72
|
|
|
64
|
-
export type PanGestureHandlerGestureEvent =
|
|
65
|
-
|
|
73
|
+
export type PanGestureHandlerGestureEvent =
|
|
74
|
+
GestureEvent<PanGestureHandlerEventPayload>;
|
|
75
|
+
export type PanGestureHandlerStateChangeEvent =
|
|
76
|
+
HandlerStateChangeEvent<PanGestureHandlerEventPayload>;
|
|
66
77
|
|
|
67
|
-
export type PinchGestureHandlerGestureEvent =
|
|
68
|
-
|
|
78
|
+
export type PinchGestureHandlerGestureEvent =
|
|
79
|
+
GestureEvent<PinchGestureHandlerEventPayload>;
|
|
80
|
+
export type PinchGestureHandlerStateChangeEvent =
|
|
81
|
+
HandlerStateChangeEvent<PinchGestureHandlerEventPayload>;
|
|
69
82
|
|
|
70
|
-
export type RotationGestureHandlerGestureEvent =
|
|
71
|
-
|
|
83
|
+
export type RotationGestureHandlerGestureEvent =
|
|
84
|
+
GestureEvent<RotationGestureHandlerEventPayload>;
|
|
85
|
+
export type RotationGestureHandlerStateChangeEvent =
|
|
86
|
+
HandlerStateChangeEvent<RotationGestureHandlerEventPayload>;
|
|
72
87
|
|
|
73
|
-
export type FlingGestureHandlerGestureEvent =
|
|
74
|
-
|
|
88
|
+
export type FlingGestureHandlerGestureEvent =
|
|
89
|
+
GestureEvent<FlingGestureHandlerEventPayload>;
|
|
90
|
+
export type FlingGestureHandlerStateChangeEvent =
|
|
91
|
+
HandlerStateChangeEvent<FlingGestureHandlerEventPayload>;
|
|
75
92
|
|
|
76
93
|
// handlers properties
|
|
77
94
|
export type NativeViewGestureHandlerProperties = NativeViewGestureHandlerProps;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useEffect, useRef } from 'react';
|
|
1
|
+
import React, { useEffect, useRef, RefObject } from 'react';
|
|
2
2
|
import {
|
|
3
3
|
GestureType,
|
|
4
4
|
HandlerCallbacks,
|
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
GestureStateChangeEvent,
|
|
19
19
|
HandlerStateChangeEvent,
|
|
20
20
|
scheduleFlushOperations,
|
|
21
|
+
UserSelect,
|
|
21
22
|
} from '../gestureHandlerCommon';
|
|
22
23
|
import {
|
|
23
24
|
GestureStateManager,
|
|
@@ -125,7 +126,7 @@ interface WebEventHandler {
|
|
|
125
126
|
|
|
126
127
|
interface AttachHandlersConfig {
|
|
127
128
|
preparedGesture: GestureConfigReference;
|
|
128
|
-
gestureConfig: ComposedGesture | GestureType
|
|
129
|
+
gestureConfig: ComposedGesture | GestureType;
|
|
129
130
|
gesture: GestureType[];
|
|
130
131
|
viewTag: number;
|
|
131
132
|
webEventHandlersRef: React.RefObject<WebEventHandler>;
|
|
@@ -139,7 +140,7 @@ function attachHandlers({
|
|
|
139
140
|
webEventHandlersRef,
|
|
140
141
|
}: AttachHandlersConfig) {
|
|
141
142
|
if (!preparedGesture.firstExecution) {
|
|
142
|
-
gestureConfig
|
|
143
|
+
gestureConfig.initialize();
|
|
143
144
|
} else {
|
|
144
145
|
preparedGesture.firstExecution = false;
|
|
145
146
|
}
|
|
@@ -147,7 +148,7 @@ function attachHandlers({
|
|
|
147
148
|
// use setImmediate to extract handlerTags, because all refs should be initialized
|
|
148
149
|
// when it's ran
|
|
149
150
|
setImmediate(() => {
|
|
150
|
-
gestureConfig
|
|
151
|
+
gestureConfig.prepare();
|
|
151
152
|
});
|
|
152
153
|
|
|
153
154
|
for (const handler of gesture) {
|
|
@@ -197,7 +198,9 @@ function attachHandlers({
|
|
|
197
198
|
: ActionType.JS_FUNCTION_NEW_API;
|
|
198
199
|
|
|
199
200
|
if (Platform.OS === 'web') {
|
|
200
|
-
(
|
|
201
|
+
(
|
|
202
|
+
RNGestureHandlerModule.attachGestureHandler as typeof RNGestureHandlerModuleWeb.attachGestureHandler
|
|
203
|
+
)(
|
|
201
204
|
gesture.handlerTag,
|
|
202
205
|
viewTag,
|
|
203
206
|
ActionType.JS_FUNCTION_OLD_API, // ignored on web
|
|
@@ -215,9 +218,9 @@ function attachHandlers({
|
|
|
215
218
|
if (preparedGesture.animatedHandlers) {
|
|
216
219
|
const isAnimatedGesture = (g: GestureType) => g.shouldUseReanimated;
|
|
217
220
|
|
|
218
|
-
preparedGesture.animatedHandlers.value =
|
|
221
|
+
preparedGesture.animatedHandlers.value = gesture
|
|
219
222
|
.filter(isAnimatedGesture)
|
|
220
|
-
.map((g) => g.handlers) as unknown
|
|
223
|
+
.map((g) => g.handlers) as unknown as HandlerCallbacks<
|
|
221
224
|
Record<string, unknown>
|
|
222
225
|
>[];
|
|
223
226
|
}
|
|
@@ -225,10 +228,11 @@ function attachHandlers({
|
|
|
225
228
|
|
|
226
229
|
function updateHandlers(
|
|
227
230
|
preparedGesture: GestureConfigReference,
|
|
228
|
-
gestureConfig: ComposedGesture | GestureType
|
|
229
|
-
gesture: GestureType[]
|
|
231
|
+
gestureConfig: ComposedGesture | GestureType,
|
|
232
|
+
gesture: GestureType[],
|
|
233
|
+
mountedRef: RefObject<boolean>
|
|
230
234
|
) {
|
|
231
|
-
gestureConfig
|
|
235
|
+
gestureConfig.prepare();
|
|
232
236
|
|
|
233
237
|
for (let i = 0; i < gesture.length; i++) {
|
|
234
238
|
const handler = preparedGesture.config[i];
|
|
@@ -246,6 +250,9 @@ function updateHandlers(
|
|
|
246
250
|
// and handlerTags in BaseGesture references should be updated in the loop above (we need to wait
|
|
247
251
|
// in case of external relations)
|
|
248
252
|
setImmediate(() => {
|
|
253
|
+
if (!mountedRef.current) {
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
249
256
|
for (let i = 0; i < gesture.length; i++) {
|
|
250
257
|
const handler = preparedGesture.config[i];
|
|
251
258
|
|
|
@@ -274,9 +281,9 @@ function updateHandlers(
|
|
|
274
281
|
if (preparedGesture.animatedHandlers) {
|
|
275
282
|
const previousHandlersValue =
|
|
276
283
|
preparedGesture.animatedHandlers.value ?? [];
|
|
277
|
-
const newHandlersValue =
|
|
284
|
+
const newHandlersValue = preparedGesture.config
|
|
278
285
|
.filter((g) => g.shouldUseReanimated) // ignore gestures that shouldn't run on UI
|
|
279
|
-
.map((g) => g.handlers) as unknown
|
|
286
|
+
.map((g) => g.handlers) as unknown as HandlerCallbacks<
|
|
280
287
|
Record<string, unknown>
|
|
281
288
|
>[];
|
|
282
289
|
|
|
@@ -546,9 +553,11 @@ function validateDetectorChildren(ref: any) {
|
|
|
546
553
|
ref._reactInternals.elementType
|
|
547
554
|
: // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
548
555
|
ref._reactInternalFiber.elementType;
|
|
549
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
550
|
-
let instance =
|
|
551
|
-
.
|
|
556
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
557
|
+
let instance =
|
|
558
|
+
RNRenderer.findHostInstance_DEPRECATED(
|
|
559
|
+
ref
|
|
560
|
+
)._internalFiberInstanceHandleDEV;
|
|
552
561
|
|
|
553
562
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
554
563
|
while (instance && instance.elementType !== wrapType) {
|
|
@@ -565,16 +574,32 @@ function validateDetectorChildren(ref: any) {
|
|
|
565
574
|
}
|
|
566
575
|
}
|
|
567
576
|
|
|
577
|
+
const applyUserSelectProp = (
|
|
578
|
+
userSelect: UserSelect,
|
|
579
|
+
gesture: ComposedGesture | GestureType
|
|
580
|
+
): void => {
|
|
581
|
+
for (const g of gesture.toGestureArray()) {
|
|
582
|
+
g.config.userSelect = userSelect;
|
|
583
|
+
}
|
|
584
|
+
};
|
|
585
|
+
|
|
568
586
|
interface GestureDetectorProps {
|
|
569
|
-
gesture
|
|
587
|
+
gesture: ComposedGesture | GestureType;
|
|
588
|
+
userSelect?: UserSelect;
|
|
570
589
|
children?: React.ReactNode;
|
|
571
590
|
}
|
|
572
591
|
export const GestureDetector = (props: GestureDetectorProps) => {
|
|
573
592
|
const gestureConfig = props.gesture;
|
|
574
|
-
|
|
593
|
+
|
|
594
|
+
if (props.userSelect) {
|
|
595
|
+
applyUserSelectProp(props.userSelect, gestureConfig);
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
const gesture = gestureConfig.toGestureArray();
|
|
575
599
|
const useReanimatedHook = gesture.some((g) => g.shouldUseReanimated);
|
|
576
600
|
const viewRef = useRef(null);
|
|
577
601
|
const firstRenderRef = useRef(true);
|
|
602
|
+
const mountedRef = useRef(false);
|
|
578
603
|
const webEventHandlersRef = useRef<WebEventHandler>({
|
|
579
604
|
onGestureHandlerEvent: (e: HandlerStateChangeEvent<unknown>) => {
|
|
580
605
|
onGestureHandlerEvent(e.nativeEvent);
|
|
@@ -608,7 +633,7 @@ export const GestureDetector = (props: GestureDetectorProps) => {
|
|
|
608
633
|
preparedGesture.firstExecution || needsToReattach(preparedGesture, gesture);
|
|
609
634
|
|
|
610
635
|
if (preparedGesture.firstExecution) {
|
|
611
|
-
gestureConfig
|
|
636
|
+
gestureConfig.initialize();
|
|
612
637
|
}
|
|
613
638
|
|
|
614
639
|
if (useReanimatedHook) {
|
|
@@ -619,6 +644,7 @@ export const GestureDetector = (props: GestureDetectorProps) => {
|
|
|
619
644
|
|
|
620
645
|
useEffect(() => {
|
|
621
646
|
firstRenderRef.current = true;
|
|
647
|
+
mountedRef.current = true;
|
|
622
648
|
const viewTag = findNodeHandle(viewRef.current) as number;
|
|
623
649
|
|
|
624
650
|
validateDetectorChildren(viewRef.current);
|
|
@@ -631,6 +657,7 @@ export const GestureDetector = (props: GestureDetectorProps) => {
|
|
|
631
657
|
});
|
|
632
658
|
|
|
633
659
|
return () => {
|
|
660
|
+
mountedRef.current = false;
|
|
634
661
|
dropHandlers(preparedGesture);
|
|
635
662
|
};
|
|
636
663
|
}, []);
|
|
@@ -650,7 +677,7 @@ export const GestureDetector = (props: GestureDetectorProps) => {
|
|
|
650
677
|
webEventHandlersRef,
|
|
651
678
|
});
|
|
652
679
|
} else {
|
|
653
|
-
updateHandlers(preparedGesture, gestureConfig, gesture);
|
|
680
|
+
updateHandlers(preparedGesture, gestureConfig, gesture, mountedRef);
|
|
654
681
|
}
|
|
655
682
|
} else {
|
|
656
683
|
firstRenderRef.current = false;
|
|
@@ -14,7 +14,8 @@ import {
|
|
|
14
14
|
} from './gestureStateManager';
|
|
15
15
|
|
|
16
16
|
let gestureHandlerEventSubscription: EmitterSubscription | null = null;
|
|
17
|
-
let gestureHandlerStateChangeEventSubscription: EmitterSubscription | null =
|
|
17
|
+
let gestureHandlerStateChangeEventSubscription: EmitterSubscription | null =
|
|
18
|
+
null;
|
|
18
19
|
|
|
19
20
|
const gestureStateManagers: Map<number, GestureStateManagerType> = new Map<
|
|
20
21
|
number,
|
|
@@ -202,9 +202,8 @@ export abstract class BaseGesture<
|
|
|
202
202
|
onTouchesDown(callback: TouchEventHandlerType) {
|
|
203
203
|
this.config.needsPointerData = true;
|
|
204
204
|
this.handlers.onTouchesDown = callback;
|
|
205
|
-
this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_DOWN] =
|
|
206
|
-
callback
|
|
207
|
-
);
|
|
205
|
+
this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_DOWN] =
|
|
206
|
+
this.isWorklet(callback);
|
|
208
207
|
|
|
209
208
|
return this;
|
|
210
209
|
}
|
|
@@ -212,9 +211,8 @@ export abstract class BaseGesture<
|
|
|
212
211
|
onTouchesMove(callback: TouchEventHandlerType) {
|
|
213
212
|
this.config.needsPointerData = true;
|
|
214
213
|
this.handlers.onTouchesMove = callback;
|
|
215
|
-
this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_MOVE] =
|
|
216
|
-
callback
|
|
217
|
-
);
|
|
214
|
+
this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_MOVE] =
|
|
215
|
+
this.isWorklet(callback);
|
|
218
216
|
|
|
219
217
|
return this;
|
|
220
218
|
}
|
|
@@ -222,9 +220,8 @@ export abstract class BaseGesture<
|
|
|
222
220
|
onTouchesUp(callback: TouchEventHandlerType) {
|
|
223
221
|
this.config.needsPointerData = true;
|
|
224
222
|
this.handlers.onTouchesUp = callback;
|
|
225
|
-
this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_UP] =
|
|
226
|
-
callback
|
|
227
|
-
);
|
|
223
|
+
this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_UP] =
|
|
224
|
+
this.isWorklet(callback);
|
|
228
225
|
|
|
229
226
|
return this;
|
|
230
227
|
}
|
|
@@ -232,9 +229,8 @@ export abstract class BaseGesture<
|
|
|
232
229
|
onTouchesCancelled(callback: TouchEventHandlerType) {
|
|
233
230
|
this.config.needsPointerData = true;
|
|
234
231
|
this.handlers.onTouchesCancelled = callback;
|
|
235
|
-
this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_CANCELLED] =
|
|
236
|
-
callback
|
|
237
|
-
);
|
|
232
|
+
this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_CANCELLED] =
|
|
233
|
+
this.isWorklet(callback);
|
|
238
234
|
|
|
239
235
|
return this;
|
|
240
236
|
}
|