react-native-gesture-handler 2.9.0 → 2.10.1
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 +1 -1
- package/android/build.gradle +69 -29
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandler.kt +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +2 -0
- package/android/src/main/java/com/swmansion/gesturehandler/core/NativeViewGestureHandler.kt +39 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +8 -2
- package/ios/Handlers/RNNativeViewHandler.mm +4 -4
- package/ios/RNGestureHandlerButtonComponentView.h +2 -2
- package/ios/RNGestureHandlerButtonComponentView.mm +2 -2
- package/ios/RNGestureHandlerManager.mm +65 -16
- package/ios/RNGestureHandlerModule.mm +20 -16
- package/ios/RNGestureHandlerRootViewComponentView.mm +2 -2
- package/ios/RNRootViewGestureRecognizer.m +3 -3
- package/lib/commonjs/EnableNewWebImplementation.js +35 -0
- package/lib/commonjs/EnableNewWebImplementation.js.map +1 -0
- package/lib/commonjs/GestureHandlerRootViewContext.js +15 -0
- package/lib/commonjs/GestureHandlerRootViewContext.js.map +1 -0
- package/lib/commonjs/RNGestureHandlerModule.macos.js +6 -6
- package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.web.js +6 -6
- package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.windows.js +6 -6
- package/lib/commonjs/RNGestureHandlerModule.windows.js.map +1 -1
- package/lib/commonjs/components/GestureComponents.web.js +6 -5
- package/lib/commonjs/components/GestureComponents.web.js.map +1 -1
- package/lib/commonjs/components/GestureHandlerButton.js +3 -5
- package/lib/commonjs/components/GestureHandlerButton.js.map +1 -1
- package/lib/commonjs/{GestureHandlerRootView.android.js → components/GestureHandlerRootView.android.js} +8 -7
- package/lib/commonjs/components/GestureHandlerRootView.android.js.map +1 -0
- package/lib/commonjs/{GestureHandlerRootView.js → components/GestureHandlerRootView.js} +8 -2
- package/lib/commonjs/components/GestureHandlerRootView.js.map +1 -0
- package/lib/commonjs/{GestureHandlerRootView.web.js → components/GestureHandlerRootView.web.js} +7 -1
- package/lib/commonjs/components/GestureHandlerRootView.web.js.map +1 -0
- package/lib/commonjs/components/Swipeable.js +17 -3
- package/lib/commonjs/components/Swipeable.js.map +1 -1
- package/lib/commonjs/{gestureHandlerRootHOC.js.map → components/gestureHandlerRootHOC.js.map} +1 -1
- package/lib/commonjs/handlers/createHandler.js +21 -13
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/gestureHandlerCommon.js +5 -4
- package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector.js +19 -9
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +22 -19
- package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -1
- package/lib/commonjs/index.js +16 -4
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/utils.js +0 -6
- package/lib/commonjs/utils.js.map +1 -1
- package/lib/commonjs/web/handlers/FlingGestureHandler.js +0 -5
- package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/GestureHandler.js +3 -0
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/ManualGestureHandler.js +0 -5
- package/lib/commonjs/web/handlers/ManualGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +0 -6
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PanGestureHandler.js +2 -12
- package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PinchGestureHandler.js +0 -5
- package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/RotationGestureHandler.js +0 -6
- package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/TapGestureHandler.js +0 -6
- package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/commonjs/web/tools/CircularBuffer.js +59 -0
- package/lib/commonjs/web/tools/CircularBuffer.js.map +1 -0
- package/lib/commonjs/web/tools/LeastSquareSolver.js +204 -0
- package/lib/commonjs/web/tools/LeastSquareSolver.js.map +1 -0
- package/lib/commonjs/web/tools/PointerEventManager.js +27 -0
- package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
- package/lib/commonjs/web/tools/PointerTracker.js +11 -7
- package/lib/commonjs/web/tools/PointerTracker.js.map +1 -1
- package/lib/commonjs/web/tools/VelocityTracker.js +111 -0
- package/lib/commonjs/web/tools/VelocityTracker.js.map +1 -0
- package/lib/commonjs/web_hammer/GestureHandler.js +1 -1
- package/lib/commonjs/web_hammer/GestureHandler.js.map +1 -1
- package/lib/module/EnableNewWebImplementation.js +22 -0
- package/lib/module/EnableNewWebImplementation.js.map +1 -0
- package/lib/module/GestureHandlerRootViewContext.js +3 -0
- package/lib/module/GestureHandlerRootViewContext.js.map +1 -0
- package/lib/module/RNGestureHandlerModule.macos.js +6 -6
- package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.web.js +6 -6
- package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.windows.js +6 -6
- package/lib/module/RNGestureHandlerModule.windows.js.map +1 -1
- package/lib/module/components/GestureComponents.web.js +5 -6
- package/lib/module/components/GestureComponents.web.js.map +1 -1
- package/lib/module/components/GestureHandlerButton.js +1 -4
- package/lib/module/components/GestureHandlerButton.js.map +1 -1
- package/lib/module/components/GestureHandlerRootView.android.js +14 -0
- package/lib/module/components/GestureHandlerRootView.android.js.map +1 -0
- package/lib/module/{GestureHandlerRootView.js → components/GestureHandlerRootView.js} +5 -2
- package/lib/module/components/GestureHandlerRootView.js.map +1 -0
- package/lib/module/components/GestureHandlerRootView.web.js +9 -0
- package/lib/module/components/GestureHandlerRootView.web.js.map +1 -0
- package/lib/module/components/Swipeable.js +17 -3
- package/lib/module/components/Swipeable.js.map +1 -1
- package/lib/module/{gestureHandlerRootHOC.js.map → components/gestureHandlerRootHOC.js.map} +1 -1
- package/lib/module/handlers/createHandler.js +20 -13
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/gestureHandlerCommon.js +5 -4
- package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector.js +18 -10
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/module/handlers/gestures/reanimatedWrapper.js +19 -16
- package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -1
- package/lib/module/index.js +4 -4
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils.js +0 -4
- package/lib/module/utils.js.map +1 -1
- package/lib/module/web/handlers/FlingGestureHandler.js +0 -5
- package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/GestureHandler.js +3 -0
- package/lib/module/web/handlers/GestureHandler.js.map +1 -1
- package/lib/module/web/handlers/ManualGestureHandler.js +0 -5
- package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/NativeViewGestureHandler.js +0 -6
- package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PanGestureHandler.js +2 -9
- package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PinchGestureHandler.js +0 -5
- package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/RotationGestureHandler.js +0 -6
- package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/TapGestureHandler.js +0 -6
- package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/module/web/tools/CircularBuffer.js +50 -0
- package/lib/module/web/tools/CircularBuffer.js.map +1 -0
- package/lib/module/web/tools/LeastSquareSolver.js +195 -0
- package/lib/module/web/tools/LeastSquareSolver.js.map +1 -0
- package/lib/module/web/tools/PointerEventManager.js +27 -0
- package/lib/module/web/tools/PointerEventManager.js.map +1 -1
- package/lib/module/web/tools/PointerTracker.js +8 -7
- package/lib/module/web/tools/PointerTracker.js.map +1 -1
- package/lib/module/web/tools/VelocityTracker.js +98 -0
- package/lib/module/web/tools/VelocityTracker.js.map +1 -0
- package/lib/module/web_hammer/GestureHandler.js +1 -1
- package/lib/module/web_hammer/GestureHandler.js.map +1 -1
- package/lib/typescript/EnableNewWebImplementation.d.ts +3 -0
- package/lib/typescript/GestureHandlerRootViewContext.d.ts +3 -0
- package/lib/typescript/components/GestureComponents.web.d.ts +1 -1
- package/lib/typescript/components/Swipeable.d.ts +12 -1
- package/lib/typescript/{gestureHandlerRootHOC.d.ts → components/gestureHandlerRootHOC.d.ts} +1 -1
- package/lib/typescript/index.d.ts +4 -4
- package/lib/typescript/utils.d.ts +0 -1
- package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +0 -1
- package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +0 -1
- package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +0 -1
- package/lib/typescript/web/handlers/PanGestureHandler.d.ts +0 -1
- package/lib/typescript/web/handlers/PinchGestureHandler.d.ts +0 -1
- package/lib/typescript/web/handlers/RotationGestureHandler.d.ts +0 -1
- package/lib/typescript/web/handlers/TapGestureHandler.d.ts +0 -1
- package/lib/typescript/web/tools/CircularBuffer.d.ts +11 -0
- package/lib/typescript/web/tools/LeastSquareSolver.d.ts +12 -0
- package/lib/typescript/web/tools/PointerEventManager.d.ts +2 -0
- package/lib/typescript/web/tools/PointerTracker.d.ts +1 -0
- package/lib/typescript/web/tools/VelocityTracker.d.ts +13 -0
- package/package.json +3 -3
- package/src/EnableNewWebImplementation.ts +35 -0
- package/src/GestureHandlerRootViewContext.ts +3 -0
- package/src/RNGestureHandlerModule.macos.ts +6 -6
- package/src/RNGestureHandlerModule.web.ts +6 -6
- package/src/RNGestureHandlerModule.windows.ts +6 -6
- package/src/components/GestureComponents.web.tsx +5 -6
- package/src/components/GestureHandlerButton.tsx +2 -7
- package/src/components/GestureHandlerRootView.android.tsx +24 -0
- package/src/{GestureHandlerRootView.tsx → components/GestureHandlerRootView.tsx} +7 -2
- package/src/{GestureHandlerRootView.web.tsx → components/GestureHandlerRootView.web.tsx} +6 -1
- package/src/components/Swipeable.tsx +30 -4
- package/src/{gestureHandlerRootHOC.tsx → components/gestureHandlerRootHOC.tsx} +1 -1
- package/src/handlers/createHandler.tsx +20 -9
- package/src/handlers/gestureHandlerCommon.ts +5 -6
- package/src/handlers/gestures/GestureDetector.tsx +19 -9
- package/src/handlers/gestures/reanimatedWrapper.ts +21 -20
- package/src/index.ts +7 -3
- package/src/utils.ts +0 -5
- package/src/web/handlers/FlingGestureHandler.ts +0 -5
- package/src/web/handlers/GestureHandler.ts +3 -0
- package/src/web/handlers/ManualGestureHandler.ts +0 -5
- package/src/web/handlers/NativeViewGestureHandler.ts +0 -6
- package/src/web/handlers/PanGestureHandler.ts +2 -9
- package/src/web/handlers/PinchGestureHandler.ts +0 -5
- package/src/web/handlers/RotationGestureHandler.ts +0 -7
- package/src/web/handlers/TapGestureHandler.ts +0 -6
- package/src/web/tools/CircularBuffer.ts +42 -0
- package/src/web/tools/LeastSquareSolver.ts +182 -0
- package/src/web/tools/PointerEventManager.ts +29 -0
- package/src/web/tools/PointerTracker.ts +7 -7
- package/src/web/tools/VelocityTracker.ts +98 -0
- package/src/web_hammer/GestureHandler.ts +1 -1
- package/lib/commonjs/EnableExperimentalWebImplementation.js +0 -31
- package/lib/commonjs/EnableExperimentalWebImplementation.js.map +0 -1
- package/lib/commonjs/GestureHandlerRootView.android.js.map +0 -1
- package/lib/commonjs/GestureHandlerRootView.js.map +0 -1
- package/lib/commonjs/GestureHandlerRootView.web.js.map +0 -1
- package/lib/module/EnableExperimentalWebImplementation.js +0 -20
- package/lib/module/EnableExperimentalWebImplementation.js.map +0 -1
- package/lib/module/GestureHandlerRootView.android.js +0 -14
- package/lib/module/GestureHandlerRootView.android.js.map +0 -1
- package/lib/module/GestureHandlerRootView.js.map +0 -1
- package/lib/module/GestureHandlerRootView.web.js +0 -6
- package/lib/module/GestureHandlerRootView.web.js.map +0 -1
- package/lib/typescript/EnableExperimentalWebImplementation.d.ts +0 -2
- package/src/EnableExperimentalWebImplementation.ts +0 -27
- package/src/GestureHandlerRootView.android.tsx +0 -24
- /package/lib/commonjs/{gestureHandlerRootHOC.js → components/gestureHandlerRootHOC.js} +0 -0
- /package/lib/commonjs/{fabric → specs}/RNGestureHandlerButtonNativeComponent.js +0 -0
- /package/lib/commonjs/{fabric → specs}/RNGestureHandlerButtonNativeComponent.js.map +0 -0
- /package/lib/commonjs/{fabric → specs}/RNGestureHandlerRootViewNativeComponent.js +0 -0
- /package/lib/commonjs/{fabric → specs}/RNGestureHandlerRootViewNativeComponent.js.map +0 -0
- /package/lib/module/{gestureHandlerRootHOC.js → components/gestureHandlerRootHOC.js} +0 -0
- /package/lib/module/{fabric → specs}/RNGestureHandlerButtonNativeComponent.js +0 -0
- /package/lib/module/{fabric → specs}/RNGestureHandlerButtonNativeComponent.js.map +0 -0
- /package/lib/module/{fabric → specs}/RNGestureHandlerRootViewNativeComponent.js +0 -0
- /package/lib/module/{fabric → specs}/RNGestureHandlerRootViewNativeComponent.js.map +0 -0
- /package/lib/typescript/{GestureHandlerRootView.android.d.ts → components/GestureHandlerRootView.android.d.ts} +0 -0
- /package/lib/typescript/{GestureHandlerRootView.d.ts → components/GestureHandlerRootView.d.ts} +0 -0
- /package/lib/typescript/{GestureHandlerRootView.web.d.ts → components/GestureHandlerRootView.web.d.ts} +0 -0
- /package/lib/typescript/{fabric → specs}/RNGestureHandlerButtonNativeComponent.d.ts +0 -0
- /package/lib/typescript/{fabric → specs}/RNGestureHandlerRootViewNativeComponent.d.ts +0 -0
- /package/src/{fabric → specs}/RNGestureHandlerButtonNativeComponent.ts +0 -0
- /package/src/{fabric → specs}/RNGestureHandlerRootViewNativeComponent.ts +0 -0
|
@@ -9,5 +9,4 @@ export default class ManualGestureHandler extends GestureHandler {
|
|
|
9
9
|
protected onPointerOutOfBounds(event: AdaptedEvent): void;
|
|
10
10
|
protected onPointerUp(event: AdaptedEvent): void;
|
|
11
11
|
protected onPointerRemove(event: AdaptedEvent): void;
|
|
12
|
-
protected onPointerCancel(event: AdaptedEvent): void;
|
|
13
12
|
}
|
|
@@ -18,7 +18,6 @@ export default class NativeViewGestureHandler extends GestureHandler {
|
|
|
18
18
|
protected onPointerUp(event: AdaptedEvent): void;
|
|
19
19
|
protected onPointerRemove(event: AdaptedEvent): void;
|
|
20
20
|
private onUp;
|
|
21
|
-
protected onPointerCancel(event: AdaptedEvent): void;
|
|
22
21
|
shouldRecognizeSimultaneously(handler: GestureHandler): boolean;
|
|
23
22
|
shouldBeCancelledByOther(_handler: GestureHandler): boolean;
|
|
24
23
|
disallowsInterruption(): boolean;
|
|
@@ -47,7 +47,6 @@ export default class PanGestureHandler extends GestureHandler {
|
|
|
47
47
|
protected onPointerUp(event: AdaptedEvent): void;
|
|
48
48
|
protected onPointerRemove(event: AdaptedEvent): void;
|
|
49
49
|
protected onPointerMove(event: AdaptedEvent): void;
|
|
50
|
-
protected onPointerCancel(event: AdaptedEvent): void;
|
|
51
50
|
protected onPointerOutOfBounds(event: AdaptedEvent): void;
|
|
52
51
|
private shouldActivate;
|
|
53
52
|
private shouldFail;
|
|
@@ -21,7 +21,6 @@ export default class PinchGestureHandler extends GestureHandler {
|
|
|
21
21
|
protected onPointerRemove(event: AdaptedEvent): void;
|
|
22
22
|
protected onPointerMove(event: AdaptedEvent): void;
|
|
23
23
|
protected onPointerOutOfBounds(event: AdaptedEvent): void;
|
|
24
|
-
protected onPointerCancel(event: AdaptedEvent): void;
|
|
25
24
|
private tryBegin;
|
|
26
25
|
activate(force?: boolean): void;
|
|
27
26
|
protected onReset(): void;
|
|
@@ -23,7 +23,6 @@ export default class RotationGestureHandler extends GestureHandler {
|
|
|
23
23
|
protected onPointerOutOfBounds(event: AdaptedEvent): void;
|
|
24
24
|
protected onPointerUp(event: AdaptedEvent): void;
|
|
25
25
|
protected onPointerRemove(event: AdaptedEvent): void;
|
|
26
|
-
protected onPointerCancel(event: AdaptedEvent): void;
|
|
27
26
|
protected tryBegin(): void;
|
|
28
27
|
activate(_force?: boolean): void;
|
|
29
28
|
protected onReset(): void;
|
|
@@ -36,7 +36,6 @@ export default class TapGestureHandler extends GestureHandler {
|
|
|
36
36
|
protected onPointerRemove(event: AdaptedEvent): void;
|
|
37
37
|
protected onPointerMove(event: AdaptedEvent): void;
|
|
38
38
|
protected onPointerOutOfBounds(event: AdaptedEvent): void;
|
|
39
|
-
protected onPointerCancel(event: AdaptedEvent): void;
|
|
40
39
|
private updateState;
|
|
41
40
|
private trySettingPosition;
|
|
42
41
|
private shouldFail;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
declare class PolynomialFit {
|
|
2
|
+
coefficients: number[];
|
|
3
|
+
constructor(degree: number);
|
|
4
|
+
}
|
|
5
|
+
export default class LeastSquareSolver {
|
|
6
|
+
private x;
|
|
7
|
+
private y;
|
|
8
|
+
private w;
|
|
9
|
+
constructor(x: number[], y: number[], w: number[]);
|
|
10
|
+
solve(degree: number): PolynomialFit | null;
|
|
11
|
+
}
|
|
12
|
+
export {};
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { AdaptedEvent, EventTypes } from '../interfaces';
|
|
2
2
|
import EventManager from './EventManager';
|
|
3
3
|
export default class PointerEventManager extends EventManager {
|
|
4
|
+
private trackedPointers;
|
|
4
5
|
setListeners(): void;
|
|
5
6
|
protected mapEvent(event: PointerEvent, eventType: EventTypes): AdaptedEvent;
|
|
7
|
+
resetManager(): void;
|
|
6
8
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AdaptedEvent } from '../interfaces';
|
|
2
|
+
export default class VelocityTracker {
|
|
3
|
+
private assumePointerMoveStoppedMilliseconds;
|
|
4
|
+
private historySize;
|
|
5
|
+
private horizonMilliseconds;
|
|
6
|
+
private minSampleSize;
|
|
7
|
+
private samples;
|
|
8
|
+
constructor();
|
|
9
|
+
add(event: AdaptedEvent): void;
|
|
10
|
+
private getVelocityEstimate;
|
|
11
|
+
getVelocity(): [number, number];
|
|
12
|
+
reset(): void;
|
|
13
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-gesture-handler",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.10.1",
|
|
4
4
|
"description": "Experimental implementation of a new declarative API for gesture handling in react-native",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"prepare": "bob build && husky install",
|
|
@@ -142,11 +142,11 @@
|
|
|
142
142
|
"eslintIgnore": [
|
|
143
143
|
"node_modules/",
|
|
144
144
|
"lib/",
|
|
145
|
-
"src/
|
|
145
|
+
"src/specs/*NativeComponent.js"
|
|
146
146
|
],
|
|
147
147
|
"codegenConfig": {
|
|
148
148
|
"name": "rngesturehandler_codegen",
|
|
149
149
|
"type": "components",
|
|
150
|
-
"jsSrcsDir": "./src/
|
|
150
|
+
"jsSrcsDir": "./src/specs"
|
|
151
151
|
}
|
|
152
152
|
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Platform } from 'react-native';
|
|
2
|
+
|
|
3
|
+
let useNewWebImplementation = true;
|
|
4
|
+
let getWasCalled = false;
|
|
5
|
+
|
|
6
|
+
export function enableExperimentalWebImplementation(
|
|
7
|
+
_shouldEnable = true
|
|
8
|
+
): void {
|
|
9
|
+
// NO-OP since the new implementation is now the default
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function enableLegacyWebImplementation(
|
|
13
|
+
shouldUseLegacyImplementation = true
|
|
14
|
+
): void {
|
|
15
|
+
if (
|
|
16
|
+
Platform.OS !== 'web' ||
|
|
17
|
+
useNewWebImplementation === !shouldUseLegacyImplementation
|
|
18
|
+
) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
if (getWasCalled) {
|
|
23
|
+
console.error(
|
|
24
|
+
'Some parts of this application have already started using the new gesture handler implementation. No changes will be applied. You can try enabling legacy implementation earlier.'
|
|
25
|
+
);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
useNewWebImplementation = !shouldUseLegacyImplementation;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function isNewWebImplementationEnabled(): boolean {
|
|
33
|
+
getWasCalled = true;
|
|
34
|
+
return useNewWebImplementation;
|
|
35
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ActionType } from './ActionType';
|
|
2
|
-
import {
|
|
2
|
+
import { isNewWebImplementationEnabled } from './EnableNewWebImplementation';
|
|
3
3
|
|
|
4
4
|
//GestureHandlers
|
|
5
5
|
import InteractionManager from './web/tools/InteractionManager';
|
|
@@ -57,7 +57,7 @@ export default {
|
|
|
57
57
|
handlerTag: number,
|
|
58
58
|
config: T
|
|
59
59
|
) {
|
|
60
|
-
if (
|
|
60
|
+
if (isNewWebImplementationEnabled()) {
|
|
61
61
|
if (!(handlerName in Gestures)) {
|
|
62
62
|
throw new Error(
|
|
63
63
|
`react-native-gesture-handler: ${handlerName} is not supported on web.`
|
|
@@ -92,14 +92,14 @@ export default {
|
|
|
92
92
|
_actionType: ActionType,
|
|
93
93
|
propsRef: React.RefObject<unknown>
|
|
94
94
|
) {
|
|
95
|
-
if (
|
|
95
|
+
if (isNewWebImplementationEnabled()) {
|
|
96
96
|
NodeManager.getHandler(handlerTag).init(newView, propsRef);
|
|
97
97
|
} else {
|
|
98
98
|
HammerNodeManager.getHandler(handlerTag).setView(newView, propsRef);
|
|
99
99
|
}
|
|
100
100
|
},
|
|
101
101
|
updateGestureHandler(handlerTag: number, newConfig: Config) {
|
|
102
|
-
if (
|
|
102
|
+
if (isNewWebImplementationEnabled()) {
|
|
103
103
|
NodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
|
|
104
104
|
|
|
105
105
|
InteractionManager.getInstance().configureInteractions(
|
|
@@ -111,14 +111,14 @@ export default {
|
|
|
111
111
|
}
|
|
112
112
|
},
|
|
113
113
|
getGestureHandlerNode(handlerTag: number) {
|
|
114
|
-
if (
|
|
114
|
+
if (isNewWebImplementationEnabled()) {
|
|
115
115
|
return NodeManager.getHandler(handlerTag);
|
|
116
116
|
} else {
|
|
117
117
|
return HammerNodeManager.getHandler(handlerTag);
|
|
118
118
|
}
|
|
119
119
|
},
|
|
120
120
|
dropGestureHandler(handlerTag: number) {
|
|
121
|
-
if (
|
|
121
|
+
if (isNewWebImplementationEnabled()) {
|
|
122
122
|
NodeManager.dropGestureHandler(handlerTag);
|
|
123
123
|
} else {
|
|
124
124
|
HammerNodeManager.dropGestureHandler(handlerTag);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
|
|
3
3
|
import { ActionType } from './ActionType';
|
|
4
|
-
import {
|
|
4
|
+
import { isNewWebImplementationEnabled } from './EnableNewWebImplementation';
|
|
5
5
|
|
|
6
6
|
//GestureHandlers
|
|
7
7
|
import InteractionManager from './web/tools/InteractionManager';
|
|
@@ -59,7 +59,7 @@ export default {
|
|
|
59
59
|
handlerTag: number,
|
|
60
60
|
config: T
|
|
61
61
|
) {
|
|
62
|
-
if (
|
|
62
|
+
if (isNewWebImplementationEnabled()) {
|
|
63
63
|
if (!(handlerName in Gestures)) {
|
|
64
64
|
throw new Error(
|
|
65
65
|
`react-native-gesture-handler: ${handlerName} is not supported on web.`
|
|
@@ -101,7 +101,7 @@ export default {
|
|
|
101
101
|
return;
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
-
if (
|
|
104
|
+
if (isNewWebImplementationEnabled()) {
|
|
105
105
|
//@ts-ignore Types should be HTMLElement or React.Component
|
|
106
106
|
NodeManager.getHandler(handlerTag).init(newView, propsRef);
|
|
107
107
|
} else {
|
|
@@ -110,7 +110,7 @@ export default {
|
|
|
110
110
|
}
|
|
111
111
|
},
|
|
112
112
|
updateGestureHandler(handlerTag: number, newConfig: Config) {
|
|
113
|
-
if (
|
|
113
|
+
if (isNewWebImplementationEnabled()) {
|
|
114
114
|
NodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
|
|
115
115
|
|
|
116
116
|
InteractionManager.getInstance().configureInteractions(
|
|
@@ -122,14 +122,14 @@ export default {
|
|
|
122
122
|
}
|
|
123
123
|
},
|
|
124
124
|
getGestureHandlerNode(handlerTag: number) {
|
|
125
|
-
if (
|
|
125
|
+
if (isNewWebImplementationEnabled()) {
|
|
126
126
|
return NodeManager.getHandler(handlerTag);
|
|
127
127
|
} else {
|
|
128
128
|
return HammerNodeManager.getHandler(handlerTag);
|
|
129
129
|
}
|
|
130
130
|
},
|
|
131
131
|
dropGestureHandler(handlerTag: number) {
|
|
132
|
-
if (
|
|
132
|
+
if (isNewWebImplementationEnabled()) {
|
|
133
133
|
NodeManager.dropGestureHandler(handlerTag);
|
|
134
134
|
} else {
|
|
135
135
|
HammerNodeManager.dropGestureHandler(handlerTag);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
|
|
3
3
|
import { ActionType } from './ActionType';
|
|
4
|
-
import {
|
|
4
|
+
import { isNewWebImplementationEnabled } from './EnableNewWebImplementation';
|
|
5
5
|
|
|
6
6
|
//GestureHandlers
|
|
7
7
|
import InteractionManager from './web/tools/InteractionManager';
|
|
@@ -59,7 +59,7 @@ export default {
|
|
|
59
59
|
handlerTag: number,
|
|
60
60
|
config: T
|
|
61
61
|
) {
|
|
62
|
-
if (
|
|
62
|
+
if (isNewWebImplementationEnabled()) {
|
|
63
63
|
if (!(handlerName in Gestures)) {
|
|
64
64
|
throw new Error(
|
|
65
65
|
`react-native-gesture-handler: ${handlerName} is not supported on web.`
|
|
@@ -101,7 +101,7 @@ export default {
|
|
|
101
101
|
return;
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
-
if (
|
|
104
|
+
if (isNewWebImplementationEnabled()) {
|
|
105
105
|
//@ts-ignore Types should be HTMLElement or React.Component
|
|
106
106
|
NodeManager.getHandler(handlerTag).init(newView, propsRef);
|
|
107
107
|
} else {
|
|
@@ -110,7 +110,7 @@ export default {
|
|
|
110
110
|
}
|
|
111
111
|
},
|
|
112
112
|
updateGestureHandler(handlerTag: number, newConfig: Config) {
|
|
113
|
-
if (
|
|
113
|
+
if (isNewWebImplementationEnabled()) {
|
|
114
114
|
NodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
|
|
115
115
|
|
|
116
116
|
InteractionManager.getInstance().configureInteractions(
|
|
@@ -122,14 +122,14 @@ export default {
|
|
|
122
122
|
}
|
|
123
123
|
},
|
|
124
124
|
getGestureHandlerNode(handlerTag: number) {
|
|
125
|
-
if (
|
|
125
|
+
if (isNewWebImplementationEnabled()) {
|
|
126
126
|
return NodeManager.getHandler(handlerTag);
|
|
127
127
|
} else {
|
|
128
128
|
return HammerNodeManager.getHandler(handlerTag);
|
|
129
129
|
}
|
|
130
130
|
},
|
|
131
131
|
dropGestureHandler(handlerTag: number) {
|
|
132
|
-
if (
|
|
132
|
+
if (isNewWebImplementationEnabled()) {
|
|
133
133
|
NodeManager.dropGestureHandler(handlerTag);
|
|
134
134
|
} else {
|
|
135
135
|
HammerNodeManager.dropGestureHandler(handlerTag);
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import {
|
|
3
|
-
DrawerLayoutAndroid as RNDrawerLayoutAndroid,
|
|
4
3
|
FlatList as RNFlatList,
|
|
5
4
|
Switch as RNSwitch,
|
|
6
5
|
TextInput as RNTextInput,
|
|
@@ -21,11 +20,11 @@ export const Switch = createNativeWrapper(RNSwitch, {
|
|
|
21
20
|
disallowInterruption: true,
|
|
22
21
|
});
|
|
23
22
|
export const TextInput = createNativeWrapper(RNTextInput);
|
|
24
|
-
export const DrawerLayoutAndroid =
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
export const DrawerLayoutAndroid = () => {
|
|
24
|
+
console.warn('DrawerLayoutAndroid is not supported on web!');
|
|
25
|
+
return <View />;
|
|
26
|
+
};
|
|
27
|
+
|
|
29
28
|
// RefreshControl is implemented as a functional component, rendering a View
|
|
30
29
|
// NativeViewGestureHandler needs to set a ref on its child, which cannot be done
|
|
31
30
|
// on functional components
|
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
import { HostComponent, requireNativeComponent } from 'react-native';
|
|
1
|
+
import { HostComponent } from 'react-native';
|
|
3
2
|
import { RawButtonProps } from './GestureButtons';
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
const RNGestureHandlerButtonNativeComponent = shouldUseCodegenNativeComponent()
|
|
7
|
-
? require('../fabric/RNGestureHandlerButtonNativeComponent').default
|
|
8
|
-
: requireNativeComponent('RNGestureHandlerButton');
|
|
3
|
+
import RNGestureHandlerButtonNativeComponent from '../specs/RNGestureHandlerButtonNativeComponent';
|
|
9
4
|
|
|
10
5
|
export default RNGestureHandlerButtonNativeComponent as HostComponent<RawButtonProps>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { PropsWithChildren } from 'react';
|
|
3
|
+
import { ViewProps } from 'react-native';
|
|
4
|
+
import { maybeInitializeFabric } from '../init';
|
|
5
|
+
import GestureHandlerRootViewContext from '../GestureHandlerRootViewContext';
|
|
6
|
+
import GestureHandlerRootViewNativeComponent from '../specs/RNGestureHandlerRootViewNativeComponent';
|
|
7
|
+
|
|
8
|
+
export interface GestureHandlerRootViewProps
|
|
9
|
+
extends PropsWithChildren<ViewProps> {}
|
|
10
|
+
|
|
11
|
+
export default function GestureHandlerRootView(
|
|
12
|
+
props: GestureHandlerRootViewProps
|
|
13
|
+
) {
|
|
14
|
+
// try initialize fabric on the first render, at this point we can
|
|
15
|
+
// reliably check if fabric is enabled (the function contains a flag
|
|
16
|
+
// to make sure it's called only once)
|
|
17
|
+
maybeInitializeFabric();
|
|
18
|
+
|
|
19
|
+
return (
|
|
20
|
+
<GestureHandlerRootViewContext.Provider value>
|
|
21
|
+
<GestureHandlerRootViewNativeComponent {...props} />
|
|
22
|
+
</GestureHandlerRootViewContext.Provider>
|
|
23
|
+
);
|
|
24
|
+
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { PropsWithChildren } from 'react';
|
|
3
3
|
import { View, ViewProps } from 'react-native';
|
|
4
|
-
import { maybeInitializeFabric } from '
|
|
4
|
+
import { maybeInitializeFabric } from '../init';
|
|
5
|
+
import GestureHandlerRootViewContext from '../GestureHandlerRootViewContext';
|
|
5
6
|
|
|
6
7
|
export interface GestureHandlerRootViewProps
|
|
7
8
|
extends PropsWithChildren<ViewProps> {}
|
|
@@ -14,5 +15,9 @@ export default function GestureHandlerRootView(
|
|
|
14
15
|
// to make sure it's called only once)
|
|
15
16
|
maybeInitializeFabric();
|
|
16
17
|
|
|
17
|
-
return
|
|
18
|
+
return (
|
|
19
|
+
<GestureHandlerRootViewContext.Provider value>
|
|
20
|
+
<View {...props} />
|
|
21
|
+
</GestureHandlerRootViewContext.Provider>
|
|
22
|
+
);
|
|
18
23
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { PropsWithChildren } from 'react';
|
|
3
3
|
import { View, ViewProps } from 'react-native';
|
|
4
|
+
import GestureHandlerRootViewContext from '../GestureHandlerRootViewContext';
|
|
4
5
|
|
|
5
6
|
export interface GestureHandlerRootViewProps
|
|
6
7
|
extends PropsWithChildren<ViewProps> {}
|
|
@@ -8,5 +9,9 @@ export interface GestureHandlerRootViewProps
|
|
|
8
9
|
export default function GestureHandlerRootView(
|
|
9
10
|
props: GestureHandlerRootViewProps
|
|
10
11
|
) {
|
|
11
|
-
return
|
|
12
|
+
return (
|
|
13
|
+
<GestureHandlerRootViewContext.Provider value>
|
|
14
|
+
<View {...props} />
|
|
15
|
+
</GestureHandlerRootViewContext.Provider>
|
|
16
|
+
);
|
|
12
17
|
}
|
|
@@ -73,6 +73,18 @@ export interface SwipeableProps
|
|
|
73
73
|
*/
|
|
74
74
|
rightThreshold?: number;
|
|
75
75
|
|
|
76
|
+
/**
|
|
77
|
+
* Distance that the panel must be dragged from the left edge to be considered
|
|
78
|
+
* a swipe. The default value is 10.
|
|
79
|
+
*/
|
|
80
|
+
dragOffsetFromLeftEdge?: number;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Distance that the panel must be dragged from the right edge to be considered
|
|
84
|
+
* a swipe. The default value is 10.
|
|
85
|
+
*/
|
|
86
|
+
dragOffsetFromRightEdge?: number;
|
|
87
|
+
|
|
76
88
|
/**
|
|
77
89
|
* Value indicating if the swipeable panel can be pulled further than the left
|
|
78
90
|
* actions panel's width. It is set to true by default as long as the left
|
|
@@ -156,7 +168,8 @@ export interface SwipeableProps
|
|
|
156
168
|
* */
|
|
157
169
|
renderLeftActions?: (
|
|
158
170
|
progressAnimatedValue: AnimatedInterpolation,
|
|
159
|
-
dragAnimatedValue: AnimatedInterpolation
|
|
171
|
+
dragAnimatedValue: AnimatedInterpolation,
|
|
172
|
+
swipeable: Swipeable
|
|
160
173
|
) => React.ReactNode;
|
|
161
174
|
/**
|
|
162
175
|
*
|
|
@@ -442,9 +455,22 @@ export default class Swipeable extends Component<
|
|
|
442
455
|
this.animateRow(this.currentOffset(), -rightWidth);
|
|
443
456
|
};
|
|
444
457
|
|
|
458
|
+
reset = () => {
|
|
459
|
+
const { dragX, rowTranslation } = this.state;
|
|
460
|
+
dragX.setValue(0);
|
|
461
|
+
rowTranslation.setValue(0);
|
|
462
|
+
this.setState({ rowState: 0 });
|
|
463
|
+
};
|
|
464
|
+
|
|
445
465
|
render() {
|
|
446
466
|
const { rowState } = this.state;
|
|
447
|
-
const {
|
|
467
|
+
const {
|
|
468
|
+
children,
|
|
469
|
+
renderLeftActions,
|
|
470
|
+
renderRightActions,
|
|
471
|
+
dragOffsetFromLeftEdge = 10,
|
|
472
|
+
dragOffsetFromRightEdge = 10,
|
|
473
|
+
} = this.props;
|
|
448
474
|
|
|
449
475
|
const left = renderLeftActions && (
|
|
450
476
|
<Animated.View
|
|
@@ -455,7 +481,7 @@ export default class Swipeable extends Component<
|
|
|
455
481
|
// it for some reason
|
|
456
482
|
{ transform: [{ translateX: this.leftActionTranslate! }] },
|
|
457
483
|
]}>
|
|
458
|
-
{renderLeftActions(this.showLeftAction!, this.transX
|
|
484
|
+
{renderLeftActions(this.showLeftAction!, this.transX!, this)}
|
|
459
485
|
<View
|
|
460
486
|
onLayout={({ nativeEvent }) =>
|
|
461
487
|
this.setState({ leftWidth: nativeEvent.layout.x })
|
|
@@ -481,7 +507,7 @@ export default class Swipeable extends Component<
|
|
|
481
507
|
|
|
482
508
|
return (
|
|
483
509
|
<PanGestureHandler
|
|
484
|
-
activeOffsetX={[-
|
|
510
|
+
activeOffsetX={[-dragOffsetFromRightEdge, dragOffsetFromLeftEdge]}
|
|
485
511
|
{...this.props}
|
|
486
512
|
onGestureEvent={this.onGestureEvent}
|
|
487
513
|
onHandlerStateChange={this.onHandlerStateChange}>
|
|
@@ -4,7 +4,7 @@ import hoistNonReactStatics from 'hoist-non-react-statics';
|
|
|
4
4
|
import GestureHandlerRootView from './GestureHandlerRootView';
|
|
5
5
|
|
|
6
6
|
export default function gestureHandlerRootHOC<
|
|
7
|
-
P extends
|
|
7
|
+
P extends Record<string, unknown>
|
|
8
8
|
>(
|
|
9
9
|
Component: React.ComponentType<P>,
|
|
10
10
|
containerStyles?: StyleProp<ViewStyle>
|
|
@@ -28,6 +28,7 @@ import { ValueOf } from '../typeUtils';
|
|
|
28
28
|
import { isFabric, isJestEnv, tagMessage } from '../utils';
|
|
29
29
|
import { ActionType } from '../ActionType';
|
|
30
30
|
import { PressabilityDebugView } from './PressabilityDebugView';
|
|
31
|
+
import GestureHandlerRootViewContext from '../GestureHandlerRootViewContext';
|
|
31
32
|
|
|
32
33
|
const UIManagerAny = UIManager as any;
|
|
33
34
|
|
|
@@ -168,13 +169,14 @@ export default function createHandler<
|
|
|
168
169
|
HandlerState
|
|
169
170
|
> {
|
|
170
171
|
static displayName = name;
|
|
172
|
+
static contextType = GestureHandlerRootViewContext;
|
|
171
173
|
|
|
172
174
|
private handlerTag: number;
|
|
173
175
|
private config: Record<string, unknown>;
|
|
174
176
|
private propsRef: React.MutableRefObject<unknown>;
|
|
177
|
+
private isMountedRef: React.MutableRefObject<boolean | null>;
|
|
175
178
|
private viewNode: any;
|
|
176
179
|
private viewTag?: number;
|
|
177
|
-
private updateEnqueued: ReturnType<typeof setImmediate> | null = null;
|
|
178
180
|
private inspectorToggleListener?: EmitterSubscription;
|
|
179
181
|
|
|
180
182
|
constructor(props: T & InternalEventHandlers) {
|
|
@@ -182,6 +184,7 @@ export default function createHandler<
|
|
|
182
184
|
this.handlerTag = getNextHandlerTag();
|
|
183
185
|
this.config = {};
|
|
184
186
|
this.propsRef = React.createRef();
|
|
187
|
+
this.isMountedRef = React.createRef();
|
|
185
188
|
this.state = { allowTouches };
|
|
186
189
|
if (props.id) {
|
|
187
190
|
if (handlerIDToTag[props.id] !== undefined) {
|
|
@@ -193,6 +196,7 @@ export default function createHandler<
|
|
|
193
196
|
|
|
194
197
|
componentDidMount() {
|
|
195
198
|
const props: HandlerProps<U> = this.props;
|
|
199
|
+
this.isMountedRef.current = true;
|
|
196
200
|
|
|
197
201
|
if (DEV_ON_ANDROID) {
|
|
198
202
|
this.inspectorToggleListener = DeviceEventEmitter.addListener(
|
|
@@ -207,11 +211,10 @@ export default function createHandler<
|
|
|
207
211
|
// If there are unresolved refs (e.g. ".current" has not yet been set)
|
|
208
212
|
// passed as `simultaneousHandlers` or `waitFor`, we enqueue a call to
|
|
209
213
|
// _update method that will try to update native handler props using
|
|
210
|
-
//
|
|
214
|
+
// queueMicrotask. This makes it so update() function gets called after all
|
|
211
215
|
// react components are mounted and we expect the missing ref object to
|
|
212
216
|
// be resolved by then.
|
|
213
|
-
|
|
214
|
-
this.updateEnqueued = null;
|
|
217
|
+
queueMicrotask(() => {
|
|
215
218
|
this.update(UNRESOLVED_REFS_RETRY_LIMIT);
|
|
216
219
|
});
|
|
217
220
|
}
|
|
@@ -237,11 +240,9 @@ export default function createHandler<
|
|
|
237
240
|
|
|
238
241
|
componentWillUnmount() {
|
|
239
242
|
this.inspectorToggleListener?.remove();
|
|
243
|
+
this.isMountedRef.current = false;
|
|
240
244
|
RNGestureHandlerModule.dropGestureHandler(this.handlerTag);
|
|
241
245
|
scheduleFlushOperations();
|
|
242
|
-
if (this.updateEnqueued) {
|
|
243
|
-
clearImmediate(this.updateEnqueued);
|
|
244
|
-
}
|
|
245
246
|
// We can't use this.props.id directly due to TS generic type narrowing bug, see https://github.com/microsoft/TypeScript/issues/13995 for more context
|
|
246
247
|
const handlerID: string | undefined = this.props.id;
|
|
247
248
|
if (handlerID) {
|
|
@@ -365,14 +366,17 @@ export default function createHandler<
|
|
|
365
366
|
};
|
|
366
367
|
|
|
367
368
|
private update(remainingTries: number) {
|
|
369
|
+
if (!this.isMountedRef.current) {
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
|
|
368
373
|
const props: HandlerProps<U> = this.props;
|
|
369
374
|
|
|
370
375
|
// When ref is set via a function i.e. `ref={(r) => refObject.current = r}` instead of
|
|
371
376
|
// `ref={refObject}` it's possible that it won't be resolved in time. Seems like trying
|
|
372
377
|
// again is easy enough fix.
|
|
373
378
|
if (hasUnresolvedRefs(props) && remainingTries > 0) {
|
|
374
|
-
|
|
375
|
-
this.updateEnqueued = null;
|
|
379
|
+
queueMicrotask(() => {
|
|
376
380
|
this.update(remainingTries - 1);
|
|
377
381
|
});
|
|
378
382
|
} else {
|
|
@@ -398,6 +402,13 @@ export default function createHandler<
|
|
|
398
402
|
}
|
|
399
403
|
|
|
400
404
|
render() {
|
|
405
|
+
if (__DEV__ && !this.context) {
|
|
406
|
+
throw new Error(
|
|
407
|
+
name +
|
|
408
|
+
' must be used as a descendant of GestureHandlerRootView. Otherwise the gestures will not be recognized. See https://docs.swmansion.com/react-native-gesture-handler/docs/installation for more details.'
|
|
409
|
+
);
|
|
410
|
+
}
|
|
411
|
+
|
|
401
412
|
let gestureEventHandler = this.onGestureHandlerEvent;
|
|
402
413
|
// Another instance of https://github.com/microsoft/TypeScript/issues/13995
|
|
403
414
|
type OnGestureEventHandlers = {
|
|
@@ -191,16 +191,15 @@ export function findNodeHandle(
|
|
|
191
191
|
return findNodeHandleRN(node);
|
|
192
192
|
}
|
|
193
193
|
|
|
194
|
-
let
|
|
195
|
-
typeof requestAnimationFrame
|
|
196
|
-
> | null = null;
|
|
194
|
+
let flushOperationsScheduled = false;
|
|
197
195
|
|
|
198
196
|
export function scheduleFlushOperations() {
|
|
199
|
-
if (
|
|
200
|
-
|
|
197
|
+
if (!flushOperationsScheduled) {
|
|
198
|
+
flushOperationsScheduled = true;
|
|
199
|
+
queueMicrotask(() => {
|
|
201
200
|
RNGestureHandlerModule.flushOperations();
|
|
202
201
|
|
|
203
|
-
|
|
202
|
+
flushOperationsScheduled = false;
|
|
204
203
|
});
|
|
205
204
|
}
|
|
206
205
|
}
|