react-native-gesture-handler 2.7.0 → 2.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/lib/commonjs/handlers/gestures/GestureDetector.js +9 -2
  2. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  3. package/lib/commonjs/handlers/gestures/gestureComposition.js +15 -4
  4. package/lib/commonjs/handlers/gestures/gestureComposition.js.map +1 -1
  5. package/lib/commonjs/web/handlers/FlingGestureHandler.js +18 -14
  6. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
  7. package/lib/commonjs/web/handlers/GestureHandler.js +8 -4
  8. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  9. package/lib/commonjs/web/handlers/LongPressGestureHandler.js +2 -0
  10. package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
  11. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +1 -4
  12. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
  13. package/lib/commonjs/web/handlers/PanGestureHandler.js +2 -2
  14. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
  15. package/lib/module/handlers/gestures/GestureDetector.js +9 -2
  16. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  17. package/lib/module/handlers/gestures/gestureComposition.js +15 -4
  18. package/lib/module/handlers/gestures/gestureComposition.js.map +1 -1
  19. package/lib/module/web/handlers/FlingGestureHandler.js +18 -14
  20. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
  21. package/lib/module/web/handlers/GestureHandler.js +8 -3
  22. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  23. package/lib/module/web/handlers/LongPressGestureHandler.js +2 -0
  24. package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
  25. package/lib/module/web/handlers/NativeViewGestureHandler.js +1 -4
  26. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
  27. package/lib/module/web/handlers/PanGestureHandler.js +2 -2
  28. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  29. package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +1 -0
  30. package/lib/typescript/web/handlers/GestureHandler.d.ts +1 -0
  31. package/package.json +1 -1
  32. package/src/handlers/gestures/GestureDetector.tsx +10 -3
  33. package/src/handlers/gestures/gestureComposition.ts +19 -6
  34. package/src/web/handlers/FlingGestureHandler.ts +26 -17
  35. package/src/web/handlers/GestureHandler.ts +12 -6
  36. package/src/web/handlers/LongPressGestureHandler.ts +2 -0
  37. package/src/web/handlers/NativeViewGestureHandler.ts +1 -4
  38. package/src/web/handlers/PanGestureHandler.ts +2 -2
  39. package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  40. 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
  }
@@ -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);
@@ -51,9 +52,9 @@ export default class FlingGestureHandler extends GestureHandler {
51
52
  };
52
53
  }
53
54
 
