react-native-gesture-handler 2.7.0 → 2.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (182) hide show
  1. package/android/build.gradle +10 -5
  2. package/android/noreanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt +3 -3
  3. package/android/reanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt +7 -7
  4. package/android/src/fabric/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +2 -2
  5. package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +3 -3
  6. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/FlingGestureHandler.kt +12 -9
  7. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandler.kt +39 -31
  8. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandlerInteractionController.kt +1 -1
  9. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandlerOrchestrator.kt +28 -19
  10. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandlerRegistry.kt +1 -1
  11. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureUtils.kt +1 -1
  12. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/LongPressGestureHandler.kt +1 -1
  13. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/ManualGestureHandler.kt +1 -1
  14. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/NativeViewGestureHandler.kt +5 -5
  15. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/OnTouchEventListener.kt +1 -1
  16. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/PanGestureHandler.kt +7 -5
  17. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/PinchGestureHandler.kt +11 -4
  18. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/PointerEventsConfig.kt +1 -1
  19. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/RotationGestureDetector.kt +1 -1
  20. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/RotationGestureHandler.kt +7 -2
  21. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/ScaleGestureDetector.java +1 -1
  22. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/TapGestureHandler.kt +3 -3
  23. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/ViewConfigurationHelper.kt +1 -1
  24. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/react}/Extensions.kt +3 -3
  25. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +7 -6
  26. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.kt +1 -5
  27. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +6 -6
  28. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.kt +1 -1
  29. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +3 -3
  30. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +35 -14
  31. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.kt +2 -2
  32. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +8 -6
  33. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +0 -2
  34. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.kt +4 -2
  35. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +7 -7
  36. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt +5 -5
  37. package/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.kt +2 -2
  38. package/android/src/paper/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +5 -5
  39. package/ios/Handlers/RNManualHandler.m +24 -8
  40. package/ios/RNGestureHandlerButtonComponentView.mm +7 -8
  41. package/ios/RNGestureHandlerManager.mm +176 -178
  42. package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -1
  43. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  44. package/lib/commonjs/RNGestureHandlerModule.windows.js +156 -0
  45. package/lib/commonjs/RNGestureHandlerModule.windows.js.map +1 -0
  46. package/lib/commonjs/components/DrawerLayout.js +1 -0
  47. package/lib/commonjs/components/DrawerLayout.js.map +1 -1
  48. package/lib/commonjs/components/Swipeable.js.map +1 -1
  49. package/lib/commonjs/components/touchables/TouchableOpacity.js.map +1 -1
  50. package/lib/commonjs/getShadowNodeFromRef.js +2 -2
  51. package/lib/commonjs/getShadowNodeFromRef.js.map +1 -1
  52. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  53. package/lib/commonjs/handlers/gestureHandlerCommon.js +5 -2
  54. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  55. package/lib/commonjs/handlers/gestureHandlerTypesCompat.js +4 -0
  56. package/lib/commonjs/handlers/gestures/GestureDetector.js +26 -12
  57. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  58. package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -1
  59. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  60. package/lib/commonjs/handlers/gestures/gestureComposition.js +15 -4
  61. package/lib/commonjs/handlers/gestures/gestureComposition.js.map +1 -1
  62. package/lib/commonjs/jestUtils/jestUtils.js.map +1 -1
  63. package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -1
  64. package/lib/commonjs/web/handlers/FlingGestureHandler.js +18 -15
  65. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
  66. package/lib/commonjs/web/handlers/GestureHandler.js +36 -7
  67. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  68. package/lib/commonjs/web/handlers/LongPressGestureHandler.js +2 -1
  69. package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
  70. package/lib/commonjs/web/handlers/ManualGestureHandler.js +15 -0
  71. package/lib/commonjs/web/handlers/ManualGestureHandler.js.map +1 -1
  72. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +0 -5
  73. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
  74. package/lib/commonjs/web/handlers/PanGestureHandler.js +0 -5
  75. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
  76. package/lib/commonjs/web/handlers/PinchGestureHandler.js +0 -1
  77. package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -1
  78. package/lib/commonjs/web/handlers/RotationGestureHandler.js +0 -1
  79. package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -1
  80. package/lib/commonjs/web/handlers/TapGestureHandler.js +0 -1
  81. package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
  82. package/lib/commonjs/web/interfaces.js.map +1 -1
  83. package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
  84. package/lib/commonjs/web_hammer/GestureHandler.js.map +1 -1
  85. package/lib/commonjs/web_hammer/NodeManager.js +4 -1
  86. package/lib/commonjs/web_hammer/NodeManager.js.map +1 -1
  87. package/lib/commonjs/web_hammer/PanGestureHandler.js +25 -6
  88. package/lib/commonjs/web_hammer/PanGestureHandler.js.map +1 -1
  89. package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
  90. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  91. package/lib/module/RNGestureHandlerModule.windows.js +117 -0
  92. package/lib/module/RNGestureHandlerModule.windows.js.map +1 -0
  93. package/lib/module/components/DrawerLayout.js +1 -0
  94. package/lib/module/components/DrawerLayout.js.map +1 -1
  95. package/lib/module/components/Swipeable.js.map +1 -1
  96. package/lib/module/components/touchables/TouchableOpacity.js.map +1 -1
  97. package/lib/module/getShadowNodeFromRef.js +2 -2
  98. package/lib/module/getShadowNodeFromRef.js.map +1 -1
  99. package/lib/module/handlers/createHandler.js.map +1 -1
  100. package/lib/module/handlers/gestureHandlerCommon.js +5 -2
  101. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  102. package/lib/module/handlers/gestureHandlerTypesCompat.js +1 -1
  103. package/lib/module/handlers/gestures/GestureDetector.js +26 -12
  104. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  105. package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
  106. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  107. package/lib/module/handlers/gestures/gestureComposition.js +15 -4
  108. package/lib/module/handlers/gestures/gestureComposition.js.map +1 -1
  109. package/lib/module/jestUtils/jestUtils.js.map +1 -1
  110. package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -1
  111. package/lib/module/web/handlers/FlingGestureHandler.js +18 -15
  112. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
  113. package/lib/module/web/handlers/GestureHandler.js +36 -6
  114. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  115. package/lib/module/web/handlers/LongPressGestureHandler.js +2 -1
  116. package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
  117. package/lib/module/web/handlers/ManualGestureHandler.js +15 -0
  118. package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -1
  119. package/lib/module/web/handlers/NativeViewGestureHandler.js +0 -5
  120. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
  121. package/lib/module/web/handlers/PanGestureHandler.js +0 -5
  122. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  123. package/lib/module/web/handlers/PinchGestureHandler.js +0 -1
  124. package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
  125. package/lib/module/web/handlers/RotationGestureHandler.js +0 -1
  126. package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
  127. package/lib/module/web/handlers/TapGestureHandler.js +0 -1
  128. package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
  129. package/lib/module/web/interfaces.js.map +1 -1
  130. package/lib/module/web/tools/InteractionManager.js.map +1 -1
  131. package/lib/module/web_hammer/GestureHandler.js.map +1 -1
  132. package/lib/module/web_hammer/NodeManager.js +4 -1
  133. package/lib/module/web_hammer/NodeManager.js.map +1 -1
  134. package/lib/module/web_hammer/PanGestureHandler.js +25 -6
  135. package/lib/module/web_hammer/PanGestureHandler.js.map +1 -1
  136. package/lib/typescript/RNGestureHandlerModule.macos.d.ts +1 -1
  137. package/lib/typescript/RNGestureHandlerModule.web.d.ts +1 -1
  138. package/lib/typescript/RNGestureHandlerModule.windows.d.ts +48 -0
  139. package/lib/typescript/components/DrawerLayout.d.ts +7 -0
  140. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -1
  141. package/lib/typescript/handlers/PanGestureHandler.d.ts +1 -1
  142. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +3 -1
  143. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +3 -1
  144. package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +1 -0
  145. package/lib/typescript/web/handlers/GestureHandler.d.ts +1 -0
  146. package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +3 -1
  147. package/lib/typescript/web/interfaces.d.ts +3 -1
  148. package/lib/typescript/web/tools/NodeManager.d.ts +2 -2
  149. package/package.json +14 -10
  150. package/src/RNGestureHandlerModule.macos.ts +2 -2
  151. package/src/RNGestureHandlerModule.web.ts +2 -2
  152. package/src/RNGestureHandlerModule.windows.ts +140 -0
  153. package/src/components/DrawerLayout.tsx +14 -8
  154. package/src/components/Swipeable.tsx +2 -4
  155. package/src/components/touchables/TouchableOpacity.tsx +1 -1
  156. package/src/getShadowNodeFromRef.ts +3 -3
  157. package/src/handlers/createHandler.tsx +13 -15
  158. package/src/handlers/gestureHandlerCommon.ts +9 -4
  159. package/src/handlers/gestureHandlerTypesCompat.ts +34 -17
  160. package/src/handlers/gestures/GestureDetector.tsx +46 -19
  161. package/src/handlers/gestures/eventReceiver.ts +2 -1
  162. package/src/handlers/gestures/gesture.ts +8 -12
  163. package/src/handlers/gestures/gestureComposition.ts +19 -6
  164. package/src/jestUtils/jestUtils.ts +3 -4
  165. package/src/web/detectors/RotationGestureDetector.ts +2 -1
  166. package/src/web/handlers/FlingGestureHandler.ts +28 -20
  167. package/src/web/handlers/GestureHandler.ts +42 -17
  168. package/src/web/handlers/LongPressGestureHandler.ts +2 -2
  169. package/src/web/handlers/ManualGestureHandler.ts +10 -1
  170. package/src/web/handlers/NativeViewGestureHandler.ts +0 -5
  171. package/src/web/handlers/PanGestureHandler.ts +0 -6
  172. package/src/web/handlers/PinchGestureHandler.ts +0 -2
  173. package/src/web/handlers/RotationGestureHandler.ts +2 -5
  174. package/src/web/handlers/TapGestureHandler.ts +0 -2
  175. package/src/web/interfaces.ts +3 -0
  176. package/src/web/tools/InteractionManager.ts +2 -3
  177. package/src/web_hammer/GestureHandler.ts +6 -8
  178. package/src/web_hammer/NodeManager.ts +3 -1
  179. package/src/web_hammer/PanGestureHandler.ts +12 -6
  180. package/android/lib/build.gradle +0 -28
  181. package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  182. package/ios/RNGestureHandler.xcodeproj/xcuserdata/jakubpiasecki.xcuserdatad/xcschemes/xcschememanagement.plist +0 -19
