react-native-gesture-handler 1.2.1 → 1.4.1
Sign up to get free protection for your applications and to get access to all the features.
- package/DrawerLayout.js +5 -4
- package/GestureButtons.js +166 -0
- package/GestureComponents.js +63 -0
- package/GestureComponents.web.js +35 -0
- package/GestureHandler.js +10 -621
- package/GestureHandlerButton.web.js +4 -12
- package/GestureHandlerPropTypes.js +45 -0
- package/Gestures.js +278 -0
- package/NativeViewGestureHandler.js +14 -0
- package/PlatformConstants.web.js +3 -1
- package/RNGestureHandler.podspec +1 -1
- package/RNGestureHandlerModule.web.js +49 -0
- package/State.js +12 -1
- package/Swipeable.js +6 -11
- package/android/build.gradle +3 -7
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.java +1 -1
- package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.java +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.java +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.java +2 -2
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.java +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerPackage.java +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.java +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootInterface.java +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.java +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.java +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.java +2 -2
- package/createHandler.js +46 -20
- package/createNativeWrapper.js +86 -0
- package/ios/RNGestureHandler.xcodeproj/project.pbxproj +4 -4
- package/package.json +20 -17
- package/react-native-gesture-handler.d.ts +25 -3
- package/touchables/GenericTouchable.js +3 -1
- package/touchables/TouchableHighlight.js +1 -3
- package/touchables/TouchableOpacity.web.js +2 -0
- package/touchables/TouchableWithoutFeedback.js +4 -2
- package/web/DiscreteGestureHandler.js +66 -0
- package/web/DraggingGestureHandler.js +22 -0
- package/web/Errors.js +5 -0
- package/web/FlingGestureHandler.js +137 -0
- package/web/GestureHandler.js +442 -0
- package/web/IndiscreteGestureHandler.js +33 -0
- package/web/LongPressGestureHandler.js +50 -0
- package/web/NativeViewGestureHandler.js +38 -0
- package/web/NodeManager.js +24 -0
- package/web/PanGestureHandler.js +213 -0
- package/web/PinchGestureHandler.js +24 -0
- package/web/PressGestureHandler.js +147 -0
- package/web/RotationGestureHandler.js +24 -0
- package/web/TapGestureHandler.js +160 -0
- package/web/constants.js +48 -0
- package/web/utils.js +14 -0
- package/Directions.web.js +0 -6
- package/Swipeable.web.js +0 -4
- package/createHandler.web.js +0 -205
@@ -0,0 +1,86 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
|
3
|
+
import NativeViewGestureHandler from './NativeViewGestureHandler';
|
4
|
+
|
5
|
+
const NATIVE_WRAPPER_BIND_BLACKLIST = new Set(['replaceState', 'isMounted']);
|
6
|
+
|
7
|
+
/*
|
8
|
+
* This array should consist of:
|
9
|
+
* - All keys in propTypes from NativeGestureHandler
|
10
|
+
* (and all keys in GestureHandlerPropTypes)
|
11
|
+
* - 'onGestureHandlerEvent'
|
12
|
+
* - 'onGestureHandlerStateChange'
|
13
|
+
*/
|
14
|
+
const NATIVE_WRAPPER_PROPS_FILTER = [
|
15
|
+
'id',
|
16
|
+
'minPointers',
|
17
|
+
'enabled',
|
18
|
+
'waitFor',
|
19
|
+
'simultaneousHandlers',
|
20
|
+
'shouldCancelWhenOutside',
|
21
|
+
'hitSlop',
|
22
|
+
'onGestureEvent',
|
23
|
+
'onHandlerStateChange',
|
24
|
+
'onBegan',
|
25
|
+
'onFailed',
|
26
|
+
'onCancelled',
|
27
|
+
'onActivated',
|
28
|
+
'onEnded',
|
29
|
+
'shouldActivateOnStart',
|
30
|
+
'disallowInterruption',
|
31
|
+
'onGestureHandlerEvent',
|
32
|
+
'onGestureHandlerStateChange',
|
33
|
+
];
|
34
|
+
|
35
|
+
export default function createNativeWrapper(Component, config = {}) {
|
36
|
+
class ComponentWrapper extends React.Component {
|
37
|
+
static propTypes = {
|
38
|
+
...Component.propTypes,
|
39
|
+
};
|
40
|
+
|
41
|
+
static displayName = Component.displayName || 'ComponentWrapper';
|
42
|
+
|
43
|
+
_refHandler = node => {
|
44
|
+
// bind native component's methods
|
45
|
+
let source = node;
|
46
|
+
while (source != null) {
|
47
|
+
for (let methodName of Object.getOwnPropertyNames(source)) {
|
48
|
+
if (
|
49
|
+
!methodName.startsWith('_') && // private methods
|
50
|
+
!methodName.startsWith('component') && // lifecycle methods
|
51
|
+
!NATIVE_WRAPPER_BIND_BLACKLIST.has(methodName) && // other
|
52
|
+
typeof source[methodName] === 'function' &&
|
53
|
+
this[methodName] === undefined
|
54
|
+
) {
|
55
|
+
if (source[methodName].prototype) {
|
56
|
+
// determine if it's not bound already
|
57
|
+
this[methodName] = source[methodName].bind(node);
|
58
|
+
} else {
|
59
|
+
this[methodName] = source[methodName];
|
60
|
+
}
|
61
|
+
}
|
62
|
+
}
|
63
|
+
source = Object.getPrototypeOf(source);
|
64
|
+
}
|
65
|
+
};
|
66
|
+
|
67
|
+
render() {
|
68
|
+
// filter out props that should be passed to gesture handler wrapper
|
69
|
+
const gestureHandlerProps = Object.keys(this.props).reduce(
|
70
|
+
(props, key) => {
|
71
|
+
if (NATIVE_WRAPPER_PROPS_FILTER.indexOf(key) !== -1) {
|
72
|
+
props[key] = this.props[key];
|
73
|
+
}
|
74
|
+
return props;
|
75
|
+
},
|
76
|
+
{ ...config } // watch out not to modify config
|
77
|
+
);
|
78
|
+
return (
|
79
|
+
<NativeViewGestureHandler {...gestureHandlerProps}>
|
80
|
+
<Component {...this.props} ref={this._refHandler} />
|
81
|
+
</NativeViewGestureHandler>
|
82
|
+
);
|
83
|
+
}
|
84
|
+
}
|
85
|
+
return ComponentWrapper;
|
86
|
+
}
|
@@ -424,7 +424,7 @@
|
|
424
424
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
425
425
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
426
426
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
427
|
-
IPHONEOS_DEPLOYMENT_TARGET =
|
427
|
+
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
428
428
|
MTL_ENABLE_DEBUG_INFO = YES;
|
429
429
|
ONLY_ACTIVE_ARCH = YES;
|
430
430
|
SDKROOT = iphoneos;
|
@@ -458,7 +458,7 @@
|
|
458
458
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
459
459
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
460
460
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
461
|
-
IPHONEOS_DEPLOYMENT_TARGET =
|
461
|
+
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
462
462
|
MTL_ENABLE_DEBUG_INFO = NO;
|
463
463
|
SDKROOT = iphoneos;
|
464
464
|
VALIDATE_PRODUCT = YES;
|
@@ -524,7 +524,7 @@
|
|
524
524
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
525
525
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
526
526
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
527
|
-
IPHONEOS_DEPLOYMENT_TARGET =
|
527
|
+
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
528
528
|
MTL_ENABLE_DEBUG_INFO = NO;
|
529
529
|
SDKROOT = iphoneos;
|
530
530
|
VALIDATE_PRODUCT = YES;
|
@@ -558,7 +558,7 @@
|
|
558
558
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
559
559
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
560
560
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
561
|
-
IPHONEOS_DEPLOYMENT_TARGET =
|
561
|
+
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
562
562
|
MTL_ENABLE_DEBUG_INFO = NO;
|
563
563
|
SDKROOT = iphoneos;
|
564
564
|
VALIDATE_PRODUCT = YES;
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "react-native-gesture-handler",
|
3
|
-
"version": "1.
|
3
|
+
"version": "1.4.1",
|
4
4
|
"description": "Experimental implementation of a new declarative API for gesture handling in react-native",
|
5
5
|
"scripts": {
|
6
6
|
"start": "node node_modules/react-native/local-cli/cli.js start",
|
@@ -16,14 +16,20 @@
|
|
16
16
|
"android/lib/build.gradle",
|
17
17
|
"android/lib/src/main/java/",
|
18
18
|
"ios/",
|
19
|
+
"web/",
|
19
20
|
"__mocks__/",
|
20
21
|
"touchables/**/*.js",
|
21
22
|
"createHandler.js",
|
22
|
-
"createHandler.web.js",
|
23
23
|
"Directions.js",
|
24
|
-
"Directions.web.js",
|
25
24
|
"DrawerLayout.js",
|
26
25
|
"GestureHandler.js",
|
26
|
+
"Gestures.js",
|
27
|
+
"GestureButtons.js",
|
28
|
+
"GestureComponents.js",
|
29
|
+
"GestureComponents.web.js",
|
30
|
+
"createNativeWrapper.js",
|
31
|
+
"GestureHandlerPropTypes.js",
|
32
|
+
"NativeViewGestureHandler.js",
|
27
33
|
"GestureHandlerButton.js",
|
28
34
|
"GestureHandlerButton.web.js",
|
29
35
|
"gestureHandlerRootHOC.android.js",
|
@@ -35,11 +41,11 @@
|
|
35
41
|
"react-native-gesture-handler.d.ts",
|
36
42
|
"README.md",
|
37
43
|
"RNGestureHandlerModule.js",
|
44
|
+
"RNGestureHandlerModule.web.js",
|
38
45
|
"jestSetup.js",
|
39
46
|
"RNGestureHandler.podspec",
|
40
47
|
"State.js",
|
41
|
-
"Swipeable.js"
|
42
|
-
"Swipeable.web.js"
|
48
|
+
"Swipeable.js"
|
43
49
|
],
|
44
50
|
"repository": {
|
45
51
|
"type": "git",
|
@@ -56,31 +62,28 @@
|
|
56
62
|
},
|
57
63
|
"homepage": "https://github.com/kmagiera/react-native-gesture-handler#readme",
|
58
64
|
"dependencies": {
|
65
|
+
"hammerjs": "^2.0.8",
|
59
66
|
"hoist-non-react-statics": "^2.3.1",
|
60
|
-
"invariant": "^2.2.
|
61
|
-
"prop-types": "^15.
|
62
|
-
},
|
63
|
-
"peerDependencies": {
|
64
|
-
"react": ">= 16.3.2",
|
65
|
-
"react-native": ">= 0.58.2"
|
67
|
+
"invariant": "^2.2.4",
|
68
|
+
"prop-types": "^15.7.2"
|
66
69
|
},
|
67
70
|
"jest": {
|
68
71
|
"preset": "jest-react-native"
|
69
72
|
},
|
70
73
|
"devDependencies": {
|
71
|
-
"@types/react": "^16.
|
72
|
-
"@types/react-native": "^0.
|
74
|
+
"@types/react": "^16.8.6",
|
75
|
+
"@types/react-native": "^0.60.0",
|
73
76
|
"babel-jest": "16.0.0",
|
74
77
|
"babel-preset-react-native": "1.9.0",
|
75
78
|
"flow-bin": "^0.56.0",
|
76
79
|
"husky": "^0.14.3",
|
77
|
-
"jest": "
|
80
|
+
"jest": "^24.7.1",
|
78
81
|
"jest-react-native": "16.0.0",
|
79
82
|
"lint-staged": "^8.0.0-beta.1",
|
80
83
|
"prettier": "^1.13.7",
|
81
|
-
"react": "^16.
|
82
|
-
"react-native": "^0.
|
83
|
-
"react-test-renderer": "
|
84
|
+
"react": "^16.8.6",
|
85
|
+
"react-native": "^0.60.0",
|
86
|
+
"react-test-renderer": "16.8.6"
|
84
87
|
},
|
85
88
|
"lint-staged": {
|
86
89
|
"*.js": [
|
@@ -225,6 +225,22 @@ declare module 'react-native-gesture-handler' {
|
|
225
225
|
bottom?: number;
|
226
226
|
vertical?: number;
|
227
227
|
horizontal?: number;
|
228
|
+
}
|
229
|
+
| {
|
230
|
+
width: number;
|
231
|
+
left: number;
|
232
|
+
}
|
233
|
+
| {
|
234
|
+
width: number;
|
235
|
+
right: number;
|
236
|
+
}
|
237
|
+
| {
|
238
|
+
height: number;
|
239
|
+
top: number;
|
240
|
+
}
|
241
|
+
| {
|
242
|
+
height: number;
|
243
|
+
bottom: number;
|
228
244
|
};
|
229
245
|
}
|
230
246
|
|
@@ -362,6 +378,7 @@ declare module 'react-native-gesture-handler' {
|
|
362
378
|
onPress?: (pointerInside: boolean) => void;
|
363
379
|
onActiveStateChange?: (active: boolean) => void;
|
364
380
|
style?: StyleProp<ViewStyle>;
|
381
|
+
rippleColor?: string;
|
365
382
|
}
|
366
383
|
|
367
384
|
export interface RectButtonProperties extends BaseButtonProperties {
|
@@ -426,8 +443,8 @@ declare module 'react-native-gesture-handler' {
|
|
426
443
|
|
427
444
|
/* OTHER */
|
428
445
|
|
429
|
-
export class FlatList extends React.Component<
|
430
|
-
NativeViewGestureHandlerProperties & FlatListProperties<
|
446
|
+
export class FlatList<ItemT> extends React.Component<
|
447
|
+
NativeViewGestureHandlerProperties & FlatListProperties<ItemT>
|
431
448
|
> {}
|
432
449
|
|
433
450
|
export function gestureHandlerRootHOC(
|
@@ -442,7 +459,7 @@ declare module 'react-native-gesture-handler' {
|
|
442
459
|
}
|
443
460
|
|
444
461
|
declare module 'react-native-gesture-handler/Swipeable' {
|
445
|
-
import { Animated } from 'react-native';
|
462
|
+
import { Animated, StyleProp, ViewStyle } from 'react-native';
|
446
463
|
|
447
464
|
interface SwipeableProperties {
|
448
465
|
friction?: number;
|
@@ -468,6 +485,8 @@ declare module 'react-native-gesture-handler/Swipeable' {
|
|
468
485
|
dragAnimatedValue: Animated.AnimatedInterpolation
|
469
486
|
) => React.ReactNode;
|
470
487
|
useNativeAnimations?: boolean;
|
488
|
+
containerStyle?: StyleProp<ViewStyle>;
|
489
|
+
childrenContainerStyle?: StyleProp<ViewStyle>;
|
471
490
|
}
|
472
491
|
|
473
492
|
export default class Swipeable extends React.Component<SwipeableProperties> {
|
@@ -486,6 +505,8 @@ declare module 'react-native-gesture-handler/DrawerLayout' {
|
|
486
505
|
|
487
506
|
export type DrawerType = 'front' | 'back' | 'slide';
|
488
507
|
|
508
|
+
export type DrawerLockMode = 'unlocked' | 'locked-closed' | 'locked-open';
|
509
|
+
|
489
510
|
export type DrawerKeyboardDismissMode = 'none' | 'on-drag';
|
490
511
|
|
491
512
|
export interface DrawerLayoutProperties {
|
@@ -495,6 +516,7 @@ declare module 'react-native-gesture-handler/DrawerLayout' {
|
|
495
516
|
drawerPosition?: DrawerPosition;
|
496
517
|
drawerWidth?: number;
|
497
518
|
drawerBackgroundColor?: string;
|
519
|
+
drawerLockMode?: DrawerLockMode;
|
498
520
|
keyboardDismissMode?: DrawerKeyboardDismissMode;
|
499
521
|
onDrawerClose?: () => void;
|
500
522
|
onDrawerOpen?: () => void;
|
@@ -256,7 +256,9 @@ export default class GenericTouchable extends Component {
|
|
256
256
|
|
257
257
|
return (
|
258
258
|
<BaseButton
|
259
|
-
onHandlerStateChange={
|
259
|
+
onHandlerStateChange={
|
260
|
+
this.props.disabled ? null : this.onHandlerStateChange
|
261
|
+
}
|
260
262
|
onGestureEvent={this.onGestureEvent}
|
261
263
|
hitSlop={this.props.hitSlop}
|
262
264
|
{...this.props.extraButtonProps}>
|
@@ -1,7 +1,9 @@
|
|
1
|
-
import GenericTouchable from './GenericTouchable';
|
2
1
|
import React from 'react';
|
2
|
+
import GenericTouchable from './GenericTouchable';
|
3
3
|
|
4
|
-
const TouchableWithoutFeedback = props =>
|
4
|
+
const TouchableWithoutFeedback = React.forwardRef((props, ref) => (
|
5
|
+
<GenericTouchable ref={ref} {...props} />
|
6
|
+
));
|
5
7
|
|
6
8
|
TouchableWithoutFeedback.defaultProps = GenericTouchable.defaultProps;
|
7
9
|
|
@@ -0,0 +1,66 @@
|
|
1
|
+
import GestureHandler from './GestureHandler';
|
2
|
+
import { TEST_MAX_IF_NOT_NAN } from './utils';
|
3
|
+
|
4
|
+
class DiscreteGestureHandler extends GestureHandler {
|
5
|
+
get isDiscrete() {
|
6
|
+
return true;
|
7
|
+
}
|
8
|
+
|
9
|
+
get shouldEnableGestureOnSetup() {
|
10
|
+
return true;
|
11
|
+
}
|
12
|
+
|
13
|
+
shouldFailUnderCustomCriteria(
|
14
|
+
{ x, y, deltaX, deltaY },
|
15
|
+
{ maxDeltaX, maxDeltaY, maxDistSq, shouldCancelWhenOutside }
|
16
|
+
) {
|
17
|
+
if (shouldCancelWhenOutside) {
|
18
|
+
if (!this.isPointInView({ x, y })) {
|
19
|
+
return true;
|
20
|
+
}
|
21
|
+
}
|
22
|
+
return (
|
23
|
+
TEST_MAX_IF_NOT_NAN(Math.abs(deltaX), maxDeltaX) ||
|
24
|
+
TEST_MAX_IF_NOT_NAN(Math.abs(deltaY), maxDeltaY) ||
|
25
|
+
TEST_MAX_IF_NOT_NAN(Math.abs(deltaY * deltaY + deltaX * deltaX), maxDistSq)
|
26
|
+
);
|
27
|
+
}
|
28
|
+
|
29
|
+
transformNativeEvent({ x, y }) {
|
30
|
+
return {
|
31
|
+
absoluteX: x,
|
32
|
+
absoluteY: y,
|
33
|
+
x,
|
34
|
+
y,
|
35
|
+
};
|
36
|
+
}
|
37
|
+
|
38
|
+
isGestureEnabledForEvent(
|
39
|
+
{ minPointers, maxPointers, maxDist, maxDeltaX, maxDeltaY, maxDistSq, shouldCancelWhenOutside },
|
40
|
+
recognizer,
|
41
|
+
{ maxPointers: pointerLength, center, deltaX, deltaY, ...props }
|
42
|
+
) {
|
43
|
+
const validPointerCount = pointerLength >= minPointers && pointerLength <= maxPointers;
|
44
|
+
|
45
|
+
if (
|
46
|
+
this.shouldFailUnderCustomCriteria(
|
47
|
+
{ ...center, deltaX, deltaY },
|
48
|
+
{
|
49
|
+
maxDeltaX,
|
50
|
+
maxDeltaY,
|
51
|
+
maxDistSq,
|
52
|
+
shouldCancelWhenOutside,
|
53
|
+
}
|
54
|
+
) ||
|
55
|
+
// A user probably won't land a multi-pointer tap on the first tick (so we cannot just cancel each time)
|
56
|
+
// but if the gesture is running and the user adds or subtracts another pointer then it should fail.
|
57
|
+
(!validPointerCount && this.isGestureRunning)
|
58
|
+
) {
|
59
|
+
return { failed: true };
|
60
|
+
}
|
61
|
+
|
62
|
+
return { success: validPointerCount };
|
63
|
+
}
|
64
|
+
}
|
65
|
+
|
66
|
+
export default DiscreteGestureHandler;
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import GestureHandler from './GestureHandler';
|
2
|
+
|
3
|
+
class DraggingGestureHandler extends GestureHandler {
|
4
|
+
get shouldEnableGestureOnSetup() {
|
5
|
+
return true;
|
6
|
+
}
|
7
|
+
|
8
|
+
transformNativeEvent({ deltaX, deltaY, velocityX, velocityY, center: { x, y } }) {
|
9
|
+
return {
|
10
|
+
translationX: deltaX - (this.__initialX || 0),
|
11
|
+
translationY: deltaY - (this.__initialY || 0),
|
12
|
+
absoluteX: x,
|
13
|
+
absoluteY: y,
|
14
|
+
velocityX,
|
15
|
+
velocityY,
|
16
|
+
x,
|
17
|
+
y,
|
18
|
+
};
|
19
|
+
}
|
20
|
+
}
|
21
|
+
|
22
|
+
export default DraggingGestureHandler;
|
package/web/Errors.js
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
import Hammer from 'hammerjs';
|
2
|
+
|
3
|
+
import { Direction } from './constants';
|
4
|
+
import { GesturePropError } from './Errors';
|
5
|
+
import DraggingGestureHandler from './DraggingGestureHandler';
|
6
|
+
import { isnan } from './utils';
|
7
|
+
|
8
|
+
class FlingGestureHandler extends DraggingGestureHandler {
|
9
|
+
get name() {
|
10
|
+
return 'swipe';
|
11
|
+
}
|
12
|
+
|
13
|
+
get NativeGestureClass() {
|
14
|
+
return Hammer.Swipe;
|
15
|
+
}
|
16
|
+
|
17
|
+
onGestureActivated(event) {
|
18
|
+
this.sendEvent({
|
19
|
+
...event,
|
20
|
+
eventType: Hammer.INPUT_MOVE,
|
21
|
+
isFinal: false,
|
22
|
+
isFirst: true,
|
23
|
+
});
|
24
|
+
this.isGestureRunning = false;
|
25
|
+
this.hasGestureFailed = false;
|
26
|
+
this.sendEvent({
|
27
|
+
...event,
|
28
|
+
eventType: Hammer.INPUT_END,
|
29
|
+
isFinal: true,
|
30
|
+
});
|
31
|
+
}
|
32
|
+
|
33
|
+
onRawEvent(ev) {
|
34
|
+
super.onRawEvent(ev);
|
35
|
+
if (this.hasGestureFailed) {
|
36
|
+
return;
|
37
|
+
}
|
38
|
+
// Hammer doesn't send a `cancel` event for taps.
|
39
|
+
// Manually fail the event.
|
40
|
+
if (ev.isFinal) {
|
41
|
+
setTimeout(() => {
|
42
|
+
if (this.isGestureRunning) {
|
43
|
+
this.cancelEvent(ev);
|
44
|
+
}
|
45
|
+
});
|
46
|
+
} else if (!this.hasGestureFailed && !this.isGestureRunning) {
|
47
|
+
// Tap Gesture start event
|
48
|
+
const gesture = this.hammer.get(this.name);
|
49
|
+
if (gesture.options.enable(gesture, ev)) {
|
50
|
+
this.onStart(ev);
|
51
|
+
this.sendEvent(ev);
|
52
|
+
}
|
53
|
+
}
|
54
|
+
}
|
55
|
+
|
56
|
+
getHammerConfig() {
|
57
|
+
return {
|
58
|
+
pointers: this.config.numberOfPointers,
|
59
|
+
direction: this.getDirection(),
|
60
|
+
};
|
61
|
+
}
|
62
|
+
|
63
|
+
getTargetDirections(direction) {
|
64
|
+
const directions = [];
|
65
|
+
if (direction & Direction.RIGHT) {
|
66
|
+
directions.push(Hammer.DIRECTION_RIGHT);
|
67
|
+
}
|
68
|
+
if (direction & Direction.LEFT) {
|
69
|
+
directions.push(Hammer.DIRECTION_LEFT);
|
70
|
+
}
|
71
|
+
if (direction & Direction.UP) {
|
72
|
+
directions.push(Hammer.DIRECTION_UP);
|
73
|
+
}
|
74
|
+
if (direction & Direction.DOWN) {
|
75
|
+
directions.push(Hammer.DIRECTION_DOWN);
|
76
|
+
}
|
77
|
+
// const hammerDirection = directions.reduce((a, b) => a | b, 0);
|
78
|
+
return directions;
|
79
|
+
}
|
80
|
+
|
81
|
+
getDirection() {
|
82
|
+
const { direction } = this.getConfig();
|
83
|
+
|
84
|
+
let directions = [];
|
85
|
+
if (direction & Direction.RIGHT) {
|
86
|
+
directions.push(Hammer.DIRECTION_HORIZONTAL);
|
87
|
+
}
|
88
|
+
if (direction & Direction.LEFT) {
|
89
|
+
directions.push(Hammer.DIRECTION_HORIZONTAL);
|
90
|
+
}
|
91
|
+
if (direction & Direction.UP) {
|
92
|
+
directions.push(Hammer.DIRECTION_VERTICAL);
|
93
|
+
}
|
94
|
+
if (direction & Direction.DOWN) {
|
95
|
+
directions.push(Hammer.DIRECTION_VERTICAL);
|
96
|
+
}
|
97
|
+
directions = [...new Set(directions)];
|
98
|
+
|
99
|
+
if (directions.length === 0) return Hammer.DIRECTION_NONE;
|
100
|
+
if (directions.length === 1) return directions[0];
|
101
|
+
return Hammer.DIRECTION_ALL;
|
102
|
+
}
|
103
|
+
|
104
|
+
isGestureEnabledForEvent(
|
105
|
+
{
|
106
|
+
minPointers,
|
107
|
+
maxPointers,
|
108
|
+
numberOfPointers,
|
109
|
+
maxDist,
|
110
|
+
maxDeltaX,
|
111
|
+
maxDeltaY,
|
112
|
+
maxDistSq,
|
113
|
+
shouldCancelWhenOutside,
|
114
|
+
},
|
115
|
+
recognizer,
|
116
|
+
{ maxPointers: pointerLength, deltaX: dx, deltaY: dy, ...props }
|
117
|
+
) {
|
118
|
+
const validPointerCount = pointerLength === numberOfPointers;
|
119
|
+
if (!validPointerCount && this.isGestureRunning) {
|
120
|
+
return { failed: true };
|
121
|
+
}
|
122
|
+
return { success: validPointerCount };
|
123
|
+
}
|
124
|
+
|
125
|
+
updateGestureConfig({ numberOfPointers = 1, direction, ...props }) {
|
126
|
+
if (isnan(direction) || typeof direction !== 'number') {
|
127
|
+
throw new GesturePropError('direction', direction, 'number');
|
128
|
+
}
|
129
|
+
return super.updateGestureConfig({
|
130
|
+
numberOfPointers,
|
131
|
+
direction,
|
132
|
+
...props,
|
133
|
+
});
|
134
|
+
}
|
135
|
+
}
|
136
|
+
|
137
|
+
export default FlingGestureHandler;
|