54
- private startFling(event: AdaptedEvent): void {
55
- this.startX = event.x;
56
- this.startY = event.y;
55
+ private startFling(): void {
56
+ this.startX = this.tracker.getLastX(this.keyPointer);
57
+ this.startY = this.tracker.getLastY(this.keyPointer);
57
58
 
58
59
  this.begin();
59
60
 
@@ -62,18 +63,22 @@ export default class FlingGestureHandler extends GestureHandler {
62
63
  this.delayTimeout = setTimeout(() => this.fail(), this.maxDurationMs);
63
64
  }
64
65
 
65
- private tryEndFling(event: AdaptedEvent): boolean {
66
+ private tryEndFling(): boolean {
66
67
  if (
67
68
  this.maxNumberOfPointersSimultaneously ===
68
69
  this.numberOfPointersRequired &&
69
70
  ((this.direction & Direction.RIGHT &&
70
- event.x - this.startX > this.minAcceptableDelta) ||
71
+ this.tracker.getLastX(this.keyPointer) - this.startX >
72
+ this.minAcceptableDelta) ||
71
73
  (this.direction & Direction.LEFT &&
72
- this.startX - event.x > this.minAcceptableDelta) ||
74
+ this.startX - this.tracker.getLastX(this.keyPointer) >
75
+ this.minAcceptableDelta) ||
73
76
  (this.direction & Direction.UP &&
74
- this.startY - event.y > this.minAcceptableDelta) ||
77
+ this.startY - this.tracker.getLastY(this.keyPointer) >
78
+ this.minAcceptableDelta) ||
75
79
  (this.direction & Direction.DOWN &&
76
- event.y - this.startY > this.minAcceptableDelta))
80
+ this.tracker.getLastY(this.keyPointer) - this.startY >
81
+ this.minAcceptableDelta))
77
82
  ) {
78
83
  clearTimeout(this.delayTimeout);
79
84
  this.activate();
@@ -84,34 +89,36 @@ export default class FlingGestureHandler extends GestureHandler {
84
89
  return false;
85
90
  }
86
91
 
87
- private endFling(event: AdaptedEvent) {
88
- if (!this.tryEndFling(event)) {
92
+ private endFling() {
93
+ if (!this.tryEndFling()) {
89
94
  this.fail();
90
95
  }
91
96
  }
92
97
 
93
98
  protected onPointerDown(event: AdaptedEvent): void {
94
99
  this.tracker.addToTracker(event);
100
+ this.keyPointer = event.pointerId;
101
+
95
102
  super.onPointerDown(event);
96
- this.newPointerAction(event);
103
+ this.newPointerAction();
97
104
  }
98
105
 
99
106
  protected onPointerAdd(event: AdaptedEvent): void {
100
107
  this.tracker.addToTracker(event);
101
108
  super.onPointerAdd(event);
102
- this.newPointerAction(event);
109
+ this.newPointerAction();
103
110
  }
104
111
 
105
- private newPointerAction(event: AdaptedEvent): void {
112
+ private newPointerAction(): void {
106
113
  if (this.currentState === State.UNDETERMINED) {
107
- this.startFling(event);
114
+ this.startFling();
108
115
  }
109
116
 
110
117
  if (this.currentState !== State.BEGAN) {
111
118
  return;
112
119
  }
113
120
 
114
- this.tryEndFling(event);
121
+ this.tryEndFling();
115
122
 
116
123
  if (
117
124
  this.tracker.getTrackedPointersCount() >
@@ -128,7 +135,7 @@ export default class FlingGestureHandler extends GestureHandler {
128
135
  return;
129
136
  }
130
137
 
131
- this.tryEndFling(event);
138
+ this.tryEndFling();
132
139
 
133
140
  super.onPointerMove(event);
134
141
  }
@@ -136,6 +143,8 @@ export default class FlingGestureHandler extends GestureHandler {
136
143
  protected onPointerUp(event: AdaptedEvent): void {
137
144
  super.onPointerUp(event);
138
145
  this.onUp(event);
146
+
147
+ this.keyPointer = NaN;
139
148
  }
140
149
 
141
150
  protected onPointerRemove(event: AdaptedEvent): void {
@@ -148,7 +157,7 @@ export default class FlingGestureHandler extends GestureHandler {
148
157
  if (this.currentState !== State.BEGAN) {
149
158
  return;
150
159
  }
151
- this.endFling(event);
160
+ this.endFling();
152
161
  }
153
162
 
154
163
  protected onPointerCancel(event: AdaptedEvent): void {
@@ -121,19 +121,17 @@ export default abstract class GestureHandler {
121
121
  return;
122
122
  }
123
123
 
124
+ const oldState = this.currentState;
125
+ this.currentState = newState;
126
+
124
127
  if (
125
128
  this.tracker.getTrackedPointersCount() > 0 &&
126
129
  this.config.needsPointerData &&
127
- (newState === State.END ||
128
- newState === State.CANCELLED ||
129
- newState === State.FAILED)
130
+ this.isFinished()
130
131
  ) {
131
132
  this.cancelTouches();
132
133
  }
133
134
 
134
- const oldState = this.currentState;
135
- this.currentState = newState;
136
-
137
135
  GestureHandlerOrchestrator.getInstance().onHandlerStateChange(
138
136
  this,
139
137
  newState,
@@ -775,6 +773,14 @@ export default abstract class GestureHandler {
775
773
  return this.enabled;
776
774
  }
777
775
 
776
+ private isFinished(): boolean {
777
+ return (
778
+ this.currentState === State.END ||
779
+ this.currentState === State.FAILED ||
780
+ this.currentState === State.CANCELLED
781
+ );
782
+ }
783
+
778
784
  protected setShouldCancelWhenOutside(shouldCancel: boolean) {
779
785
  this.shouldCancellWhenOutside = shouldCancel;
780
786
  }
@@ -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() {
@@ -29,11 +29,8 @@ export default class NativeViewGestureHandler extends GestureHandler {
29
29
  this.buttonRole = true;
30
30
  } else {
31
31
  this.buttonRole = false;
32
- }
33
-
34
- if (this.view.tagName.toLowerCase() === 'input') {
35
- //Enables text input on Safari
36
32
  this.view.style['webkitUserSelect'] = 'auto';
33
+ this.view.style['userSelect'] = 'auto';
37
34
  }
38
35
  }
39
36
 
@@ -98,8 +98,8 @@ export default class PanGestureHandler extends GestureHandler {
98
98
  this.activateAfterLongPress = this.config.activateAfterLongPress;
99
99
  }
100
100
 
101
- if (this.config.shouldCancelWhenOutside) {
102
- this.setShouldCancelWhenOutside(false);
101
+ if (this.config.shouldCancelWhenOutside !== undefined) {
102
+ this.setShouldCancelWhenOutside(this.config.shouldCancelWhenOutside);
103
103
  }
104
104
 
105
105
  if (this.config.activeOffsetXStart !== undefined) {
@@ -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>