UNPKG

3.78 kBPlain TextView Raw
1// @ts-ignore
2import { Touchable, GestureResponderEvent } from 'react-native';
3const PRESS_RETENTION_OFFSET = { top: 20, left: 20, right: 20, bottom: 30 };
4// @ts-ignore
5const { Mixin } = Touchable;
6const {
7 touchableHandleStartShouldSetResponder,
8 touchableHandleResponderTerminationRequest,
9 touchableHandleResponderGrant,
10 touchableHandleResponderMove,
11 touchableHandleResponderRelease,
12 touchableHandleResponderTerminate,
13 touchableGetInitialState,
14} = Mixin;
15
16const SvgTouchableMixin = {
17 ...Mixin,
18
19 touchableHandleStartShouldSetResponder(e: GestureResponderEvent) {
20 const { onStartShouldSetResponder } = this.props;
21 if (onStartShouldSetResponder) {
22 return onStartShouldSetResponder(e);
23 } else {
24 return touchableHandleStartShouldSetResponder.call(this, e);
25 }
26 },
27
28 touchableHandleResponderTerminationRequest(e: GestureResponderEvent) {
29 const { onResponderTerminationRequest } = this.props;
30 if (onResponderTerminationRequest) {
31 return onResponderTerminationRequest(e);
32 } else {
33 return touchableHandleResponderTerminationRequest.call(this, e);
34 }
35 },
36
37 touchableHandleResponderGrant(e: GestureResponderEvent) {
38 const { onResponderGrant } = this.props;
39 if (onResponderGrant) {
40 return onResponderGrant(e);
41 } else {
42 return touchableHandleResponderGrant.call(this, e);
43 }
44 },
45
46 touchableHandleResponderMove(e: GestureResponderEvent) {
47 const { onResponderMove } = this.props;
48 if (onResponderMove) {
49 return onResponderMove(e);
50 } else {
51 return touchableHandleResponderMove.call(this, e);
52 }
53 },
54
55 touchableHandleResponderRelease(e: GestureResponderEvent) {
56 const { onResponderRelease } = this.props;
57 if (onResponderRelease) {
58 return onResponderRelease(e);
59 } else {
60 return touchableHandleResponderRelease.call(this, e);
61 }
62 },
63
64 touchableHandleResponderTerminate(e: GestureResponderEvent) {
65 const { onResponderTerminate } = this.props;
66 if (onResponderTerminate) {
67 return onResponderTerminate(e);
68 } else {
69 return touchableHandleResponderTerminate.call(this, e);
70 }
71 },
72
73 touchableHandlePress(e: GestureResponderEvent) {
74 const { onPress } = this.props;
75 onPress && onPress(e);
76 },
77
78 touchableHandleActivePressIn(e: GestureResponderEvent) {
79 const { onPressIn } = this.props;
80 onPressIn && onPressIn(e);
81 },
82
83 touchableHandleActivePressOut(e: GestureResponderEvent) {
84 const { onPressOut } = this.props;
85 onPressOut && onPressOut(e);
86 },
87
88 touchableHandleLongPress(e: GestureResponderEvent) {
89 const { onLongPress } = this.props;
90 onLongPress && onLongPress(e);
91 },
92
93 touchableGetPressRectOffset() {
94 const { pressRetentionOffset } = this.props;
95 return pressRetentionOffset || PRESS_RETENTION_OFFSET;
96 },
97
98 touchableGetHitSlop() {
99 const { hitSlop } = this.props;
100 return hitSlop;
101 },
102
103 touchableGetHighlightDelayMS() {
104 const { delayPressIn } = this.props;
105 return delayPressIn || 0;
106 },
107
108 touchableGetLongPressDelayMS() {
109 const { delayLongPress } = this.props;
110 return delayLongPress === 0 ? 0 : delayLongPress || 500;
111 },
112
113 touchableGetPressOutDelayMS() {
114 const { delayPressOut } = this.props;
115 return delayPressOut || 0;
116 },
117};
118
119const touchKeys = Object.keys(SvgTouchableMixin);
120const touchVals = touchKeys.map(key => SvgTouchableMixin[key]);
121const numTouchKeys = touchKeys.length;
122
123export default (target: { [x: string]: unknown; state: unknown }) => {
124 for (let i = 0; i < numTouchKeys; i++) {
125 const key = touchKeys[i];
126 const val = touchVals[i];
127 if (typeof val === 'function') {
128 target[key] = val.bind(target);
129 } else {
130 target[key] = val;
131 }
132 }
133 target.state = touchableGetInitialState();
134};