react-native-gesture-handler 2.6.0 → 2.6.2
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 +2 -2
- package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/RNGestureHandler.xcodeproj/xcuserdata/jakubpiasecki.xcuserdatad/xcschemes/xcschememanagement.plist +19 -0
- package/lib/commonjs/EnableExperimentalWebImplementation.js +7 -0
- package/lib/commonjs/EnableExperimentalWebImplementation.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.js +1 -1
- package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.macos.js +22 -13
- package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.web.js +23 -10
- package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/commonjs/components/GestureComponents.js +6 -4
- package/lib/commonjs/components/GestureComponents.js.map +1 -1
- package/lib/commonjs/components/GestureComponents.web.js +1 -1
- package/lib/commonjs/components/GestureComponents.web.js.map +1 -1
- package/lib/commonjs/components/Swipeable.js +4 -4
- package/lib/commonjs/components/Swipeable.js.map +1 -1
- package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js +1 -5
- package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js +1 -5
- package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector.js +4 -2
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/commonjs/handlers/gestures/eventReceiver.js +14 -20
- package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gestureStateManager.web.js +32 -0
- package/lib/commonjs/handlers/gestures/gestureStateManager.web.js.map +1 -0
- package/lib/commonjs/utils.js +10 -6
- package/lib/commonjs/utils.js.map +1 -1
- package/lib/commonjs/web/detectors/RotationGestureDetector.js +13 -17
- package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -1
- package/lib/commonjs/web/detectors/ScaleGestureDetector.js +3 -14
- package/lib/commonjs/web/detectors/ScaleGestureDetector.js.map +1 -1
- package/lib/commonjs/web/handlers/FlingGestureHandler.js +37 -12
- package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/GestureHandler.js +330 -79
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js +23 -18
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/ManualGestureHandler.js +51 -0
- package/lib/commonjs/web/handlers/ManualGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +81 -22
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PanGestureHandler.js +57 -40
- package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PinchGestureHandler.js +43 -34
- package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/RotationGestureHandler.js +45 -39
- package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/TapGestureHandler.js +52 -50
- package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/commonjs/web/interfaces.js +22 -1
- package/lib/commonjs/web/interfaces.js.map +1 -1
- package/lib/commonjs/web/tools/EventManager.js +40 -96
- package/lib/commonjs/web/tools/EventManager.js.map +1 -1
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +109 -30
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/commonjs/web/tools/InteractionManager.js +24 -10
- package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
- package/lib/commonjs/web/tools/NodeManager.js.map +1 -1
- package/lib/commonjs/web/tools/PointerEventManager.js +130 -0
- package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -0
- package/lib/commonjs/web/tools/PointerTracker.js +97 -7
- package/lib/commonjs/web/tools/PointerTracker.js.map +1 -1
- package/lib/commonjs/web/tools/TouchEventManager.js +138 -0
- package/lib/commonjs/web/tools/TouchEventManager.js.map +1 -0
- package/lib/commonjs/web/utils.js +15 -0
- package/lib/commonjs/web/utils.js.map +1 -0
- package/lib/module/EnableExperimentalWebImplementation.js +5 -0
- package/lib/module/EnableExperimentalWebImplementation.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.js +1 -1
- package/lib/module/RNGestureHandlerModule.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.macos.js +21 -14
- package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.web.js +22 -11
- package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/module/components/GestureComponents.js +6 -4
- package/lib/module/components/GestureComponents.js.map +1 -1
- package/lib/module/components/GestureComponents.web.js +1 -1
- package/lib/module/components/GestureComponents.web.js.map +1 -1
- package/lib/module/components/Swipeable.js +4 -4
- package/lib/module/components/Swipeable.js.map +1 -1
- package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js +1 -5
- package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
- package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js +1 -4
- package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector.js +5 -3
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/module/handlers/gestures/eventReceiver.js +14 -20
- package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
- package/lib/module/handlers/gestures/gestureStateManager.web.js +21 -0
- package/lib/module/handlers/gestures/gestureStateManager.web.js.map +1 -0
- package/lib/module/utils.js +7 -6
- package/lib/module/utils.js.map +1 -1
- package/lib/module/web/detectors/RotationGestureDetector.js +13 -17
- package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -1
- package/lib/module/web/detectors/ScaleGestureDetector.js +3 -14
- package/lib/module/web/detectors/ScaleGestureDetector.js.map +1 -1
- package/lib/module/web/handlers/FlingGestureHandler.js +37 -12
- package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/GestureHandler.js +324 -79
- package/lib/module/web/handlers/GestureHandler.js.map +1 -1
- package/lib/module/web/handlers/LongPressGestureHandler.js +23 -18
- package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/ManualGestureHandler.js +39 -0
- package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/NativeViewGestureHandler.js +80 -22
- package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PanGestureHandler.js +57 -41
- package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PinchGestureHandler.js +43 -33
- package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/RotationGestureHandler.js +45 -38
- package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/TapGestureHandler.js +52 -50
- package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/module/web/interfaces.js +19 -0
- package/lib/module/web/interfaces.js.map +1 -1
- package/lib/module/web/tools/EventManager.js +39 -95
- package/lib/module/web/tools/EventManager.js.map +1 -1
- package/lib/module/web/tools/GestureHandlerOrchestrator.js +107 -30
- package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/module/web/tools/InteractionManager.js +24 -10
- package/lib/module/web/tools/InteractionManager.js.map +1 -1
- package/lib/module/web/tools/NodeManager.js.map +1 -1
- package/lib/module/web/tools/PointerEventManager.js +116 -0
- package/lib/module/web/tools/PointerEventManager.js.map +1 -0
- package/lib/module/web/tools/PointerTracker.js +97 -7
- package/lib/module/web/tools/PointerTracker.js.map +1 -1
- package/lib/module/web/tools/TouchEventManager.js +124 -0
- package/lib/module/web/tools/TouchEventManager.js.map +1 -0
- package/lib/module/web/utils.js +8 -0
- package/lib/module/web/utils.js.map +1 -0
- package/lib/typescript/RNGestureHandlerModule.macos.d.ts +6 -3
- package/lib/typescript/RNGestureHandlerModule.web.d.ts +5 -2
- package/lib/typescript/components/Swipeable.d.ts +3 -3
- package/lib/typescript/components/touchables/TouchableNativeFeedback.android.d.ts +1 -1
- package/lib/typescript/fabric/RNGestureHandlerButtonNativeComponent.d.ts +3 -3
- package/lib/typescript/fabric/RNGestureHandlerRootViewNativeComponent.d.ts +3 -2
- package/lib/typescript/handlers/gestures/gestureStateManager.web.d.ts +4 -0
- package/lib/typescript/utils.d.ts +4 -0
- package/lib/typescript/web/detectors/RotationGestureDetector.d.ts +7 -7
- package/lib/typescript/web/detectors/ScaleGestureDetector.d.ts +6 -7
- package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +12 -10
- package/lib/typescript/web/handlers/GestureHandler.d.ts +42 -32
- package/lib/typescript/web/handlers/LongPressGestureHandler.d.ts +6 -9
- package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +11 -0
- package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +15 -6
- package/lib/typescript/web/handlers/PanGestureHandler.d.ts +15 -23
- package/lib/typescript/web/handlers/PinchGestureHandler.d.ts +11 -12
- package/lib/typescript/web/handlers/RotationGestureHandler.d.ts +12 -12
- package/lib/typescript/web/handlers/TapGestureHandler.d.ts +11 -14
- package/lib/typescript/web/interfaces.d.ts +50 -10
- package/lib/typescript/web/tools/EventManager.d.ts +28 -26
- package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +4 -2
- package/lib/typescript/web/tools/InteractionManager.d.ts +3 -0
- package/lib/typescript/web/tools/NodeManager.d.ts +3 -3
- package/lib/typescript/web/tools/PointerEventManager.d.ts +6 -0
- package/lib/typescript/web/tools/PointerTracker.d.ts +29 -5
- package/lib/typescript/web/tools/TouchEventManager.d.ts +6 -0
- package/lib/typescript/web/utils.d.ts +4 -0
- package/package.json +2 -2
- package/src/EnableExperimentalWebImplementation.ts +9 -0
- package/src/RNGestureHandlerModule.macos.ts +28 -13
- package/src/RNGestureHandlerModule.ts +4 -1
- package/src/RNGestureHandlerModule.web.ts +20 -7
- package/src/components/GestureComponents.tsx +12 -16
- package/src/components/GestureComponents.web.tsx +1 -1
- package/src/components/Swipeable.tsx +11 -7
- package/src/fabric/RNGestureHandlerButtonNativeComponent.ts +2 -12
- package/src/fabric/RNGestureHandlerRootViewNativeComponent.ts +2 -8
- package/src/handlers/gestures/GestureDetector.tsx +8 -4
- package/src/handlers/gestures/eventReceiver.ts +23 -24
- package/src/handlers/gestures/gestureStateManager.web.ts +24 -0
- package/src/utils.ts +6 -6
- package/src/web/detectors/RotationGestureDetector.ts +20 -52
- package/src/web/detectors/ScaleGestureDetector.ts +9 -45
- package/src/web/handlers/FlingGestureHandler.ts +45 -22
- package/src/web/handlers/GestureHandler.ts +365 -97
- package/src/web/handlers/LongPressGestureHandler.ts +30 -24
- package/src/web/handlers/ManualGestureHandler.ts +39 -0
- package/src/web/handlers/NativeViewGestureHandler.ts +81 -24
- package/src/web/handlers/PanGestureHandler.ts +68 -53
- package/src/web/handlers/PinchGestureHandler.ts +47 -44
- package/src/web/handlers/RotationGestureHandler.ts +52 -51
- package/src/web/handlers/TapGestureHandler.ts +74 -56
- package/src/web/interfaces.ts +57 -10
- package/src/web/tools/EventManager.ts +58 -148
- package/src/web/tools/GestureHandlerOrchestrator.ts +115 -47
- package/src/web/tools/InteractionManager.ts +25 -9
- package/src/web/tools/NodeManager.ts +6 -6
- package/src/web/tools/PointerEventManager.ts +134 -0
- package/src/web/tools/PointerTracker.ts +120 -10
- package/src/web/tools/TouchEventManager.ts +167 -0
- package/src/web/utils.ts +8 -0
|
@@ -3,14 +3,22 @@ import { findNodeHandle } from 'react-native';
|
|
|
3
3
|
import { State } from '../../State';
|
|
4
4
|
import {
|
|
5
5
|
Config,
|
|
6
|
-
|
|
6
|
+
AdaptedEvent,
|
|
7
7
|
PropsRef,
|
|
8
8
|
ResultEvent,
|
|
9
|
+
PointerData,
|
|
10
|
+
ResultTouchEvent,
|
|
11
|
+
PointerType,
|
|
12
|
+
TouchEventType,
|
|
13
|
+
EventTypes,
|
|
9
14
|
} from '../interfaces';
|
|
10
15
|
import EventManager from '../tools/EventManager';
|
|
11
16
|
import GestureHandlerOrchestrator from '../tools/GestureHandlerOrchestrator';
|
|
12
17
|
import InteractionManager from '../tools/InteractionManager';
|
|
13
|
-
import
|
|
18
|
+
import PointerEventManager from '../tools/PointerEventManager';
|
|
19
|
+
import PointerTracker, { TrackerElement } from '../tools/PointerTracker';
|
|
20
|
+
import TouchEventManager from '../tools/TouchEventManager';
|
|
21
|
+
import { isPointerInBounds } from '../utils';
|
|
14
22
|
|
|
15
23
|
export default abstract class GestureHandler {
|
|
16
24
|
private lastSentState: State | null = null;
|
|
@@ -22,19 +30,19 @@ export default abstract class GestureHandler {
|
|
|
22
30
|
|
|
23
31
|
private ref!: number;
|
|
24
32
|
private propsRef!: React.RefObject<unknown>;
|
|
25
|
-
protected config: Config = { enabled: false };
|
|
26
33
|
private handlerTag!: number;
|
|
27
|
-
protected
|
|
34
|
+
protected config: Config = { enabled: false };
|
|
35
|
+
protected view!: HTMLElement;
|
|
28
36
|
|
|
29
|
-
protected
|
|
37
|
+
protected eventManagers: EventManager[] = [];
|
|
30
38
|
protected tracker: PointerTracker = new PointerTracker();
|
|
31
|
-
protected interactionManager!: InteractionManager;
|
|
32
39
|
|
|
33
40
|
// Orchestrator properties
|
|
34
41
|
protected activationIndex = 0;
|
|
35
42
|
protected awaiting = false;
|
|
36
43
|
protected active = false;
|
|
37
44
|
protected shouldResetProgress = false;
|
|
45
|
+
protected pointerType: PointerType = PointerType.NONE;
|
|
38
46
|
|
|
39
47
|
public constructor() {
|
|
40
48
|
this.hasCustomActivationCriteria = false;
|
|
@@ -50,17 +58,19 @@ export default abstract class GestureHandler {
|
|
|
50
58
|
|
|
51
59
|
this.currentState = State.UNDETERMINED;
|
|
52
60
|
|
|
53
|
-
this.setView(
|
|
54
|
-
this.
|
|
61
|
+
this.setView();
|
|
62
|
+
this.addEventManager(new PointerEventManager(this.view));
|
|
63
|
+
this.addEventManager(new TouchEventManager(this.view));
|
|
55
64
|
}
|
|
56
65
|
|
|
57
|
-
private setView(
|
|
58
|
-
if (!ref) {
|
|
59
|
-
|
|
60
|
-
|
|
66
|
+
private setView() {
|
|
67
|
+
if (!this.ref) {
|
|
68
|
+
throw new Error(
|
|
69
|
+
`Cannot find HTML Element for handler ${this.handlerTag}`
|
|
70
|
+
);
|
|
61
71
|
}
|
|
62
72
|
|
|
63
|
-
this.view = (findNodeHandle(ref) as unknown) as HTMLElement;
|
|
73
|
+
this.view = (findNodeHandle(this.ref) as unknown) as HTMLElement;
|
|
64
74
|
this.view.style['touchAction'] = 'none';
|
|
65
75
|
this.view.style['webkitUserSelect'] = 'none';
|
|
66
76
|
this.view.style['userSelect'] = 'none';
|
|
@@ -69,28 +79,19 @@ export default abstract class GestureHandler {
|
|
|
69
79
|
this.view.style['WebkitTouchCallout'] = 'none';
|
|
70
80
|
}
|
|
71
81
|
|
|
72
|
-
private
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
this.
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
this.eventManager.setOnPointerOut(this.onPointerOut.bind(this));
|
|
84
|
-
this.eventManager.setOnPointerCancel(this.onPointerCancel.bind(this));
|
|
85
|
-
this.eventManager.setOnPointerOutOfBounds(
|
|
86
|
-
this.onPointerOutOfBounds.bind(this)
|
|
87
|
-
);
|
|
82
|
+
private addEventManager(manager: EventManager): void {
|
|
83
|
+
manager.setOnPointerDown(this.onPointerDown.bind(this));
|
|
84
|
+
manager.setOnPointerAdd(this.onPointerAdd.bind(this));
|
|
85
|
+
manager.setOnPointerUp(this.onPointerUp.bind(this));
|
|
86
|
+
manager.setOnPointerRemove(this.onPointerRemove.bind(this));
|
|
87
|
+
manager.setOnPointerMove(this.onPointerMove.bind(this));
|
|
88
|
+
manager.setOnPointerEnter(this.onPointerEnter.bind(this));
|
|
89
|
+
manager.setOnPointerOut(this.onPointerOut.bind(this));
|
|
90
|
+
manager.setOnPointerCancel(this.onPointerCancel.bind(this));
|
|
91
|
+
manager.setOnPointerOutOfBounds(this.onPointerOutOfBounds.bind(this));
|
|
92
|
+
manager.setListeners();
|
|
88
93
|
|
|
89
|
-
this.
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
public setInteractionManager(manager: InteractionManager): void {
|
|
93
|
-
this.interactionManager = manager;
|
|
94
|
+
this.eventManagers.push(manager);
|
|
94
95
|
}
|
|
95
96
|
|
|
96
97
|
//
|
|
@@ -104,6 +105,10 @@ export default abstract class GestureHandler {
|
|
|
104
105
|
public reset(): void {
|
|
105
106
|
this.tracker.resetTracker();
|
|
106
107
|
this.onReset();
|
|
108
|
+
this.resetProgress();
|
|
109
|
+
this.eventManagers.forEach((manager: EventManager) =>
|
|
110
|
+
manager.resetManager()
|
|
111
|
+
);
|
|
107
112
|
this.currentState = State.UNDETERMINED;
|
|
108
113
|
}
|
|
109
114
|
|
|
@@ -111,11 +116,20 @@ export default abstract class GestureHandler {
|
|
|
111
116
|
// State logic
|
|
112
117
|
//
|
|
113
118
|
|
|
114
|
-
public moveToState(newState: State,
|
|
119
|
+
public moveToState(newState: State, sendIfDisabled?: boolean) {
|
|
115
120
|
if (this.currentState === newState) {
|
|
116
121
|
return;
|
|
117
122
|
}
|
|
118
123
|
|
|
124
|
+
if (
|
|
125
|
+
this.tracker.getTrackedPointersCount() > 0 &&
|
|
126
|
+
(newState === State.END ||
|
|
127
|
+
newState === State.CANCELLED ||
|
|
128
|
+
newState === State.FAILED)
|
|
129
|
+
) {
|
|
130
|
+
this.cancelTouches();
|
|
131
|
+
}
|
|
132
|
+
|
|
119
133
|
const oldState = this.currentState;
|
|
120
134
|
this.currentState = newState;
|
|
121
135
|
|
|
@@ -123,7 +137,7 @@ export default abstract class GestureHandler {
|
|
|
123
137
|
this,
|
|
124
138
|
newState,
|
|
125
139
|
oldState,
|
|
126
|
-
|
|
140
|
+
sendIfDisabled
|
|
127
141
|
);
|
|
128
142
|
|
|
129
143
|
this.onStateChange(newState, oldState);
|
|
@@ -131,53 +145,63 @@ export default abstract class GestureHandler {
|
|
|
131
145
|
|
|
132
146
|
protected onStateChange(_newState: State, _oldState: State): void {}
|
|
133
147
|
|
|
134
|
-
public begin(
|
|
135
|
-
if (!this.checkHitSlop(
|
|
148
|
+
public begin(): void {
|
|
149
|
+
if (!this.checkHitSlop()) {
|
|
136
150
|
return;
|
|
137
151
|
}
|
|
138
152
|
|
|
139
153
|
if (this.currentState === State.UNDETERMINED) {
|
|
140
|
-
this.moveToState(State.BEGAN
|
|
154
|
+
this.moveToState(State.BEGAN);
|
|
141
155
|
}
|
|
142
156
|
}
|
|
143
157
|
|
|
144
|
-
|
|
158
|
+
/**
|
|
159
|
+
* @param {boolean} sendIfDisabled - Used when handler becomes disabled. With this flag orchestrator will be forced to send fail event
|
|
160
|
+
*/
|
|
161
|
+
public fail(sendIfDisabled?: boolean): void {
|
|
145
162
|
if (
|
|
146
163
|
this.currentState === State.ACTIVE ||
|
|
147
164
|
this.currentState === State.BEGAN
|
|
148
165
|
) {
|
|
149
|
-
this.moveToState(State.FAILED,
|
|
166
|
+
this.moveToState(State.FAILED, sendIfDisabled);
|
|
167
|
+
this.view.style.cursor = 'auto';
|
|
150
168
|
}
|
|
151
169
|
|
|
152
170
|
this.resetProgress();
|
|
153
171
|
}
|
|
154
172
|
|
|
155
|
-
|
|
173
|
+
/**
|
|
174
|
+
* @param {boolean} sendIfDisabled - Used when handler becomes disabled. With this flag orchestrator will be forced to send cancel event
|
|
175
|
+
*/
|
|
176
|
+
public cancel(sendIfDisabled?: boolean): void {
|
|
156
177
|
if (
|
|
157
178
|
this.currentState === State.ACTIVE ||
|
|
158
179
|
this.currentState === State.UNDETERMINED ||
|
|
159
180
|
this.currentState === State.BEGAN
|
|
160
181
|
) {
|
|
161
182
|
this.onCancel();
|
|
162
|
-
this.moveToState(State.CANCELLED,
|
|
183
|
+
this.moveToState(State.CANCELLED, sendIfDisabled);
|
|
184
|
+
this.view.style.cursor = 'auto';
|
|
163
185
|
}
|
|
164
186
|
}
|
|
165
187
|
|
|
166
|
-
|
|
188
|
+
public activate(_force = false) {
|
|
167
189
|
if (
|
|
168
190
|
this.currentState === State.UNDETERMINED ||
|
|
169
191
|
this.currentState === State.BEGAN
|
|
170
192
|
) {
|
|
171
|
-
this.moveToState(State.ACTIVE
|
|
193
|
+
this.moveToState(State.ACTIVE);
|
|
194
|
+
this.view.style.cursor = 'grab';
|
|
172
195
|
}
|
|
173
196
|
}
|
|
174
197
|
|
|
175
|
-
public end(
|
|
198
|
+
public end() {
|
|
176
199
|
if (
|
|
177
200
|
this.currentState === State.BEGAN ||
|
|
178
201
|
this.currentState === State.ACTIVE
|
|
179
202
|
) {
|
|
180
|
-
this.moveToState(State.END
|
|
203
|
+
this.moveToState(State.END);
|
|
204
|
+
this.view.style.cursor = 'auto';
|
|
181
205
|
}
|
|
182
206
|
|
|
183
207
|
this.resetProgress();
|
|
@@ -220,7 +244,10 @@ export default abstract class GestureHandler {
|
|
|
220
244
|
return false;
|
|
221
245
|
}
|
|
222
246
|
|
|
223
|
-
return
|
|
247
|
+
return InteractionManager.getInstance().shouldWaitForHandlerFailure(
|
|
248
|
+
this,
|
|
249
|
+
handler
|
|
250
|
+
);
|
|
224
251
|
}
|
|
225
252
|
|
|
226
253
|
public shouldRequireToWaitForFailure(handler: GestureHandler): boolean {
|
|
@@ -228,7 +255,7 @@ export default abstract class GestureHandler {
|
|
|
228
255
|
return false;
|
|
229
256
|
}
|
|
230
257
|
|
|
231
|
-
return
|
|
258
|
+
return InteractionManager.getInstance().shouldRequireHandlerToWaitForFailure(
|
|
232
259
|
this,
|
|
233
260
|
handler
|
|
234
261
|
);
|
|
@@ -239,7 +266,10 @@ export default abstract class GestureHandler {
|
|
|
239
266
|
return true;
|
|
240
267
|
}
|
|
241
268
|
|
|
242
|
-
return
|
|
269
|
+
return InteractionManager.getInstance().shouldRecognizeSimultaneously(
|
|
270
|
+
this,
|
|
271
|
+
handler
|
|
272
|
+
);
|
|
243
273
|
}
|
|
244
274
|
|
|
245
275
|
public shouldBeCancelledByOther(handler: GestureHandler): boolean {
|
|
@@ -247,36 +277,96 @@ export default abstract class GestureHandler {
|
|
|
247
277
|
return false;
|
|
248
278
|
}
|
|
249
279
|
|
|
250
|
-
return
|
|
280
|
+
return InteractionManager.getInstance().shouldHandlerBeCancelledBy(
|
|
281
|
+
this,
|
|
282
|
+
handler
|
|
283
|
+
);
|
|
251
284
|
}
|
|
252
285
|
|
|
253
286
|
//
|
|
254
287
|
// Event actions
|
|
255
288
|
//
|
|
256
289
|
|
|
257
|
-
protected onPointerDown(
|
|
290
|
+
protected onPointerDown(event: AdaptedEvent): void {
|
|
258
291
|
GestureHandlerOrchestrator.getInstance().recordHandlerIfNotPresent(this);
|
|
292
|
+
this.pointerType = event.pointerType;
|
|
293
|
+
|
|
294
|
+
if (this.pointerType === PointerType.TOUCH) {
|
|
295
|
+
GestureHandlerOrchestrator.getInstance().cancelMouseAndPenGestures(this);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
if (this.config.needsPointerData) {
|
|
299
|
+
this.sendTouchEvent(event);
|
|
300
|
+
}
|
|
259
301
|
}
|
|
260
302
|
// Adding another pointer to existing ones
|
|
261
|
-
protected onPointerAdd(
|
|
262
|
-
|
|
303
|
+
protected onPointerAdd(event: AdaptedEvent): void {
|
|
304
|
+
if (this.config.needsPointerData) {
|
|
305
|
+
this.sendTouchEvent(event);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
protected onPointerUp(event: AdaptedEvent): void {
|
|
309
|
+
if (this.config.needsPointerData) {
|
|
310
|
+
this.sendTouchEvent(event);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
263
313
|
// Removing pointer, when there is more than one pointers
|
|
264
|
-
protected onPointerRemove(
|
|
265
|
-
|
|
266
|
-
|
|
314
|
+
protected onPointerRemove(event: AdaptedEvent): void {
|
|
315
|
+
if (this.config.needsPointerData) {
|
|
316
|
+
this.sendTouchEvent(event);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
protected onPointerMove(event: AdaptedEvent): void {
|
|
320
|
+
this.tryToSendMoveEvent(false);
|
|
321
|
+
if (this.config.needsPointerData) {
|
|
322
|
+
this.sendTouchEvent(event);
|
|
323
|
+
}
|
|
267
324
|
}
|
|
268
|
-
protected onPointerOut(
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
325
|
+
protected onPointerOut(event: AdaptedEvent): void {
|
|
326
|
+
if (this.config.needsPointerData) {
|
|
327
|
+
this.sendTouchEvent(event);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
protected onPointerEnter(event: AdaptedEvent): void {
|
|
331
|
+
if (this.config.needsPointerData) {
|
|
332
|
+
this.sendTouchEvent(event);
|
|
333
|
+
}
|
|
273
334
|
}
|
|
274
|
-
|
|
335
|
+
protected onPointerCancel(event: AdaptedEvent): void {
|
|
336
|
+
if (this.config.needsPointerData) {
|
|
337
|
+
this.sendTouchEvent(event);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
protected onPointerOutOfBounds(event: AdaptedEvent): void {
|
|
341
|
+
this.tryToSendMoveEvent(true);
|
|
342
|
+
if (this.config.needsPointerData) {
|
|
343
|
+
this.sendTouchEvent(event);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
private tryToSendMoveEvent(out: boolean): void {
|
|
275
347
|
if (
|
|
276
|
-
this.
|
|
348
|
+
this.enabled &&
|
|
349
|
+
this.active &&
|
|
277
350
|
(!out || (out && !this.shouldCancellWhenOutside))
|
|
278
351
|
) {
|
|
279
|
-
this.sendEvent(
|
|
352
|
+
this.sendEvent(this.currentState, this.currentState);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
public sendTouchEvent(event: AdaptedEvent): void {
|
|
357
|
+
if (!this.enabled) {
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
const { onGestureHandlerEvent }: PropsRef = this.propsRef
|
|
362
|
+
.current as PropsRef;
|
|
363
|
+
|
|
364
|
+
const touchEvent: ResultTouchEvent | undefined = this.transformTouchEvent(
|
|
365
|
+
event
|
|
366
|
+
);
|
|
367
|
+
|
|
368
|
+
if (touchEvent) {
|
|
369
|
+
invokeNullableMethod(onGestureHandlerEvent, touchEvent);
|
|
280
370
|
}
|
|
281
371
|
}
|
|
282
372
|
|
|
@@ -284,18 +374,13 @@ export default abstract class GestureHandler {
|
|
|
284
374
|
// Events Sending
|
|
285
375
|
//
|
|
286
376
|
|
|
287
|
-
public sendEvent = (
|
|
288
|
-
event: AdaptedPointerEvent,
|
|
289
|
-
newState: State,
|
|
290
|
-
oldState: State
|
|
291
|
-
): void => {
|
|
377
|
+
public sendEvent = (newState: State, oldState: State): void => {
|
|
292
378
|
const {
|
|
293
379
|
onGestureHandlerEvent,
|
|
294
380
|
onGestureHandlerStateChange,
|
|
295
381
|
}: PropsRef = this.propsRef.current as PropsRef;
|
|
296
382
|
|
|
297
383
|
const resultEvent: ResultEvent = this.transformEventData(
|
|
298
|
-
event,
|
|
299
384
|
newState,
|
|
300
385
|
oldState
|
|
301
386
|
);
|
|
@@ -315,20 +400,16 @@ export default abstract class GestureHandler {
|
|
|
315
400
|
}
|
|
316
401
|
};
|
|
317
402
|
|
|
318
|
-
private transformEventData(
|
|
319
|
-
event: AdaptedPointerEvent,
|
|
320
|
-
newState: State,
|
|
321
|
-
oldState: State
|
|
322
|
-
): ResultEvent {
|
|
403
|
+
private transformEventData(newState: State, oldState: State): ResultEvent {
|
|
323
404
|
return {
|
|
324
405
|
nativeEvent: {
|
|
325
406
|
numberOfPointers: this.tracker.getTrackedPointersCount(),
|
|
326
407
|
state: newState,
|
|
327
|
-
pointerInside: this.
|
|
328
|
-
x:
|
|
329
|
-
y:
|
|
408
|
+
pointerInside: isPointerInBounds(this.view, {
|
|
409
|
+
x: this.tracker.getLastAvgX(),
|
|
410
|
+
y: this.tracker.getLastAvgY(),
|
|
330
411
|
}),
|
|
331
|
-
...this.transformNativeEvent(
|
|
412
|
+
...this.transformNativeEvent(),
|
|
332
413
|
handlerTag: this.handlerTag,
|
|
333
414
|
target: this.ref,
|
|
334
415
|
oldState: newState !== oldState ? oldState : undefined,
|
|
@@ -337,7 +418,155 @@ export default abstract class GestureHandler {
|
|
|
337
418
|
};
|
|
338
419
|
}
|
|
339
420
|
|
|
340
|
-
|
|
421
|
+
private transformTouchEvent(
|
|
422
|
+
event: AdaptedEvent
|
|
423
|
+
): ResultTouchEvent | undefined {
|
|
424
|
+
const rect = this.view.getBoundingClientRect();
|
|
425
|
+
|
|
426
|
+
const all: PointerData[] = [];
|
|
427
|
+
const changed: PointerData[] = [];
|
|
428
|
+
|
|
429
|
+
const trackerData = this.tracker.getData();
|
|
430
|
+
|
|
431
|
+
// This if handles edge case where all pointers have been cancelled
|
|
432
|
+
// When pointercancel is triggered, reset method is called. This means that tracker will be reset after first pointer being cancelled
|
|
433
|
+
// The problem is, that handler will receive another pointercancel event from the rest of the pointers
|
|
434
|
+
// To avoid crashing, we don't send event if tracker tracks no pointers, i.e. has been reset
|
|
435
|
+
if (trackerData.size === 0 || !trackerData.has(event.pointerId)) {
|
|
436
|
+
return;
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
trackerData.forEach((element: TrackerElement, key: number): void => {
|
|
440
|
+
const id: number = this.tracker.getMappedTouchEventId(key);
|
|
441
|
+
|
|
442
|
+
all.push({
|
|
443
|
+
id: id,
|
|
444
|
+
x: element.lastX - rect.left,
|
|
445
|
+
y: element.lastY - rect.top,
|
|
446
|
+
absoluteX: element.lastX,
|
|
447
|
+
absoluteY: element.lastY,
|
|
448
|
+
});
|
|
449
|
+
});
|
|
450
|
+
|
|
451
|
+
// Each pointer sends its own event, so we want changed touches to contain only the pointer that has changed.
|
|
452
|
+
// However, if the event is cancel, we want to cancel all pointers to avoid crashes
|
|
453
|
+
if (event.eventType !== EventTypes.CANCEL) {
|
|
454
|
+
changed.push({
|
|
455
|
+
id: this.tracker.getMappedTouchEventId(event.pointerId),
|
|
456
|
+
x: event.x - rect.left,
|
|
457
|
+
y: event.y - rect.top,
|
|
458
|
+
absoluteX: event.x,
|
|
459
|
+
absoluteY: event.y,
|
|
460
|
+
});
|
|
461
|
+
} else {
|
|
462
|
+
trackerData.forEach((element: TrackerElement, key: number): void => {
|
|
463
|
+
const id: number = this.tracker.getMappedTouchEventId(key);
|
|
464
|
+
|
|
465
|
+
changed.push({
|
|
466
|
+
id: id,
|
|
467
|
+
x: element.lastX - rect.left,
|
|
468
|
+
y: element.lastY - rect.top,
|
|
469
|
+
absoluteX: element.lastX,
|
|
470
|
+
absoluteY: element.lastY,
|
|
471
|
+
});
|
|
472
|
+
});
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
let eventType: TouchEventType = TouchEventType.UNDETERMINED;
|
|
476
|
+
|
|
477
|
+
switch (event.eventType) {
|
|
478
|
+
case EventTypes.DOWN:
|
|
479
|
+
case EventTypes.ADDITIONAL_POINTER_DOWN:
|
|
480
|
+
eventType = TouchEventType.DOWN;
|
|
481
|
+
break;
|
|
482
|
+
case EventTypes.UP:
|
|
483
|
+
case EventTypes.ADDITIONAL_POINTER_UP:
|
|
484
|
+
eventType = TouchEventType.UP;
|
|
485
|
+
break;
|
|
486
|
+
case EventTypes.MOVE:
|
|
487
|
+
eventType = TouchEventType.MOVE;
|
|
488
|
+
break;
|
|
489
|
+
case EventTypes.CANCEL:
|
|
490
|
+
eventType = TouchEventType.CANCELLED;
|
|
491
|
+
break;
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
// Here, when we receive up event, we want to decrease number of touches
|
|
495
|
+
// That's because we want handler to send information that there's one pointer less
|
|
496
|
+
// However, we still want this pointer to be present in allTouches array, so that its data can be accessed
|
|
497
|
+
let numberOfTouches: number = all.length;
|
|
498
|
+
|
|
499
|
+
if (
|
|
500
|
+
event.eventType === EventTypes.UP ||
|
|
501
|
+
event.eventType === EventTypes.ADDITIONAL_POINTER_UP
|
|
502
|
+
) {
|
|
503
|
+
--numberOfTouches;
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
return {
|
|
507
|
+
nativeEvent: {
|
|
508
|
+
handlerTag: this.handlerTag,
|
|
509
|
+
state: this.currentState,
|
|
510
|
+
eventType: event.touchEventType ?? eventType,
|
|
511
|
+
changedTouches: changed,
|
|
512
|
+
allTouches: all,
|
|
513
|
+
numberOfTouches: numberOfTouches,
|
|
514
|
+
},
|
|
515
|
+
timeStamp: Date.now(),
|
|
516
|
+
};
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
private cancelTouches(): void {
|
|
520
|
+
const rect = this.view.getBoundingClientRect();
|
|
521
|
+
|
|
522
|
+
const all: PointerData[] = [];
|
|
523
|
+
const changed: PointerData[] = [];
|
|
524
|
+
|
|
525
|
+
const trackerData = this.tracker.getData();
|
|
526
|
+
|
|
527
|
+
if (trackerData.size === 0) {
|
|
528
|
+
return;
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
trackerData.forEach((element: TrackerElement, key: number): void => {
|
|
532
|
+
const id: number = this.tracker.getMappedTouchEventId(key);
|
|
533
|
+
|
|
534
|
+
all.push({
|
|
535
|
+
id: id,
|
|
536
|
+
x: element.lastX - rect.left,
|
|
537
|
+
y: element.lastY - rect.top,
|
|
538
|
+
absoluteX: element.lastX,
|
|
539
|
+
absoluteY: element.lastY,
|
|
540
|
+
});
|
|
541
|
+
|
|
542
|
+
changed.push({
|
|
543
|
+
id: id,
|
|
544
|
+
x: element.lastX - rect.left,
|
|
545
|
+
y: element.lastY - rect.top,
|
|
546
|
+
absoluteX: element.lastX,
|
|
547
|
+
absoluteY: element.lastY,
|
|
548
|
+
});
|
|
549
|
+
});
|
|
550
|
+
|
|
551
|
+
const cancelEvent: ResultTouchEvent = {
|
|
552
|
+
nativeEvent: {
|
|
553
|
+
handlerTag: this.handlerTag,
|
|
554
|
+
state: this.currentState,
|
|
555
|
+
eventType: TouchEventType.CANCELLED,
|
|
556
|
+
changedTouches: changed,
|
|
557
|
+
allTouches: all,
|
|
558
|
+
numberOfTouches: all.length,
|
|
559
|
+
},
|
|
560
|
+
timeStamp: Date.now(),
|
|
561
|
+
};
|
|
562
|
+
|
|
563
|
+
const { onGestureHandlerEvent }: PropsRef = this.propsRef
|
|
564
|
+
.current as PropsRef;
|
|
565
|
+
|
|
566
|
+
invokeNullableMethod(onGestureHandlerEvent, cancelEvent);
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
protected transformNativeEvent() {
|
|
341
570
|
return {};
|
|
342
571
|
}
|
|
343
572
|
|
|
@@ -345,9 +574,28 @@ export default abstract class GestureHandler {
|
|
|
345
574
|
// Handling config
|
|
346
575
|
//
|
|
347
576
|
|
|
348
|
-
public updateGestureConfig({ enabled = true, ...props }): void {
|
|
349
|
-
this.config = { enabled, ...props };
|
|
577
|
+
public updateGestureConfig({ enabled = true, ...props }: Config): void {
|
|
578
|
+
this.config = { enabled: enabled, ...props };
|
|
579
|
+
this.enabled = enabled;
|
|
350
580
|
this.validateHitSlops();
|
|
581
|
+
|
|
582
|
+
if (this.enabled) {
|
|
583
|
+
return;
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
switch (this.currentState) {
|
|
587
|
+
case State.ACTIVE:
|
|
588
|
+
this.fail(true);
|
|
589
|
+
break;
|
|
590
|
+
case State.UNDETERMINED:
|
|
591
|
+
GestureHandlerOrchestrator.getInstance().removeHandlerFromOrchestrator(
|
|
592
|
+
this
|
|
593
|
+
);
|
|
594
|
+
break;
|
|
595
|
+
default:
|
|
596
|
+
this.cancel(true);
|
|
597
|
+
break;
|
|
598
|
+
}
|
|
351
599
|
}
|
|
352
600
|
|
|
353
601
|
protected checkCustomActivationCriteria(criterias: string[]): void {
|
|
@@ -404,8 +652,8 @@ export default abstract class GestureHandler {
|
|
|
404
652
|
}
|
|
405
653
|
}
|
|
406
654
|
|
|
407
|
-
private checkHitSlop(
|
|
408
|
-
if (!this.config.hitSlop
|
|
655
|
+
private checkHitSlop(): boolean {
|
|
656
|
+
if (!this.config.hitSlop) {
|
|
409
657
|
return true;
|
|
410
658
|
}
|
|
411
659
|
|
|
@@ -458,17 +706,29 @@ export default abstract class GestureHandler {
|
|
|
458
706
|
}
|
|
459
707
|
}
|
|
460
708
|
|
|
709
|
+
const rect: DOMRect = this.view.getBoundingClientRect();
|
|
710
|
+
const offsetX: number = this.tracker.getLastX() - rect.left;
|
|
711
|
+
const offsetY: number = this.tracker.getLastY() - rect.top;
|
|
712
|
+
|
|
461
713
|
if (
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
714
|
+
offsetX >= left &&
|
|
715
|
+
offsetX <= right &&
|
|
716
|
+
offsetY >= top &&
|
|
717
|
+
offsetY <= bottom
|
|
466
718
|
) {
|
|
467
719
|
return true;
|
|
468
720
|
}
|
|
469
721
|
return false;
|
|
470
722
|
}
|
|
471
723
|
|
|
724
|
+
public isPointerInBounds({ x, y }: { x: number; y: number }): boolean {
|
|
725
|
+
const rect: DOMRect = this.view.getBoundingClientRect();
|
|
726
|
+
|
|
727
|
+
return (
|
|
728
|
+
x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom
|
|
729
|
+
);
|
|
730
|
+
}
|
|
731
|
+
|
|
472
732
|
protected resetConfig(): void {}
|
|
473
733
|
|
|
474
734
|
//
|
|
@@ -490,12 +750,12 @@ export default abstract class GestureHandler {
|
|
|
490
750
|
throw new Error('Must override GestureHandler.shouldEnableGestureOnSetup');
|
|
491
751
|
}
|
|
492
752
|
|
|
493
|
-
public getView(): HTMLElement
|
|
753
|
+
public getView(): HTMLElement {
|
|
494
754
|
return this.view;
|
|
495
755
|
}
|
|
496
756
|
|
|
497
|
-
public
|
|
498
|
-
return this.
|
|
757
|
+
public getEventManagers(): EventManager[] {
|
|
758
|
+
return this.eventManagers;
|
|
499
759
|
}
|
|
500
760
|
|
|
501
761
|
public getTracker(): PointerTracker {
|
|
@@ -510,20 +770,28 @@ export default abstract class GestureHandler {
|
|
|
510
770
|
return this.currentState;
|
|
511
771
|
}
|
|
512
772
|
|
|
513
|
-
|
|
514
|
-
this.
|
|
773
|
+
public isEnabled(): boolean {
|
|
774
|
+
return this.enabled;
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
protected setShouldCancelWhenOutside(shouldCancel: boolean) {
|
|
778
|
+
this.shouldCancellWhenOutside = shouldCancel;
|
|
515
779
|
}
|
|
516
780
|
protected getShouldCancelWhenOutside(): boolean {
|
|
517
781
|
return this.shouldCancellWhenOutside;
|
|
518
782
|
}
|
|
783
|
+
|
|
784
|
+
public getPointerType(): PointerType {
|
|
785
|
+
return this.pointerType;
|
|
786
|
+
}
|
|
519
787
|
}
|
|
520
788
|
|
|
521
789
|
function invokeNullableMethod(
|
|
522
790
|
method:
|
|
523
|
-
| ((event: ResultEvent) => void)
|
|
524
|
-
| { __getHandler: () => (event: ResultEvent) => void }
|
|
791
|
+
| ((event: ResultEvent | ResultTouchEvent) => void)
|
|
792
|
+
| { __getHandler: () => (event: ResultEvent | ResultTouchEvent) => void }
|
|
525
793
|
| { __nodeConfig: { argMapping: unknown[] } },
|
|
526
|
-
event: ResultEvent
|
|
794
|
+
event: ResultEvent | ResultTouchEvent
|
|
527
795
|
): void {
|
|
528
796
|
if (!method) {
|
|
529
797
|
return;
|