react-native-gesture-handler 2.13.3 → 2.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (142) hide show
  1. package/RNGestureHandler.podspec +19 -25
  2. package/android/build.gradle +3 -2
  3. package/android/gradle.properties +2 -2
  4. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +36 -72
  5. package/android/src/main/java/com/swmansion/gesturehandler/react/Extensions.kt +1 -1
  6. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +13 -9
  7. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +12 -14
  8. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +8 -1
  9. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +34 -88
  10. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +1 -1
  11. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +18 -12
  12. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/FlingGestureHandlerEventDataBuilder.kt +30 -0
  13. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/GestureHandlerEventDataBuilder.kt +22 -0
  14. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/HoverGestureHandlerEventDataBuilder.kt +30 -0
  15. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/LongPressGestureHandlerEventDataBuilder.kt +33 -0
  16. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/ManualGestureHandlerEventDataBuilder.kt +5 -0
  17. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/NativeGestureHandlerEventDataBuilder.kt +18 -0
  18. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/PanGestureHandlerEventDataBuilder.kt +42 -0
  19. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/PinchGestureHandlerEventDataBuilder.kt +30 -0
  20. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/RotationGestureHandlerEventDataBuilder.kt +30 -0
  21. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/TapGestureHandlerEventDataBuilder.kt +30 -0
  22. package/android/src/main/jni/CMakeLists.txt +14 -2
  23. package/ios/Handlers/RNHoverHandler.m +15 -14
  24. package/ios/RNGestureHandler.m +11 -0
  25. package/ios/RNGestureHandlerButtonComponentView.mm +2 -0
  26. package/lib/commonjs/components/touchables/TouchableNativeFeedback.android.js +1 -1
  27. package/lib/commonjs/components/touchables/TouchableNativeFeedback.android.js.map +1 -1
  28. package/lib/commonjs/getReactNativeVersion.js +22 -0
  29. package/lib/commonjs/getReactNativeVersion.js.map +1 -0
  30. package/lib/commonjs/getReactNativeVersion.web.js +11 -0
  31. package/lib/commonjs/getReactNativeVersion.web.js.map +1 -0
  32. package/lib/commonjs/handlers/gestureHandlerCommon.js +1 -1
  33. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  34. package/lib/commonjs/handlers/gestures/GestureDetector.js +13 -3
  35. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  36. package/lib/commonjs/handlers/gestures/gesture.js +8 -0
  37. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  38. package/lib/commonjs/utils.js +0 -13
  39. package/lib/commonjs/utils.js.map +1 -1
  40. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  41. package/lib/commonjs/web/interfaces.js.map +1 -1
  42. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +4 -15
  43. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  44. package/lib/commonjs/web/tools/InteractionManager.js +27 -29
  45. package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
  46. package/lib/commonjs/web/tools/PointerEventManager.js +11 -3
  47. package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
  48. package/lib/module/components/touchables/TouchableNativeFeedback.android.js +1 -1
  49. package/lib/module/components/touchables/TouchableNativeFeedback.android.js.map +1 -1
  50. package/lib/module/getReactNativeVersion.js +10 -0
  51. package/lib/module/getReactNativeVersion.js.map +1 -0
  52. package/lib/module/getReactNativeVersion.web.js +4 -0
  53. package/lib/module/getReactNativeVersion.web.js.map +1 -0
  54. package/lib/module/handlers/gestureHandlerCommon.js +1 -1
  55. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  56. package/lib/module/handlers/gestures/GestureDetector.js +12 -3
  57. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  58. package/lib/module/handlers/gestures/gesture.js +8 -0
  59. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  60. package/lib/module/utils.js +0 -6
  61. package/lib/module/utils.js.map +1 -1
  62. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  63. package/lib/module/web/interfaces.js.map +1 -1
  64. package/lib/module/web/tools/GestureHandlerOrchestrator.js +4 -15
  65. package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  66. package/lib/module/web/tools/InteractionManager.js +27 -29
  67. package/lib/module/web/tools/InteractionManager.js.map +1 -1
  68. package/lib/module/web/tools/PointerEventManager.js +11 -3
  69. package/lib/module/web/tools/PointerEventManager.js.map +1 -1
  70. package/lib/typescript/ActionType.d.ts +1 -1
  71. package/lib/typescript/Directions.d.ts +1 -1
  72. package/lib/typescript/PlatformConstants.d.ts +1 -1
  73. package/lib/typescript/RNGestureHandlerModule.d.ts +1 -1
  74. package/lib/typescript/State.d.ts +1 -1
  75. package/lib/typescript/TouchEventType.d.ts +1 -1
  76. package/lib/typescript/components/DrawerLayout.d.ts +9 -9
  77. package/lib/typescript/components/GestureButtons.d.ts +3 -3
  78. package/lib/typescript/components/GestureComponents.d.ts +6 -6
  79. package/lib/typescript/components/GestureComponents.web.d.ts +1 -1
  80. package/lib/typescript/components/GestureHandlerRootView.android.d.ts +2 -1
  81. package/lib/typescript/components/GestureHandlerRootView.d.ts +2 -1
  82. package/lib/typescript/components/GestureHandlerRootView.web.d.ts +2 -1
  83. package/lib/typescript/components/Swipeable.d.ts +4 -4
  84. package/lib/typescript/components/touchables/GenericTouchable.d.ts +4 -3
  85. package/lib/typescript/components/touchables/TouchableHighlight.d.ts +4 -3
  86. package/lib/typescript/components/touchables/TouchableNativeFeedback.android.d.ts +7 -6
  87. package/lib/typescript/components/touchables/TouchableOpacity.d.ts +3 -2
  88. package/lib/typescript/components/touchables/TouchableWithoutFeedback.d.ts +1 -1
  89. package/lib/typescript/getReactNativeVersion.d.ts +4 -0
  90. package/lib/typescript/getReactNativeVersion.web.d.ts +1 -0
  91. package/lib/typescript/handlers/FlingGestureHandler.d.ts +2 -2
  92. package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +2 -2
  93. package/lib/typescript/handlers/LongPressGestureHandler.d.ts +2 -2
  94. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +3 -3
  95. package/lib/typescript/handlers/PanGestureHandler.d.ts +2 -2
  96. package/lib/typescript/handlers/PinchGestureHandler.d.ts +2 -2
  97. package/lib/typescript/handlers/RotationGestureHandler.d.ts +2 -2
  98. package/lib/typescript/handlers/TapGestureHandler.d.ts +2 -2
  99. package/lib/typescript/handlers/createHandler.d.ts +1 -1
  100. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +11 -10
  101. package/lib/typescript/handlers/gestureHandlerTypesCompat.d.ts +32 -32
  102. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +2 -2
  103. package/lib/typescript/handlers/gestures/flingGesture.d.ts +1 -1
  104. package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +2 -2
  105. package/lib/typescript/handlers/gestures/gesture.d.ts +7 -5
  106. package/lib/typescript/handlers/gestures/gestureComposition.d.ts +4 -4
  107. package/lib/typescript/handlers/gestures/hoverGesture.d.ts +3 -3
  108. package/lib/typescript/handlers/gestures/longPressGesture.d.ts +1 -1
  109. package/lib/typescript/handlers/gestures/manualGesture.d.ts +1 -1
  110. package/lib/typescript/handlers/gestures/nativeGesture.d.ts +1 -1
  111. package/lib/typescript/handlers/gestures/panGesture.d.ts +2 -2
  112. package/lib/typescript/handlers/gestures/pinchGesture.d.ts +2 -2
  113. package/lib/typescript/handlers/gestures/rotationGesture.d.ts +2 -2
  114. package/lib/typescript/handlers/gestures/tapGesture.d.ts +1 -1
  115. package/lib/typescript/jestUtils/jestUtils.d.ts +6 -6
  116. package/lib/typescript/typeUtils.d.ts +1 -1
  117. package/lib/typescript/utils.d.ts +1 -5
  118. package/lib/typescript/web/interfaces.d.ts +4 -3
  119. package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +0 -1
  120. package/lib/typescript/web/tools/InteractionManager.d.ts +2 -1
  121. package/lib/typescript/web_hammer/GestureHandler.d.ts +2 -2
  122. package/package.json +7 -7
  123. package/src/components/touchables/TouchableNativeFeedback.android.tsx +2 -1
  124. package/src/getReactNativeVersion.ts +11 -0
  125. package/src/getReactNativeVersion.web.ts +3 -0
  126. package/src/handlers/gestureHandlerCommon.ts +6 -1
  127. package/src/handlers/gestures/GestureDetector.tsx +9 -6
  128. package/src/handlers/gestures/gesture.ts +9 -1
  129. package/src/utils.ts +0 -8
  130. package/src/web/handlers/GestureHandler.ts +1 -1
  131. package/src/web/interfaces.ts +1 -0
  132. package/src/web/tools/GestureHandlerOrchestrator.ts +4 -13
  133. package/src/web/tools/InteractionManager.ts +37 -30
  134. package/src/web/tools/PointerEventManager.ts +12 -3
  135. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.kt +0 -8
  136. /package/android/{src/fabric → fabric/src/main}/java/com/swmansion/gesturehandler/RNGestureHandlerComponentsRegistry.java +0 -0
  137. /package/android/{src/fabric → fabric/src/main}/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +0 -0
  138. /package/android/{src/paper → paper/src/main}/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +0 -0
  139. /package/android/{src/paper → paper/src/main}/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +0 -0
  140. /package/android/{src/paper → paper/src/main}/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerDelegate.java +0 -0
  141. /package/android/{src/paper → paper/src/main}/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerInterface.java +0 -0
  142. /package/android/{src/paper → paper/src/main}/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +0 -0
