react-native-gesture-handler 2.6.0 → 2.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (177) hide show
  1. package/android/build.gradle +2 -2
  2. package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  3. package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  4. package/ios/RNGestureHandler.xcodeproj/xcuserdata/jakubpiasecki.xcuserdatad/xcschemes/xcschememanagement.plist +19 -0
  5. package/lib/commonjs/EnableExperimentalWebImplementation.js +7 -0
  6. package/lib/commonjs/EnableExperimentalWebImplementation.js.map +1 -1
  7. package/lib/commonjs/RNGestureHandlerModule.js +1 -1
  8. package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
  9. package/lib/commonjs/RNGestureHandlerModule.macos.js +20 -9
  10. package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -1
  11. package/lib/commonjs/RNGestureHandlerModule.web.js +23 -10
  12. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  13. package/lib/commonjs/components/GestureComponents.web.js +1 -1
  14. package/lib/commonjs/components/GestureComponents.web.js.map +1 -1
  15. package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js +1 -5
  16. package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  17. package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js +1 -5
  18. package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -1
  19. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  20. package/lib/commonjs/handlers/gestures/eventReceiver.js +14 -20
  21. package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -1
  22. package/lib/commonjs/handlers/gestures/gestureStateManager.web.js +32 -0
  23. package/lib/commonjs/handlers/gestures/gestureStateManager.web.js.map +1 -0
  24. package/lib/commonjs/web/detectors/RotationGestureDetector.js +13 -17
  25. package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -1
  26. package/lib/commonjs/web/detectors/ScaleGestureDetector.js +3 -14
  27. package/lib/commonjs/web/detectors/ScaleGestureDetector.js.map +1 -1
  28. package/lib/commonjs/web/handlers/FlingGestureHandler.js +37 -12
  29. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
  30. package/lib/commonjs/web/handlers/GestureHandler.js +282 -79
  31. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  32. package/lib/commonjs/web/handlers/LongPressGestureHandler.js +23 -18
  33. package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
  34. package/lib/commonjs/web/handlers/ManualGestureHandler.js +51 -0
  35. package/lib/commonjs/web/handlers/ManualGestureHandler.js.map +1 -0
  36. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +81 -22
  37. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
  38. package/lib/commonjs/web/handlers/PanGestureHandler.js +57 -40
  39. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
  40. package/lib/commonjs/web/handlers/PinchGestureHandler.js +43 -34
  41. package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -1
  42. package/lib/commonjs/web/handlers/RotationGestureHandler.js +45 -39
  43. package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -1
  44. package/lib/commonjs/web/handlers/TapGestureHandler.js +52 -50
  45. package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
  46. package/lib/commonjs/web/interfaces.js +22 -1
  47. package/lib/commonjs/web/interfaces.js.map +1 -1
  48. package/lib/commonjs/web/tools/EventManager.js +40 -96
  49. package/lib/commonjs/web/tools/EventManager.js.map +1 -1
  50. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +109 -30
  51. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  52. package/lib/commonjs/web/tools/InteractionManager.js +24 -10
  53. package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
  54. package/lib/commonjs/web/tools/NodeManager.js.map +1 -1
  55. package/lib/commonjs/web/tools/PointerEventManager.js +130 -0
  56. package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -0
  57. package/lib/commonjs/web/tools/PointerTracker.js +97 -7
  58. package/lib/commonjs/web/tools/PointerTracker.js.map +1 -1
  59. package/lib/commonjs/web/tools/TouchEventManager.js +138 -0
  60. package/lib/commonjs/web/tools/TouchEventManager.js.map +1 -0
  61. package/lib/commonjs/web/utils.js +15 -0
  62. package/lib/commonjs/web/utils.js.map +1 -0
  63. package/lib/module/EnableExperimentalWebImplementation.js +5 -0
  64. package/lib/module/EnableExperimentalWebImplementation.js.map +1 -1
  65. package/lib/module/RNGestureHandlerModule.js +1 -1
  66. package/lib/module/RNGestureHandlerModule.js.map +1 -1
  67. package/lib/module/RNGestureHandlerModule.macos.js +19 -10
  68. package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
  69. package/lib/module/RNGestureHandlerModule.web.js +22 -11
  70. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  71. package/lib/module/components/GestureComponents.web.js +1 -1
  72. package/lib/module/components/GestureComponents.web.js.map +1 -1
  73. package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js +1 -5
  74. package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  75. package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js +1 -4
  76. package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -1
  77. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  78. package/lib/module/handlers/gestures/eventReceiver.js +14 -20
  79. package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
  80. package/lib/module/handlers/gestures/gestureStateManager.web.js +21 -0
  81. package/lib/module/handlers/gestures/gestureStateManager.web.js.map +1 -0
  82. package/lib/module/web/detectors/RotationGestureDetector.js +13 -17
  83. package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -1
  84. package/lib/module/web/detectors/ScaleGestureDetector.js +3 -14
  85. package/lib/module/web/detectors/ScaleGestureDetector.js.map +1 -1
  86. package/lib/module/web/handlers/FlingGestureHandler.js +37 -12
  87. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
  88. package/lib/module/web/handlers/GestureHandler.js +276 -79
  89. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  90. package/lib/module/web/handlers/LongPressGestureHandler.js +23 -18
  91. package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
  92. package/lib/module/web/handlers/ManualGestureHandler.js +39 -0
  93. package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -0
  94. package/lib/module/web/handlers/NativeViewGestureHandler.js +80 -22
  95. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
  96. package/lib/module/web/handlers/PanGestureHandler.js +57 -41
  97. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  98. package/lib/module/web/handlers/PinchGestureHandler.js +43 -33
  99. package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
  100. package/lib/module/web/handlers/RotationGestureHandler.js +45 -38
  101. package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
  102. package/lib/module/web/handlers/TapGestureHandler.js +52 -50
  103. package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
  104. package/lib/module/web/interfaces.js +19 -0
  105. package/lib/module/web/interfaces.js.map +1 -1
  106. package/lib/module/web/tools/EventManager.js +39 -95
  107. package/lib/module/web/tools/EventManager.js.map +1 -1
  108. package/lib/module/web/tools/GestureHandlerOrchestrator.js +107 -30
  109. package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  110. package/lib/module/web/tools/InteractionManager.js +24 -10
  111. package/lib/module/web/tools/InteractionManager.js.map +1 -1
  112. package/lib/module/web/tools/NodeManager.js.map +1 -1
  113. package/lib/module/web/tools/PointerEventManager.js +116 -0
  114. package/lib/module/web/tools/PointerEventManager.js.map +1 -0
  115. package/lib/module/web/tools/PointerTracker.js +97 -7
  116. package/lib/module/web/tools/PointerTracker.js.map +1 -1
  117. package/lib/module/web/tools/TouchEventManager.js +124 -0
  118. package/lib/module/web/tools/TouchEventManager.js.map +1 -0
  119. package/lib/module/web/utils.js +8 -0
  120. package/lib/module/web/utils.js.map +1 -0
  121. package/lib/typescript/RNGestureHandlerModule.macos.d.ts +5 -2
  122. package/lib/typescript/RNGestureHandlerModule.web.d.ts +5 -2
  123. package/lib/typescript/components/touchables/TouchableNativeFeedback.android.d.ts +1 -1
  124. package/lib/typescript/fabric/RNGestureHandlerButtonNativeComponent.d.ts +3 -3
  125. package/lib/typescript/fabric/RNGestureHandlerRootViewNativeComponent.d.ts +3 -2
  126. package/lib/typescript/handlers/gestures/gestureStateManager.web.d.ts +4 -0
  127. package/lib/typescript/web/detectors/RotationGestureDetector.d.ts +7 -7
  128. package/lib/typescript/web/detectors/ScaleGestureDetector.d.ts +6 -7
  129. package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +12 -10
  130. package/lib/typescript/web/handlers/GestureHandler.d.ts +41 -32
  131. package/lib/typescript/web/handlers/LongPressGestureHandler.d.ts +6 -9
  132. package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +11 -0
  133. package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +15 -6
  134. package/lib/typescript/web/handlers/PanGestureHandler.d.ts +15 -23
  135. package/lib/typescript/web/handlers/PinchGestureHandler.d.ts +11 -12
  136. package/lib/typescript/web/handlers/RotationGestureHandler.d.ts +12 -12
  137. package/lib/typescript/web/handlers/TapGestureHandler.d.ts +11 -14
  138. package/lib/typescript/web/interfaces.d.ts +50 -10
  139. package/lib/typescript/web/tools/EventManager.d.ts +28 -26
  140. package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +4 -2
  141. package/lib/typescript/web/tools/InteractionManager.d.ts +3 -0
  142. package/lib/typescript/web/tools/NodeManager.d.ts +3 -3
  143. package/lib/typescript/web/tools/PointerEventManager.d.ts +6 -0
  144. package/lib/typescript/web/tools/PointerTracker.d.ts +29 -5
  145. package/lib/typescript/web/tools/TouchEventManager.d.ts +6 -0
  146. package/lib/typescript/web/utils.d.ts +4 -0
  147. package/package.json +2 -2
  148. package/src/EnableExperimentalWebImplementation.ts +9 -0
  149. package/src/RNGestureHandlerModule.macos.ts +25 -10
  150. package/src/RNGestureHandlerModule.ts +4 -1
  151. package/src/RNGestureHandlerModule.web.ts +20 -7
  152. package/src/components/GestureComponents.web.tsx +1 -1
  153. package/src/fabric/RNGestureHandlerButtonNativeComponent.ts +2 -12
  154. package/src/fabric/RNGestureHandlerRootViewNativeComponent.ts +2 -8
  155. package/src/handlers/gestures/GestureDetector.tsx +0 -1
  156. package/src/handlers/gestures/eventReceiver.ts +23 -24
  157. package/src/handlers/gestures/gestureStateManager.web.ts +24 -0
  158. package/src/web/detectors/RotationGestureDetector.ts +20 -52
  159. package/src/web/detectors/ScaleGestureDetector.ts +9 -45
  160. package/src/web/handlers/FlingGestureHandler.ts +45 -22
  161. package/src/web/handlers/GestureHandler.ts +306 -97
  162. package/src/web/handlers/LongPressGestureHandler.ts +30 -24
  163. package/src/web/handlers/ManualGestureHandler.ts +39 -0
  164. package/src/web/handlers/NativeViewGestureHandler.ts +81 -24
  165. package/src/web/handlers/PanGestureHandler.ts +68 -53
  166. package/src/web/handlers/PinchGestureHandler.ts +47 -44
  167. package/src/web/handlers/RotationGestureHandler.ts +52 -51
  168. package/src/web/handlers/TapGestureHandler.ts +74 -56
  169. package/src/web/interfaces.ts +57 -10
  170. package/src/web/tools/EventManager.ts +58 -148
  171. package/src/web/tools/GestureHandlerOrchestrator.ts +115 -47
  172. package/src/web/tools/InteractionManager.ts +25 -9
  173. package/src/web/tools/NodeManager.ts +6 -6
  174. package/src/web/tools/PointerEventManager.ts +134 -0
  175. package/src/web/tools/PointerTracker.ts +120 -10
  176. package/src/web/tools/TouchEventManager.ts +167 -0
  177. package/src/web/utils.ts +8 -0
