Skip to content

Commit 234ec68

Browse files
authored
Make handlers respect shouldCancelWhenOutside (#2271)
## Description This PR solves web part of #2265 issue. I've modified `onPointerOut` method to act similar as on android. Right now, if pointer leaves handler and `shouldCancelWhenOutside` is set to `true`, handler goes to `cancel` state if it was `active`, or to `fail`, if it was in `began` This change also affects `ManualGestureHandler`, which now cancels properly. ## Test plan Tested on example app
1 parent 49b14a8 commit 234ec68

8 files changed

+27
-17
lines changed

src/web/handlers/FlingGestureHandler.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@ export default class FlingGestureHandler extends GestureHandler {
3030
public updateGestureConfig({ enabled = true, ...props }: Config): void {
3131
super.updateGestureConfig({ enabled: enabled, ...props });
3232

33-
this.enabled = enabled;
34-
3533
if (this.config.direction) {
3634
this.direction = this.config.direction;
3735
}

src/web/handlers/GestureHandler.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,18 @@ export default abstract class GestureHandler {
322322
}
323323
}
324324
protected onPointerOut(event: AdaptedEvent): void {
325+
if (this.shouldCancellWhenOutside) {
326+
switch (this.currentState) {
327+
case State.ACTIVE:
328+
this.cancel();
329+
break;
330+
case State.BEGAN:
331+
this.fail();
332+
break;
333+
}
334+
return;
335+
}
336+
325337
if (this.config.needsPointerData) {
326338
this.sendTouchEvent(event);
327339
}
@@ -573,6 +585,11 @@ export default abstract class GestureHandler {
573585
public updateGestureConfig({ enabled = true, ...props }: Config): void {
574586
this.config = { enabled: enabled, ...props };
575587
this.enabled = enabled;
588+
589+
if (this.config.shouldCancelWhenOutside !== undefined) {
590+
this.setShouldCancelWhenOutside(this.config.shouldCancelWhenOutside);
591+
}
592+
576593
this.validateHitSlops();
577594

578595
if (this.enabled) {

src/web/handlers/LongPressGestureHandler.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,6 @@ export default class LongPressGestureHandler extends GestureHandler {
4242
public updateGestureConfig({ enabled = true, ...props }: Config): void {
4343
super.updateGestureConfig({ enabled: enabled, ...props });
4444

45-
this.enabled = enabled;
46-
4745
if (this.config.minDurationMs !== undefined) {
4846
this.minDurationMs = this.config.minDurationMs;
4947
}

src/web/handlers/ManualGestureHandler.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
1-
import { AdaptedEvent } from '../interfaces';
1+
import { AdaptedEvent, Config } from '../interfaces';
22
import GestureHandler from './GestureHandler';
33

44
export default class ManualGestureHandler extends GestureHandler {
55
public init(ref: number, propsRef: React.RefObject<unknown>) {
66
super.init(ref, propsRef);
77
}
88

9+
public updateGestureConfig({ enabled = true, ...props }: Config): void {
10+
super.updateGestureConfig({ enabled: enabled, ...props });
11+
}
12+
913
protected onPointerDown(event: AdaptedEvent): void {
1014
this.tracker.addToTracker(event);
1115
super.onPointerDown(event);
@@ -22,6 +26,11 @@ export default class ManualGestureHandler extends GestureHandler {
2226
super.onPointerMove(event);
2327
}
2428

29+
protected onPointerOutOfBounds(event: AdaptedEvent): void {
30+
this.tracker.track(event);
31+
super.onPointerOutOfBounds(event);
32+
}
33+
2534
protected onPointerUp(event: AdaptedEvent): void {
2635
super.onPointerUp(event);
2736
this.tracker.removeFromTracker(event.pointerId);

src/web/handlers/PanGestureHandler.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,6 @@ export default class PanGestureHandler extends GestureHandler {
6565
super.updateGestureConfig({ enabled: enabled, ...props });
6666
this.checkCustomActivationCriteria(this.customActivationProperties);
6767

68-
this.enabled = enabled;
69-
7068
if (this.config.minDist !== undefined) {
7169
this.minDistSq = this.config.minDist * this.config.minDist;
7270
} else if (this.hasCustomActivationCriteria) {
@@ -98,10 +96,6 @@ export default class PanGestureHandler extends GestureHandler {
9896
this.activateAfterLongPress = this.config.activateAfterLongPress;
9997
}
10098

101-
if (this.config.shouldCancelWhenOutside !== undefined) {
102-
this.setShouldCancelWhenOutside(this.config.shouldCancelWhenOutside);
103-
}
104-
10599
if (this.config.activeOffsetXStart !== undefined) {
106100
this.activeOffsetXStart = this.config.activeOffsetXStart;
107101

src/web/handlers/PinchGestureHandler.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,6 @@ export default class PinchGestureHandler extends GestureHandler {
5757

5858
public updateGestureConfig({ enabled = true, ...props }: Config): void {
5959
super.updateGestureConfig({ enabled: enabled, ...props });
60-
61-
this.enabled = enabled;
6260
}
6361

6462
protected transformNativeEvent() {

src/web/handlers/RotationGestureHandler.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,6 @@ export default class RotationGestureHandler extends GestureHandler {
5252

5353
public updateGestureConfig({ enabled = true, ...props }: Config): void {
5454
super.updateGestureConfig({ enabled: enabled, ...props });
55-
56-
this.enabled = enabled;
5755
}
5856

5957
protected transformNativeEvent() {

src/web/handlers/TapGestureHandler.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,6 @@ export default class TapGestureHandler extends GestureHandler {
3939
public updateGestureConfig({ enabled = true, ...props }: Config): void {
4040
super.updateGestureConfig({ enabled: enabled, ...props });
4141

42-
this.enabled = enabled;
43-
4442
if (this.config.numberOfTaps !== undefined) {
4543
this.numberOfTaps = this.config.numberOfTaps;
4644
}

0 commit comments

Comments
 (0)