package/src/utils.ts CHANGED
@@ -1,11 +1,3 @@
1
- import pack from 'react-native/package.json';
2
-
3
- const [majorStr, minorStr] = pack.version.split('.');
4
- export const REACT_NATIVE_VERSION = {
5
- major: parseInt(majorStr, 10),
6
- minor: parseInt(minorStr, 10),
7
- };
8
-
9
1
  export function toArray<T>(object: T | T[]): T[] {
10
2
  if (!Array.isArray(object)) {
11
3
  return [object];
@@ -821,7 +821,7 @@ function invokeNullableMethod(
821
821
  return;
822
822
  }
823
823
 
824
- const { argMapping } = method.__nodeConfig;
824
+ const { argMapping }: { argMapping: unknown } = method.__nodeConfig;
825
825
  if (!Array.isArray(argMapping)) {
826
826
  return;
827
827
  }
@@ -32,6 +32,7 @@ export interface Config extends Record<string, ConfigArgs> {
32
32
  enabled?: boolean;
33
33
  simultaneousHandlers?: Handler[] | null;
34
34
  waitFor?: Handler[] | null;
35
+ blocksHandlers?: Handler[] | null;
35
36
  hitSlop?: HitSlop;
36
37
  shouldCancelWhenOutside?: boolean;
37
38
  userSelect?: UserSelect;
@@ -9,7 +9,6 @@ export default class GestureHandlerOrchestrator {
9
9
 
10
10
  private gestureHandlers: GestureHandler[] = [];
11
11
  private awaitingHandlers: GestureHandler[] = [];
12
- private handlersToCancel: GestureHandler[] = [];
13
12
 
14
13
  private handlingChangeSemaphore = 0;
15
14
  private activationIndex = 0;
@@ -34,7 +33,6 @@ export default class GestureHandlerOrchestrator {
34
33
  public removeHandlerFromOrchestrator(handler: GestureHandler): void {
35
34
  this.gestureHandlers.splice(this.gestureHandlers.indexOf(handler), 1);
36
35
  this.awaitingHandlers.splice(this.awaitingHandlers.indexOf(handler), 1);
37
- this.handlersToCancel.splice(this.handlersToCancel.indexOf(handler), 1);
38
36
  }
39
37
 
40
38
  private cleanupFinishedHandlers(): void {
@@ -177,17 +175,12 @@ export default class GestureHandlerOrchestrator {
177
175
  handler.setShouldResetProgress(true);
178
176
  handler.setActivationIndex(this.activationIndex++);
179
177
 
180
- this.gestureHandlers.forEach((otherHandler) => {
181
- // Order of arguments is correct - we check whether current handler should cancel existing handlers
182
-
183
- if (this.shouldHandlerBeCancelledBy(otherHandler, handler)) {
184
- this.handlersToCancel.push(otherHandler);
178
+ for (let i = this.gestureHandlers.length - 1; i >= 0; --i) {
179
+ if (this.shouldHandlerBeCancelledBy(this.gestureHandlers[i], handler)) {
180
+ this.gestureHandlers[i].cancel();
185
181
  }
186
- });
187
-
188
- for (let i = this.handlersToCancel.length - 1; i >= 0; --i) {
189
- this.handlersToCancel[i]?.cancel();
190
182
  }
183
+
191
184
  this.awaitingHandlers.forEach((otherHandler) => {
192
185
  if (this.shouldHandlerBeCancelledBy(otherHandler, handler)) {
193
186
  otherHandler?.cancel();
@@ -212,8 +205,6 @@ export default class GestureHandlerOrchestrator {
212
205
  }
213
206
  }
214
207
  }
215
-
216
- this.handlersToCancel = [];
217
208
  }
218
209
 
219
210
  private addAwaitingHandler(handler: GestureHandler): void {
@@ -5,6 +5,7 @@ export default class InteractionManager {
5
5
  private static instance: InteractionManager;
6
6
  private readonly waitForRelations: Map<number, number[]> = new Map();
7
7
  private readonly simultaneousRelations: Map<number, number[]> = new Map();
8
+ private readonly blocksHandlersRelations: Map<number, number[]> = new Map();
8
9
 
9
10
  // Private becaues of singleton
10
11
  // eslint-disable-next-line no-useless-constructor, @typescript-eslint/no-empty-function
@@ -40,6 +41,19 @@ export default class InteractionManager {
40
41
 
41
42
  this.simultaneousRelations.set(handler.getTag(), simultaneousHandlers);
42
43
  }
44
+
45
+ if (config.blocksHandlers) {
46
+ const blocksHandlers: number[] = [];
47
+ config.blocksHandlers.forEach((otherHandler: Handler): void => {
48
+ if (typeof otherHandler === 'number') {
49
+ blocksHandlers.push(otherHandler);
50
+ } else {
51
+ blocksHandlers.push(otherHandler.handlerTag);
52
+ }
53
+ });
54
+
55
+ this.blocksHandlersRelations.set(handler.getTag(), blocksHandlers);
56
+ }
43
57
  }
44
58
 
45
59
  public shouldWaitForHandlerFailure(
@@ -49,20 +63,12 @@ export default class InteractionManager {
49
63
  const waitFor: number[] | undefined = this.waitForRelations.get(
50
64
  handler.getTag()
51
65
  );
52
- if (!waitFor) {
53
- return false;
54
- }
55
-
56
- let shouldWait = false;
57
-
58
- waitFor.forEach((tag: number): void => {
59
- if (tag === otherHandler.getTag()) {
60
- shouldWait = true;
61
- return; //Returns from callback
62
- }
63
- });
64
66
 
65
- return shouldWait;
67
+ return (
68
+ waitFor?.find((tag: number) => {
69
+ return tag === otherHandler.getTag();
70
+ }) !== undefined
71
+ );
66
72
  }
67
73
 
68
74
  public shouldRecognizeSimultaneously(
@@ -71,28 +77,27 @@ export default class InteractionManager {
71
77
  ): boolean {
72
78
  const simultaneousHandlers: number[] | undefined =
73
79
  this.simultaneousRelations.get(handler.getTag());
74
- if (!simultaneousHandlers) {
75
- return false;
76
- }
77
-
78
- let shouldRecognizeSimultaneously = false;
79
80
 
80
- simultaneousHandlers.forEach((tag: number): void => {
81
- if (tag === otherHandler.getTag()) {
82
- shouldRecognizeSimultaneously = true;
83
- return;
84
- }
85
- });
86
-
87
- return shouldRecognizeSimultaneously;
81
+ return (
82
+ simultaneousHandlers?.find((tag: number) => {
83
+ return tag === otherHandler.getTag();
84
+ }) !== undefined
85
+ );
88
86
  }
89
87
 
90
88
  public shouldRequireHandlerToWaitForFailure(
91
- _handler: GestureHandler,
92
- _otherHandler: GestureHandler
89
+ handler: GestureHandler,
90
+ otherHandler: GestureHandler
93
91
  ): boolean {
94
- //TODO: Implement logic
95
- return false;
92
+ const waitFor: number[] | undefined = this.blocksHandlersRelations.get(
93
+ handler.getTag()
94
+ );
95
+
96
+ return (
97
+ waitFor?.find((tag: number) => {
98
+ return tag === otherHandler.getTag();
99
+ }) !== undefined
100
+ );
96
101
  }
97
102
 
98
103
  public shouldHandlerBeCancelledBy(
@@ -106,11 +111,13 @@ export default class InteractionManager {
106
111
  public dropRelationsForHandlerWithTag(handlerTag: number): void {
107
112
  this.waitForRelations.delete(handlerTag);
108
113
  this.simultaneousRelations.delete(handlerTag);
114
+ this.blocksHandlersRelations.delete(handlerTag);
109
115
  }
110
116
 
111
117
  public reset() {
112
118
  this.waitForRelations.clear();
113
119
  this.simultaneousRelations.clear();
120
+ this.blocksHandlersRelations.clear();
114
121
  }
115
122
 
116
123
  public static getInstance(): InteractionManager {
@@ -19,7 +19,10 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
19
19
  const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.DOWN);
20
20
  const target = event.target as HTMLElement;
21
21
 
22
- target.setPointerCapture(adaptedEvent.pointerId);
22
+ if (target instanceof HTMLDivElement) {
23
+ target.setPointerCapture(adaptedEvent.pointerId);
24
+ }
25
+
23
26
  this.markAsInBounds(adaptedEvent.pointerId);
24
27
  this.trackedPointers.add(adaptedEvent.pointerId);
25
28
 
@@ -47,7 +50,10 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
47
50
  const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.UP);
48
51
  const target = event.target as HTMLElement;
49
52
 
50
- target.releasePointerCapture(adaptedEvent.pointerId);
53
+ if (target instanceof HTMLDivElement) {
54
+ target.releasePointerCapture(adaptedEvent.pointerId);
55
+ }
56
+
51
57
  this.markAsOutOfBounds(adaptedEvent.pointerId);
52
58
  this.trackedPointers.delete(adaptedEvent.pointerId);
53
59
 
@@ -79,7 +85,10 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
79
85
  // incorporating it here seems stupid), so we just call it again here, every time
80
86
  // pointer moves until it succeeds.
81
87
  // God, I do love web development.
82
- if (!target.hasPointerCapture(event.pointerId)) {
88
+ if (
89
+ !target.hasPointerCapture(event.pointerId) &&
90
+ target instanceof HTMLDivElement
91
+ ) {
83
92
  target.setPointerCapture(event.pointerId);
84
93
  }
85
94
 
@@ -1,8 +0,0 @@
1
- package com.swmansion.gesturehandler.react
2
-
3
- import com.facebook.react.bridge.WritableMap
4
- import com.swmansion.gesturehandler.core.GestureHandler
5
-
6
- interface RNGestureHandlerEventDataExtractor<T : GestureHandler<T>> {
7
- fun extractEventData(handler: T, eventData: WritableMap)
8
- }