@@ -3,9 +3,13 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
3
3
  /* eslint-disable @typescript-eslint/no-empty-function */
4
4
  import { findNodeHandle } from 'react-native';
5
5
  import { State } from '../../State';
6
- import EventManager from '../tools/EventManager';
6
+ import { PointerType, TouchEventType, EventTypes } from '../interfaces';
7
7
  import GestureHandlerOrchestrator from '../tools/GestureHandlerOrchestrator';
8
+ import InteractionManager from '../tools/InteractionManager';
9
+ import PointerEventManager from '../tools/PointerEventManager';
8
10
  import PointerTracker from '../tools/PointerTracker';
11
+ import TouchEventManager from '../tools/TouchEventManager';
12
+ import { isPointerInBounds } from '../utils';
9
13
  export default class GestureHandler {
10
14
  // Orchestrator properties
11
15
  constructor() {
@@ -23,20 +27,18 @@ export default class GestureHandler {
23
27
 
24
28
  _defineProperty(this, "propsRef", void 0);
25
29
 
30
+ _defineProperty(this, "handlerTag", void 0);
31
+
26
32
  _defineProperty(this, "config", {
27
33
  enabled: false
28
34
  });
29
35
 
30
- _defineProperty(this, "handlerTag", void 0);
31
-
32
- _defineProperty(this, "view", null);
36
+ _defineProperty(this, "view", void 0);
33
37
 
34
- _defineProperty(this, "eventManager", void 0);
38
+ _defineProperty(this, "eventManagers", []);
35
39
 
36
40
  _defineProperty(this, "tracker", new PointerTracker());
37
41
 
38
- _defineProperty(this, "interactionManager", void 0);
39
-
40
42
  _defineProperty(this, "activationIndex", 0);
41
43
 
42
44
  _defineProperty(this, "awaiting", false);
@@ -45,12 +47,14 @@ export default class GestureHandler {
45
47
 
46
48
  _defineProperty(this, "shouldResetProgress", false);
47
49
 
48
- _defineProperty(this, "sendEvent", (event, newState, oldState) => {
50
+ _defineProperty(this, "pointerType", PointerType.NONE);
51
+
52
+ _defineProperty(this, "sendEvent", (newState, oldState) => {
49
53
  const {
50
54
  onGestureHandlerEvent,
51
55
  onGestureHandlerStateChange
52
56
  } = this.propsRef.current;
53
- const resultEvent = this.transformEventData(event, newState, oldState); // In the new API oldState field has to be undefined, unless we send event state changed
57
+ const resultEvent = this.transformEventData(newState, oldState); // In the new API oldState field has to be undefined, unless we send event state changed
54
58
  // Here the order is flipped to avoid workarounds such as making backup of the state and setting it to undefined first, then changing it back
55
59
  // Flipping order with setting oldState to undefined solves issue, when events were being sent twice instead of once
56
60
  // However, this may cause trouble in the future (but for now we don't know that)
@@ -76,17 +80,17 @@ export default class GestureHandler {
76
80
  this.propsRef = propsRef;
77
81
  this.ref = ref;
78
82
  this.currentState = State.UNDETERMINED;
79
- this.setView(ref);
80
- this.setEventManager();
83
+ this.setView();
84
+ this.addEventManager(new PointerEventManager(this.view));
85
+ this.addEventManager(new TouchEventManager(this.view));
81
86
  }
82
87
 
83
- setView(ref) {
84
- if (!ref) {
85
- this.view = null;
86
- return;
88
+ setView() {
89
+ if (!this.ref) {
90
+ throw new Error(`Cannot find HTML Element for handler ${this.handlerTag}`);
87
91
  }
88
92
 
89
- this.view = findNodeHandle(ref);
93
+ this.view = findNodeHandle(this.ref);
90
94
  this.view.style['touchAction'] = 'none';
91
95
  this.view.style['webkitUserSelect'] = 'none';
92
96
  this.view.style['userSelect'] = 'none'; //@ts-ignore This one disables default events on Safari
@@ -94,24 +98,18 @@ export default class GestureHandler {
94
98
  this.view.style['WebkitTouchCallout'] = 'none';
95
99
  }
96
100
 
97
- setEventManager() {
98
- if (!this.view) {
99
- return;
100
- }
101
-
102
- this.eventManager = new EventManager(this.view);
103
- this.eventManager.setOnPointerDown(this.onPointerDown.bind(this));
104
- this.eventManager.setOnPointerUp(this.onPointerUp.bind(this));
105
- this.eventManager.setOnPointerMove(this.onPointerMove.bind(this));
106
- this.eventManager.setOnPointerEnter(this.onPointerEnter.bind(this));
107
- this.eventManager.setOnPointerOut(this.onPointerOut.bind(this));
108
- this.eventManager.setOnPointerCancel(this.onPointerCancel.bind(this));
109
- this.eventManager.setOnPointerOutOfBounds(this.onPointerOutOfBounds.bind(this));
110
- this.eventManager.setListeners();
111
- }
112
-
113
- setInteractionManager(manager) {
114
- this.interactionManager = manager;
101
+ addEventManager(manager) {
102
+ manager.setOnPointerDown(this.onPointerDown.bind(this));
103
+ manager.setOnPointerAdd(this.onPointerAdd.bind(this));
104
+ manager.setOnPointerUp(this.onPointerUp.bind(this));
105
+ manager.setOnPointerRemove(this.onPointerRemove.bind(this));
106
+ manager.setOnPointerMove(this.onPointerMove.bind(this));
107
+ manager.setOnPointerEnter(this.onPointerEnter.bind(this));
108
+ manager.setOnPointerOut(this.onPointerOut.bind(this));
109
+ manager.setOnPointerCancel(this.onPointerCancel.bind(this));
110
+ manager.setOnPointerOutOfBounds(this.onPointerOutOfBounds.bind(this));
111
+ manager.setListeners();
112
+ this.eventManagers.push(manager);
115
113
  } //
116
114
  // Resetting handler
117
115
  //
@@ -126,59 +124,73 @@ export default class GestureHandler {
126
124
  reset() {
127
125
  this.tracker.resetTracker();
128
126
  this.onReset();
127
+ this.resetProgress();
128
+ this.eventManagers.forEach(manager => manager.resetManager());
129
129
  this.currentState = State.UNDETERMINED;
130
130
  } //
131
131
  // State logic
132
132
  //
133
133
 
134
134
 
135
- moveToState(newState, event) {
135
+ moveToState(newState, sendIfDisabled) {
136
136
  if (this.currentState === newState) {
137
137
  return;
138
138
  }
139
139
 
140
140
  const oldState = this.currentState;
141
141
  this.currentState = newState;
142
- GestureHandlerOrchestrator.getInstance().onHandlerStateChange(this, newState, oldState, event);
142
+ GestureHandlerOrchestrator.getInstance().onHandlerStateChange(this, newState, oldState, sendIfDisabled);
143
143
  this.onStateChange(newState, oldState);
144
144
  }
145
145
 
146
146
  onStateChange(_newState, _oldState) {}
147
147
 
148
- begin(event) {
149
- if (!this.checkHitSlop(event)) {
148
+ begin() {
149
+ if (!this.checkHitSlop()) {
150
150
  return;
151
151
  }
152
152
 
153
153
  if (this.currentState === State.UNDETERMINED) {
154
- this.moveToState(State.BEGAN, event);
154
+ this.moveToState(State.BEGAN);
155
155
  }
156
156
  }
157
+ /**
158
+ * @param {boolean} sendIfDisabled - Used when handler becomes disabled. With this flag orchestrator will be forced to send fail event
159
+ */
160
+
157
161
 
158
- fail(event) {
162
+ fail(sendIfDisabled) {
159
163
  if (this.currentState === State.ACTIVE || this.currentState === State.BEGAN) {
160
- this.moveToState(State.FAILED, event);
164
+ this.moveToState(State.FAILED, sendIfDisabled);
165
+ this.view.style.cursor = 'auto';
161
166
  }
162
167
 
163
168
  this.resetProgress();
164
169
  }
170
+ /**
171
+ * @param {boolean} sendIfDisabled - Used when handler becomes disabled. With this flag orchestrator will be forced to send cancel event
172
+ */
165
173
 
166
- cancel(event) {
174
+
175
+ cancel(sendIfDisabled) {
167
176
  if (this.currentState === State.ACTIVE || this.currentState === State.UNDETERMINED || this.currentState === State.BEGAN) {
168
177
  this.onCancel();
169
- this.moveToState(State.CANCELLED, event);
178
+ this.moveToState(State.CANCELLED, sendIfDisabled);
179
+ this.view.style.cursor = 'auto';
170
180
  }
171
181
  }
172
182
 
173
- activate(event, _force = false) {
183
+ activate(_force = false) {
174
184
  if (this.currentState === State.UNDETERMINED || this.currentState === State.BEGAN) {
175
- this.moveToState(State.ACTIVE, event);
185
+ this.moveToState(State.ACTIVE);
186
+ this.view.style.cursor = 'grab';
176
187
  }
177
188
  }
178
189
 
179
- end(event) {
190
+ end() {
180
191
  if (this.currentState === State.BEGAN || this.currentState === State.ACTIVE) {
181
- this.moveToState(State.END, event);
192
+ this.moveToState(State.END);
193
+ this.view.style.cursor = 'auto';
182
194
  }
183
195
 
184
196
  this.resetProgress();
@@ -224,7 +236,7 @@ export default class GestureHandler {
224
236
  return false;
225
237
  }
226
238
 
227
- return this.interactionManager.shouldWaitForHandlerFailure(this, handler);
239
+ return InteractionManager.getInstance().shouldWaitForHandlerFailure(this, handler);
228
240
  }
229
241
 
230
242
  shouldRequireToWaitForFailure(handler) {
@@ -232,7 +244,7 @@ export default class GestureHandler {
232
244
  return false;
233
245
  }
234
246
 
235
- return this.interactionManager.shouldRequireHandlerToWaitForFailure(this, handler);
247
+ return InteractionManager.getInstance().shouldRequireHandlerToWaitForFailure(this, handler);
236
248
  }
237
249
 
238
250
  shouldRecognizeSimultaneously(handler) {
@@ -240,7 +252,7 @@ export default class GestureHandler {
240
252
  return true;
241
253
  }
242
254
 
243
- return this.interactionManager.shouldRecognizeSimultaneously(this, handler);
255
+ return InteractionManager.getInstance().shouldRecognizeSimultaneously(this, handler);
244
256
  }
245
257
 
246
258
  shouldBeCancelledByOther(handler) {
@@ -248,59 +260,113 @@ export default class GestureHandler {
248
260
  return false;
249
261
  }
250
262
 
251
- return this.interactionManager.shouldHandlerBeCancelledBy(this, handler);
263
+ return InteractionManager.getInstance().shouldHandlerBeCancelledBy(this, handler);
252
264
  } //
253
265
  // Event actions
254
266
  //
255
267
 
256
268
 
257
- onPointerDown(_event) {
269
+ onPointerDown(event) {
258
270
  GestureHandlerOrchestrator.getInstance().recordHandlerIfNotPresent(this);
271
+ this.pointerType = event.pointerType;
272
+
273
+ if (this.pointerType === PointerType.TOUCH) {
274
+ GestureHandlerOrchestrator.getInstance().cancelMouseAndPenGestures(this);
275
+ }
276
+
277
+ if (this.config.needsPointerData) {
278
+ this.sendTouchEvent(event);
279
+ }
259
280
  } // Adding another pointer to existing ones
260
281
 
261
282
 
262
- onPointerAdd(_event) {}
283
+ onPointerAdd(event) {
284
+ if (this.config.needsPointerData) {
285
+ this.sendTouchEvent(event);
286
+ }
287
+ }
263
288
 
264
- onPointerUp(_event) {} // Removing pointer, when there is more than one pointers
289
+ onPointerUp(event) {
290
+ if (this.config.needsPointerData) {
291
+ this.sendTouchEvent(event);
292
+ }
293
+ } // Removing pointer, when there is more than one pointers
265
294
 
266
295
 
267
- onPointerRemove(_event) {}
296
+ onPointerRemove(event) {
297
+ if (this.config.needsPointerData) {
298
+ this.sendTouchEvent(event);
299
+ }
300
+ }
268
301
 
269
302
  onPointerMove(event) {
270
- this.tryToSendMoveEvent(event, false);
303
+ this.tryToSendMoveEvent(false);
304
+
305
+ if (this.config.needsPointerData) {
306
+ this.sendTouchEvent(event);
307
+ }
271
308
  }
272
309
 
273
- onPointerOut(_event) {}
310
+ onPointerOut(event) {
311
+ if (this.config.needsPointerData) {
312
+ this.sendTouchEvent(event);
313
+ }
314
+ }
274
315
 
275
- onPointerEnter(_event) {}
316
+ onPointerEnter(event) {
317
+ if (this.config.needsPointerData) {
318
+ this.sendTouchEvent(event);
319
+ }
320
+ }
276
321
 
277
- onPointerCancel(_event) {}
322
+ onPointerCancel(event) {
323
+ if (this.config.needsPointerData) {
324
+ this.sendTouchEvent(event);
325
+ }
326
+ }
278
327
 
279
328
  onPointerOutOfBounds(event) {
280
- this.tryToSendMoveEvent(event, true);
329
+ this.tryToSendMoveEvent(true);
330
+
331
+ if (this.config.needsPointerData) {
332
+ this.sendTouchEvent(event);
333
+ }
334
+ }
335
+
336
+ tryToSendMoveEvent(out) {
337
+ if (this.enabled && this.active && (!out || out && !this.shouldCancellWhenOutside)) {
338
+ this.sendEvent(this.currentState, this.currentState);
339
+ }
281
340
  }
282
341
 
283
- tryToSendMoveEvent(event, out) {
284
- if (this.currentState === State.ACTIVE && (!out || out && !this.shouldCancellWhenOutside)) {
285
- this.sendEvent(event, this.currentState, this.currentState);
342
+ sendTouchEvent(event) {
343
+ if (!this.enabled) {
344
+ return;
345
+ }
346
+
347
+ const {
348
+ onGestureHandlerEvent
349
+ } = this.propsRef.current;
350
+ const touchEvent = this.transformTouchEvent(event);
351
+
352
+ if (touchEvent) {
353
+ invokeNullableMethod(onGestureHandlerEvent, touchEvent);
286
354
  }
287
355
  } //
288
356
  // Events Sending
289
357
  //
290
358
 
291
359
 
292
- transformEventData(event, newState, oldState) {
293
- var _this$eventManager;
294
-
360
+ transformEventData(newState, oldState) {
295
361
  return {
296
362
  nativeEvent: {
297
363
  numberOfPointers: this.tracker.getTrackedPointersCount(),
298
364
  state: newState,
299
- pointerInside: (_this$eventManager = this.eventManager) === null || _this$eventManager === void 0 ? void 0 : _this$eventManager.isPointerInBounds({
300
- x: event.x,
301
- y: event.y
365
+ pointerInside: isPointerInBounds(this.view, {
366
+ x: this.tracker.getLastAvgX(),
367
+ y: this.tracker.getLastAvgY()
302
368
  }),
303
- ...this.transformNativeEvent(event),
369
+ ...this.transformNativeEvent(),
304
370
  handlerTag: this.handlerTag,
305
371
  target: this.ref,
306
372
  oldState: newState !== oldState ? oldState : undefined
@@ -309,7 +375,99 @@ export default class GestureHandler {
309
375
  };
310
376
  }
311
377
 
312
- transformNativeEvent(_event) {
378
+ transformTouchEvent(event) {
379
+ var _event$touchEventType;
380
+
381
+ const rect = this.view.getBoundingClientRect();
382
+ const all = [];
383
+ const changed = [];
384
+ const trackerData = this.tracker.getData(); // This if handles edge case where all pointers have been cancelled
385
+ // When pointercancel is triggered, reset method is called. This means that tracker will be reset after first pointer being cancelled
386
+ // The problem is, that handler will receive another pointercancel event from the rest of the pointers
387
+ // To avoid crashing, we don't send event if tracker tracks no pointers, i.e. has been reset
388
+
389
+ if (trackerData.size === 0 || !trackerData.has(event.pointerId)) {
390
+ return;
391
+ }
392
+
393
+ trackerData.forEach((element, key) => {
394
+ const id = this.tracker.getMappedTouchEventId(key);
395
+ all.push({
396
+ id: id,
397
+ x: element.lastX - rect.left,
398
+ y: element.lastY - rect.top,
399
+ absoluteX: element.lastX,
400
+ absoluteY: element.lastY
401
+ });
402
+ }); // Each pointer sends its own event, so we want changed touches to contain only the pointer that has changed.
403
+ // However, if the event is cancel, we want to cancel all pointers to avoid crashes
404
+
405
+ if (event.eventType !== EventTypes.CANCEL) {
406
+ changed.push({
407
+ id: this.tracker.getMappedTouchEventId(event.pointerId),
408
+ x: event.x - rect.left,
409
+ y: event.y - rect.top,
410
+ absoluteX: event.x,
411
+ absoluteY: event.y
412
+ });
413
+ } else {
414
+ trackerData.forEach((element, key) => {
415
+ const id = this.tracker.getMappedTouchEventId(key);
416
+ changed.push({
417
+ id: id,
418
+ x: element.lastX - rect.left,
419
+ y: element.lastY - rect.top,
420
+ absoluteX: element.lastX,
421
+ absoluteY: element.lastY
422
+ });
423
+ });
424
+ }
425
+
426
+ let eventType = TouchEventType.UNDETERMINED;
427
+
428
+ switch (event.eventType) {
429
+ case EventTypes.DOWN:
430
+ case EventTypes.ADDITIONAL_POINTER_DOWN:
431
+ eventType = TouchEventType.DOWN;
432
+ break;
433
+
434
+ case EventTypes.UP:
435
+ case EventTypes.ADDITIONAL_POINTER_UP:
436
+ eventType = TouchEventType.UP;
437
+ break;
438
+
439
+ case EventTypes.MOVE:
440
+ eventType = TouchEventType.MOVE;
441
+ break;
442
+
443
+ case EventTypes.CANCEL:
444
+ eventType = TouchEventType.CANCELLED;
445
+ break;
446
+ } // Here, when we receive up event, we want to decrease number of touches
447
+ // That's because we want handler to send information that there's one pointer less
448
+ // However, we still want this pointer to be present in allTouches array, so that its data can be accessed
449
+
450
+
451
+ let numberOfTouches = all.length;
452
+
453
+ if (event.eventType === EventTypes.UP || event.eventType === EventTypes.ADDITIONAL_POINTER_UP) {
454
+ --numberOfTouches;
455
+ }
456
+
457
+ return {
458
+ nativeEvent: {
459
+ handlerTag: this.handlerTag,
460
+ state: this.currentState,
461
+ eventType: (_event$touchEventType = event.touchEventType) !== null && _event$touchEventType !== void 0 ? _event$touchEventType : eventType,
462
+ changedTouches: changed,
463
+ allTouches: all,
464
+ numberOfTouches: numberOfTouches
465
+ },
466
+ timeStamp: Date.now()
467
+ };
468
+ }
469
+
470
+ transformNativeEvent() {
313
471
  return {};
314
472
  } //
315
473
  // Handling config
@@ -321,10 +479,29 @@ export default class GestureHandler {
321
479
  ...props
322
480
  }) {
323
481
  this.config = {
324
- enabled,
482
+ enabled: enabled,
325
483
  ...props
326
484
  };
485
+ this.enabled = enabled;
327
486
  this.validateHitSlops();
487
+
488
+ if (this.enabled) {
489
+ return;
490
+ }
491
+
492
+ switch (this.currentState) {
493
+ case State.ACTIVE:
494
+ this.fail(true);
495
+ break;
496
+
497
+ case State.UNDETERMINED:
498
+ GestureHandlerOrchestrator.getInstance().removeHandlerFromOrchestrator(this);
499
+ break;
500
+
501
+ default:
502
+ this.cancel(true);
503
+ break;
504
+ }
328
505
  }
329
506
 
330
507
  checkCustomActivationCriteria(criterias) {
@@ -357,8 +534,8 @@ export default class GestureHandler {
357
534
  }
358
535
  }
359
536
 
360
- checkHitSlop(event) {
361
- if (!this.config.hitSlop || !this.view) {
537
+ checkHitSlop() {
538
+ if (!this.config.hitSlop) {
362
539
  return true;
363
540
  }
364
541
 
@@ -411,13 +588,25 @@ export default class GestureHandler {
411
588
  }
412
589
  }
413
590
 
414
- if (event.offsetX >= left && event.offsetX <= right && event.offsetY >= top && event.offsetY <= bottom) {
591
+ const rect = this.view.getBoundingClientRect();
592
+ const offsetX = this.tracker.getLastX() - rect.left;
593
+ const offsetY = this.tracker.getLastY() - rect.top;
594
+
595
+ if (offsetX >= left && offsetX <= right && offsetY >= top && offsetY <= bottom) {
415
596
  return true;
416
597
  }
417
598
 
418
599
  return false;
419
600
  }
420
601
 
602
+ isPointerInBounds({
603
+ x,
604
+ y
605
+ }) {
606
+ const rect = this.view.getBoundingClientRect();
607
+ return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;
608
+ }
609
+
421
610
  resetConfig() {} //
422
611
  // Getters and setters
423
612
  //
@@ -443,8 +632,8 @@ export default class GestureHandler {
443
632
  return this.view;
444
633
  }
445
634
 
446
- getEventManager() {
447
- return this.eventManager;
635
+ getEventManagers() {
636
+ return this.eventManagers;
448
637
  }
449
638
 
450
639
  getTracker() {
@@ -459,14 +648,22 @@ export default class GestureHandler {
459
648
  return this.currentState;
460
649
  }
461
650
 
462
- setShouldCancelWhenOutside(flag) {
463
- this.shouldCancellWhenOutside = flag;
651
+ isEnabled() {
652
+ return this.enabled;
653
+ }
654
+
655
+ setShouldCancelWhenOutside(shouldCancel) {
656
+ this.shouldCancellWhenOutside = shouldCancel;
464
657
  }
465
658
 
466
659
  getShouldCancelWhenOutside() {
467
660
  return this.shouldCancellWhenOutside;
468
661
  }
469
662
 
663
+ getPointerType() {
664
+ return this.pointerType;
665
+ }
666
+
470
667
  }
471
668
 
472
669
  function invokeNullableMethod(method, event) {