@@ -69,14 +69,24 @@ export class ComposedGesture extends Gesture {
69
69
 
70
70
  export class SimultaneousGesture extends ComposedGesture {
71
71
  prepare() {
72
- const simultaneousArray = this.gestures
73
- .flatMap((gesture) => gesture.toGestureArray())
74
- .concat(this.simultaneousGestures);
72
+ // this piece of magic works something like this:
73
+ // for every gesture in the array
74
+ const simultaneousArrays = this.gestures.map((gesture) =>
75
+ // we take the array it's in
76
+ this.gestures
77
+ // and make a copy without it
78
+ .filter((x) => x !== gesture)
79
+ // then we flatmap the result to get list of raw (not composed) gestures
80
+ // this way we don't make the gestures simultaneous with themselves, which is
81
+ // important when the gesture is `ExclusiveGesture` - we don't want to make
82
+ // exclusive gestures simultaneous
83
+ .flatMap((x) => x.toGestureArray())
84
+ );
75
85
 
76
- for (const gesture of this.gestures) {
86
+ for (let i = 0; i < this.gestures.length; i++) {
77
87
  this.prepareSingleGesture(
78
- gesture,
79
- simultaneousArray,
88
+ this.gestures[i],
89
+ simultaneousArrays[i],
80
90
  this.requireGesturesToFail
81
91
  );
82
92
  }
@@ -85,6 +95,8 @@ export class SimultaneousGesture extends ComposedGesture {
85
95
 
86
96
  export class ExclusiveGesture extends ComposedGesture {
87
97
  prepare() {
98
+ // transforms the array of gestures into array of grouped raw (not composed) gestures
99
+ // i.e. [gesture1, gesture2, ComposedGesture(gesture3, gesture4)] -> [[gesture1], [gesture2], [gesture3, gesture4]]
88
100
  const gestureArrays = this.gestures.map((gesture) =>
89
101
  gesture.toGestureArray()
90
102
  );
@@ -98,6 +110,7 @@ export class ExclusiveGesture extends ComposedGesture {
98
110
  this.requireGesturesToFail.concat(requireToFail)
99
111
  );
100
112
 
113
+ // every group gets to wait for all groups before it
101
114
  requireToFail = requireToFail.concat(gestureArrays[i]);
102
115
  }
103
116
  }
@@ -464,9 +464,8 @@ export function fireGestureHandler<THandler extends AllGestures | AllHandlers>(
464
464
  componentOrGesture: ReactTestInstance | GestureType,
465
465
  eventList: Partial<GestureHandlerTestEvent<ExtractConfig<THandler>>>[] = []
466
466
  ): void {
467
- const { emitEvent, handlerType, handlerTag } = getHandlerData(
468
- componentOrGesture
469
- );
467
+ const { emitEvent, handlerType, handlerTag } =
468
+ getHandlerData(componentOrGesture);
470
469
 
471
470
  let _ = fillMissingStatesTransitions(
472
471
  eventList,
@@ -478,7 +477,7 @@ export function fireGestureHandler<THandler extends AllGestures | AllHandlers>(
478
477
  // @ts-ignore TODO
479
478
  _ = _.map(wrapWithNativeEvent);
480
479
 
481
- const events = (_ as unknown) as WrappedGestureHandlerTestEvent[];
480
+ const events = _ as unknown as WrappedGestureHandlerTestEvent[];
482
481
 
483
482
  const firstEvent = events.shift()!;
484
483
 
@@ -8,7 +8,8 @@ export interface RotationGestureListener {
8
8
  }
9
9
 
10
10
  export default class RotationGestureDetector
11
- implements RotationGestureListener {
11
+ implements RotationGestureListener
12
+ {
12
13
  onRotationBegin: (detector: RotationGestureDetector) => boolean;
13
14
  onRotation: (detector: RotationGestureDetector) => boolean;
14
15
  onRotationEnd: (detector: RotationGestureDetector) => void;
@@ -21,6 +21,7 @@ export default class FlingGestureHandler extends GestureHandler {
21
21
  private startY = 0;
22
22
 
23
23
  private maxNumberOfPointersSimultaneously = 0;
24
+ private keyPointer = NaN;
24
25
 
25
26
  public init(ref: number, propsRef: React.RefObject<unknown>): void {
26
27
  super.init(ref, propsRef);
@@ -29,8 +30,6 @@ export default class FlingGestureHandler extends GestureHandler {
29
30
  public updateGestureConfig({ enabled = true, ...props }: Config): void {
30
31
  super.updateGestureConfig({ enabled: enabled, ...props });
31
32
 
32
- this.enabled = enabled;
33
-
34
33
  if (this.config.direction) {
35
34
  this.direction = this.config.direction;
36
35
  }
@@ -51,9 +50,9 @@ export default class FlingGestureHandler extends GestureHandler {
51
50
  };
52
51
  }
53
52
 
54
- private startFling(event: AdaptedEvent): void {
55
- this.startX = event.x;
56
- this.startY = event.y;
53
+ private startFling(): void {
54
+ this.startX = this.tracker.getLastX(this.keyPointer);
55
+ this.startY = this.tracker.getLastY(this.keyPointer);
57
56
 
58
57
  this.begin();
59
58
 
@@ -62,18 +61,22 @@ export default class FlingGestureHandler extends GestureHandler {
62
61
  this.delayTimeout = setTimeout(() => this.fail(), this.maxDurationMs);
63
62
  }
64
63
 
65
- private tryEndFling(event: AdaptedEvent): boolean {
64
+ private tryEndFling(): boolean {
66
65
  if (
67
66
  this.maxNumberOfPointersSimultaneously ===
68
67
  this.numberOfPointersRequired &&
69
68
  ((this.direction & Direction.RIGHT &&
70
- event.x - this.startX > this.minAcceptableDelta) ||
69
+ this.tracker.getLastX(this.keyPointer) - this.startX >
70
+ this.minAcceptableDelta) ||
71
71
  (this.direction & Direction.LEFT &&
72
- this.startX - event.x > this.minAcceptableDelta) ||
72
+ this.startX - this.tracker.getLastX(this.keyPointer) >
73
+ this.minAcceptableDelta) ||
73
74
  (this.direction & Direction.UP &&
74
- this.startY - event.y > this.minAcceptableDelta) ||
75
+ this.startY - this.tracker.getLastY(this.keyPointer) >
76
+ this.minAcceptableDelta) ||
75
77
  (this.direction & Direction.DOWN &&
76
- event.y - this.startY > this.minAcceptableDelta))
78
+ this.tracker.getLastY(this.keyPointer) - this.startY >
79
+ this.minAcceptableDelta))
77
80
  ) {
78
81
  clearTimeout(this.delayTimeout);
79
82
  this.activate();
@@ -84,40 +87,43 @@ export default class FlingGestureHandler extends GestureHandler {
84
87
  return false;
85
88
  }
86
89
 
87
- private endFling(event: AdaptedEvent) {
88
- if (!this.tryEndFling(event)) {
90
+ private endFling() {
91
+ if (!this.tryEndFling()) {
89
92
  this.fail();
90
93
  }
91
94
  }
92
95
 
93
96
  protected onPointerDown(event: AdaptedEvent): void {
94
97
  this.tracker.addToTracker(event);
98
+ this.keyPointer = event.pointerId;
99
+
95
100
  super.onPointerDown(event);
96
- this.newPointerAction(event);
101
+ this.newPointerAction();
97
102
  }
98
103
 
99
104
  protected onPointerAdd(event: AdaptedEvent): void {
100
105
  this.tracker.addToTracker(event);
101
106
  super.onPointerAdd(event);
102
- this.newPointerAction(event);
107
+ this.newPointerAction();
103
108
  }
104
109
 
105
- private newPointerAction(event: AdaptedEvent): void {
110
+ private newPointerAction(): void {
106
111
  if (this.currentState === State.UNDETERMINED) {
107
- this.startFling(event);
112
+ this.startFling();
108
113
  }
109
114
 
110
115
  if (this.currentState !== State.BEGAN) {
111
116
  return;
112
117
  }
113
118
 
114
- this.tryEndFling(event);
119
+ this.tryEndFling();
115
120
 
116
121
  if (
117
122
  this.tracker.getTrackedPointersCount() >
118
123
  this.maxNumberOfPointersSimultaneously
119
124
  ) {
120
- this.maxNumberOfPointersSimultaneously = this.tracker.getTrackedPointersCount();
125
+ this.maxNumberOfPointersSimultaneously =
126
+ this.tracker.getTrackedPointersCount();
121
127
  }
122
128
  }
123
129
 
@@ -128,7 +134,7 @@ export default class FlingGestureHandler extends GestureHandler {
128
134
  return;
129
135
  }
130
136
 
131
- this.tryEndFling(event);
137
+ this.tryEndFling();
132
138
 
133
139
  super.onPointerMove(event);
134
140
  }
@@ -136,6 +142,8 @@ export default class FlingGestureHandler extends GestureHandler {
136
142
  protected onPointerUp(event: AdaptedEvent): void {
137
143
  super.onPointerUp(event);
138
144
  this.onUp(event);
145
+
146
+ this.keyPointer = NaN;
139
147
  }
140
148
 
141
149
  protected onPointerRemove(event: AdaptedEvent): void {
@@ -148,7 +156,7 @@ export default class FlingGestureHandler extends GestureHandler {
148
156
  if (this.currentState !== State.BEGAN) {
149
157
  return;
150
158
  }
151
- this.endFling(event);
159
+ this.endFling();
152
160
  }
153
161
 
154
162
  protected onPointerCancel(event: AdaptedEvent): void {
@@ -70,13 +70,18 @@ export default abstract class GestureHandler {
70
70
  );
71
71
  }
72
72
 
73
- this.view = (findNodeHandle(this.ref) as unknown) as HTMLElement;
73
+ this.view = findNodeHandle(this.ref) as unknown as HTMLElement;
74
74
  this.view.style['touchAction'] = 'none';
75
- this.view.style['webkitUserSelect'] = 'none';
76
- this.view.style['userSelect'] = 'none';
77
-
78
75
  //@ts-ignore This one disables default events on Safari
79
76
  this.view.style['WebkitTouchCallout'] = 'none';
77
+
78
+ if (!this.config.userSelect) {
79
+ this.view.style['webkitUserSelect'] = 'none';
80
+ this.view.style['userSelect'] = 'none';
81
+ } else {
82
+ this.view.style['webkitUserSelect'] = this.config.userSelect;
83
+ this.view.style['userSelect'] = this.config.userSelect;
84
+ }
80
85
  }
81
86
 
82
87
  private addEventManager(manager: EventManager): void {
@@ -121,19 +126,17 @@ export default abstract class GestureHandler {
121
126
  return;
122
127
  }
123
128
 
129
+ const oldState = this.currentState;
130
+ this.currentState = newState;
131
+
124
132
  if (
125
133
  this.tracker.getTrackedPointersCount() > 0 &&
126
134
  this.config.needsPointerData &&
127
- (newState === State.END ||
128
- newState === State.CANCELLED ||
129
- newState === State.FAILED)
135
+ this.isFinished()
130
136
  ) {
131
137
  this.cancelTouches();
132
138
  }
133
139
 
134
- const oldState = this.currentState;
135
- this.currentState = newState;
136
-
137
140
  GestureHandlerOrchestrator.getInstance().onHandlerStateChange(
138
141
  this,
139
142
  newState,
@@ -324,6 +327,18 @@ export default abstract class GestureHandler {
324
327
  }
325
328
  }
326
329
  protected onPointerOut(event: AdaptedEvent): void {
330
+ if (this.shouldCancellWhenOutside) {
331
+ switch (this.currentState) {
332
+ case State.ACTIVE:
333
+ this.cancel();
334
+ break;
335
+ case State.BEGAN:
336
+ this.fail();
337
+ break;
338
+ }
339
+ return;
340
+ }
341
+
327
342
  if (this.config.needsPointerData) {
328
343
  this.sendTouchEvent(event);
329
344
  }
@@ -362,9 +377,8 @@ export default abstract class GestureHandler {
362
377
  const { onGestureHandlerEvent }: PropsRef = this.propsRef
363
378
  .current as PropsRef;
364
379
 
365
- const touchEvent: ResultTouchEvent | undefined = this.transformTouchEvent(
366
- event
367
- );
380
+ const touchEvent: ResultTouchEvent | undefined =
381
+ this.transformTouchEvent(event);
368
382
 
369
383
  if (touchEvent) {
370
384
  invokeNullableMethod(onGestureHandlerEvent, touchEvent);
@@ -376,10 +390,8 @@ export default abstract class GestureHandler {
376
390
  //
377
391
 
378
392
  public sendEvent = (newState: State, oldState: State): void => {
379
- const {
380
- onGestureHandlerEvent,
381
- onGestureHandlerStateChange,
382
- }: PropsRef = this.propsRef.current as PropsRef;
393
+ const { onGestureHandlerEvent, onGestureHandlerStateChange }: PropsRef =
394
+ this.propsRef.current as PropsRef;
383
395
 
384
396
  const resultEvent: ResultEvent = this.transformEventData(
385
397
  newState,
@@ -578,6 +590,11 @@ export default abstract class GestureHandler {
578
590
  public updateGestureConfig({ enabled = true, ...props }: Config): void {
579
591
  this.config = { enabled: enabled, ...props };
580
592
  this.enabled = enabled;
593
+
594
+ if (this.config.shouldCancelWhenOutside !== undefined) {
595
+ this.setShouldCancelWhenOutside(this.config.shouldCancelWhenOutside);
596
+ }
597
+
581
598
  this.validateHitSlops();
582
599
 
583
600
  if (this.enabled) {
@@ -775,6 +792,14 @@ export default abstract class GestureHandler {
775
792
  return this.enabled;
776
793
  }
777
794
 
795
+ private isFinished(): boolean {
796
+ return (
797
+ this.currentState === State.END ||
798
+ this.currentState === State.FAILED ||
799
+ this.currentState === State.CANCELLED
800
+ );
801
+ }
802
+
778
803
  protected setShouldCancelWhenOutside(shouldCancel: boolean) {
779
804
  this.shouldCancellWhenOutside = shouldCancel;
780
805
  }
@@ -23,6 +23,8 @@ export default class LongPressGestureHandler extends GestureHandler {
23
23
  public init(ref: number, propsRef: React.RefObject<unknown>) {
24
24
  super.init(ref, propsRef);
25
25
  this.setShouldCancelWhenOutside(true);
26
+
27
+ this.view.oncontextmenu = () => false;
26
28
  }
27
29
 
28
30
  protected transformNativeEvent() {
@@ -40,8 +42,6 @@ export default class LongPressGestureHandler extends GestureHandler {
40
42
  public updateGestureConfig({ enabled = true, ...props }: Config): void {
41
43
  super.updateGestureConfig({ enabled: enabled, ...props });
42
44
 
43
- this.enabled = enabled;
44
-
45
45
  if (this.config.minDurationMs !== undefined) {
46
46
  this.minDurationMs = this.config.minDurationMs;
47
47
  }
@@ -1,4 +1,4 @@
1
- import { AdaptedEvent } from '../interfaces';
1
+ import { AdaptedEvent, Config } from '../interfaces';
2
2
  import GestureHandler from './GestureHandler';
3
3
 
4
4
  export default class ManualGestureHandler extends GestureHandler {
@@ -6,6 +6,10 @@ export default class ManualGestureHandler extends GestureHandler {
6
6
  super.init(ref, propsRef);
7
7
  }
8
8
 
9
+ public updateGestureConfig({ enabled = true, ...props }: Config): void {
10
+ super.updateGestureConfig({ enabled: enabled, ...props });
11
+ }
12
+
9
13
  protected onPointerDown(event: AdaptedEvent): void {
10
14
  this.tracker.addToTracker(event);
11
15
  super.onPointerDown(event);
@@ -22,6 +26,11 @@ export default class ManualGestureHandler extends GestureHandler {
22
26
  super.onPointerMove(event);
23
27
  }
24
28
 
29
+ protected onPointerOutOfBounds(event: AdaptedEvent): void {
30
+ this.tracker.track(event);
31
+ super.onPointerOutOfBounds(event);
32
+ }
33
+
25
34
  protected onPointerUp(event: AdaptedEvent): void {
26
35
  super.onPointerUp(event);
27
36
  this.tracker.removeFromTracker(event.pointerId);
@@ -30,11 +30,6 @@ export default class NativeViewGestureHandler extends GestureHandler {
30
30
  } else {
31
31
  this.buttonRole = false;
32
32
  }
33
-
34
- if (this.view.tagName.toLowerCase() === 'input') {
35
- //Enables text input on Safari
36
- this.view.style['webkitUserSelect'] = 'auto';
37
- }
38
33
  }
39
34
 
40
35
  public updateGestureConfig({ enabled = true, ...props }: Config): void {
@@ -65,8 +65,6 @@ export default class PanGestureHandler extends GestureHandler {
65
65
  super.updateGestureConfig({ enabled: enabled, ...props });
66
66
  this.checkCustomActivationCriteria(this.customActivationProperties);
67
67
 
68
- this.enabled = enabled;
69
-
70
68
  if (this.config.minDist !== undefined) {
71
69
  this.minDistSq = this.config.minDist * this.config.minDist;
72
70
  } else if (this.hasCustomActivationCriteria) {
@@ -98,10 +96,6 @@ export default class PanGestureHandler extends GestureHandler {
98
96
  this.activateAfterLongPress = this.config.activateAfterLongPress;
99
97
  }
100
98
 
101
- if (this.config.shouldCancelWhenOutside) {
102
- this.setShouldCancelWhenOutside(false);
103
- }
104
-
105
99
  if (this.config.activeOffsetXStart !== undefined) {
106
100
  this.activeOffsetXStart = this.config.activeOffsetXStart;
107
101
 
@@ -57,8 +57,6 @@ export default class PinchGestureHandler extends GestureHandler {
57
57
 
58
58
  public updateGestureConfig({ enabled = true, ...props }: Config): void {
59
59
  super.updateGestureConfig({ enabled: enabled, ...props });
60
-
61
- this.enabled = enabled;
62
60
  }
63
61
 
64
62
  protected transformNativeEvent() {
@@ -41,9 +41,8 @@ export default class RotationGestureHandler extends GestureHandler {
41
41
  },
42
42
  };
43
43
 
44
- private rotationGestureDetector: RotationGestureDetector = new RotationGestureDetector(
45
- this.rotationGestureListener
46
- );
44
+ private rotationGestureDetector: RotationGestureDetector =
45
+ new RotationGestureDetector(this.rotationGestureListener);
47
46
 
48
47
  public init(ref: number, propsRef: React.RefObject<unknown>): void {
49
48
  super.init(ref, propsRef);
@@ -53,8 +52,6 @@ export default class RotationGestureHandler extends GestureHandler {
53
52
 
54
53
  public updateGestureConfig({ enabled = true, ...props }: Config): void {
55
54
  super.updateGestureConfig({ enabled: enabled, ...props });
56
-
57
- this.enabled = enabled;
58
55
  }
59
56
 
60
57
  protected transformNativeEvent() {
@@ -39,8 +39,6 @@ export default class TapGestureHandler extends GestureHandler {
39
39
  public updateGestureConfig({ enabled = true, ...props }: Config): void {
40
40
  super.updateGestureConfig({ enabled: enabled, ...props });
41
41
 
42
- this.enabled = enabled;
43
-
44
42
  if (this.config.numberOfTaps !== undefined) {
45
43
  this.numberOfTaps = this.config.numberOfTaps;
46
44
  }
@@ -1,3 +1,4 @@
1
+ import { UserSelect } from '../handlers/gestureHandlerCommon';
1
2
  import { Directions } from '../Directions';
2
3
  import { State } from '../State';
3
4
 
@@ -20,6 +21,7 @@ type ConfigArgs =
20
21
  | number
21
22
  | boolean
22
23
  | HitSlop
24
+ | UserSelect
23
25
  | Directions
24
26
  | Handler[]
25
27
  | null
@@ -31,6 +33,7 @@ export interface Config extends Record<string, ConfigArgs> {
31
33
  waitFor?: Handler[] | null;
32
34
  hitSlop?: HitSlop;
33
35
  shouldCancelWhenOutside?: boolean;
36
+ userSelect?: UserSelect;
34
37
 
35
38
  activateAfterLongPress?: number;
36
39
  failOffsetXStart?: number;
@@ -69,9 +69,8 @@ export default class InteractionManager {
69
69
  handler: GestureHandler,
70
70
  otherHandler: GestureHandler
71
71
  ): boolean {
72
- const simultaneousHandlers:
73
- | number[]
74
- | undefined = this.simultaneousRelations.get(handler.getTag());
72
+ const simultaneousHandlers: number[] | undefined =
73
+ this.simultaneousRelations.get(handler.getTag());
75
74
  if (!simultaneousHandlers) {
76
75
  return false;
77
76
  }
@@ -206,10 +206,8 @@ abstract class GestureHandler {
206
206
  }
207
207
 
208
208
  sendEvent = (nativeEvent: HammerInputExt) => {
209
- const {
210
- onGestureHandlerEvent,
211
- onGestureHandlerStateChange,
212
- } = this.propsRef.current;
209
+ const { onGestureHandlerEvent, onGestureHandlerStateChange } =
210
+ this.propsRef.current;
213
211
 
214
212
  const event = this.transformEventData(nativeEvent);
215
213
 
@@ -312,7 +310,7 @@ abstract class GestureHandler {
312
310
  return;
313
311
  }
314
312
 
315
- this.onRawEvent((ev as unknown) as HammerInputExt);
313
+ this.onRawEvent(ev as unknown as HammerInputExt);
316
314
 
317
315
  // TODO: Bacon: Check against something other than null
318
316
  // The isFirst value is not called when the first rotation is calculated.
@@ -336,17 +334,17 @@ abstract class GestureHandler {
336
334
  // TODO(TS) Hammer types aren't exactly that what we get in runtime
337
335
  if (!this.isDiscrete) {
338
336
  this.hammer!.on(`${this.name}start`, (event: HammerInput) =>
339
- this.onStart((event as unknown) as HammerInputExt)
337
+ this.onStart(event as unknown as HammerInputExt)
340
338
  );
341
339
  this.hammer!.on(
342
340
  `${this.name}end ${this.name}cancel`,
343
341
  (event: HammerInput) => {
344
- this.onGestureEnded((event as unknown) as HammerInputExt);
342
+ this.onGestureEnded(event as unknown as HammerInputExt);
345
343
  }
346
344
  );
347
345
  }
348
346
  this.hammer!.on(this.name, (ev: HammerInput) =>
349
- this.onGestureActivated((ev as unknown) as HammerInputExt)
347
+ this.onGestureActivated(ev as unknown as HammerInputExt)
350
348
  ); // TODO(TS) remove cast after https://github.com/DefinitelyTyped/DefinitelyTyped/pull/50438 is merged
351
349
  }
352
350
 
@@ -7,7 +7,9 @@ const gestures: Record<
7
7
  > = {};
8
8
 
9
9
  export function getHandler(tag: number) {
10
- if (tag in gestures) return gestures[tag];
10
+ if (tag in gestures) {
11
+ return gestures[tag];
12
+ }
11
13
 
12
14
  throw new Error(`No handler for tag ${tag}`);
13
15
  }
@@ -54,23 +54,29 @@ class PanGestureHandler extends DraggingGestureHandler {
54
54
  return Hammer.DIRECTION_ALL;
55
55
  }
56
56
 
57
- if (!isnan(activeOffsetXStart))
57
+ if (!isnan(activeOffsetXStart)) {
58
58
  horizontalDirections.push(Hammer.DIRECTION_LEFT);
59
- if (!isnan(activeOffsetXEnd))
59
+ }
60
+ if (!isnan(activeOffsetXEnd)) {
60
61
  horizontalDirections.push(Hammer.DIRECTION_RIGHT);
61
- if (horizontalDirections.length === 2)
62
+ }
63
+ if (horizontalDirections.length === 2) {
62
64
  horizontalDirections = [Hammer.DIRECTION_HORIZONTAL];
65
+ }
63
66
 
64
67
  directions = directions.concat(horizontalDirections);
65
68
  let verticalDirections = [];
66
69
 
67
- if (!isnan(activeOffsetYStart))
70
+ if (!isnan(activeOffsetYStart)) {
68
71
  verticalDirections.push(Hammer.DIRECTION_UP);
69
- if (!isnan(activeOffsetYEnd))
72
+ }
73
+ if (!isnan(activeOffsetYEnd)) {
70
74
  verticalDirections.push(Hammer.DIRECTION_DOWN);
75
+ }
71
76
 
72
- if (verticalDirections.length === 2)
77
+ if (verticalDirections.length === 2) {
73
78
  verticalDirections = [Hammer.DIRECTION_VERTICAL];
79
+ }
74
80
 
75
81
  directions = directions.concat(verticalDirections);
76
82
 
@@ -1,28 +0,0 @@
1
- apply plugin: 'com.android.library'
2
-
3
- repositories {
4
- maven { url 'https://repo1.maven.org/maven2' }
5
- }
6
-
7
- android {
8
- compileSdkVersion 23
9
- buildToolsVersion '25.0.0'
10
-
11
- defaultConfig {
12
- minSdkVersion 16
13
- targetSdkVersion 23
14
- versionCode 1
15
- versionName "1.0"
16
- }
17
- buildTypes {
18
- release {
19
- minifyEnabled false
20
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
21
- }
22
- }
23
- }
24
-
25
- dependencies {
26
- testCompile 'junit:junit:4.12'
27
- compile 'com.android.support:appcompat-v7:23.4.0'
28
- }
@@ -1,19 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
- <plist version="1.0">
4
- <dict>
5
- <key>SchemeUserState</key>
6
- <dict>
7
- <key>RNGestureHandler-tvOS.xcscheme_^#shared#^_</key>
8
- <dict>
9
- <key>orderHint</key>
10
- <integer>0</integer>
11
- </dict>
12
- <key>RNGestureHandler.xcscheme_^#shared#^_</key>
13
- <dict>
14
- <key>orderHint</key>
15
- <integer>1</integer>
16
- </dict>
17
- </dict>
18
- </dict>
19
- </plist>