@react-native-oh-tpl/react-native-gesture-handler 2.12.6-2 → 2.12.9
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.
- package/harmony/gesture_handler/BuildProfile.ets +5 -0
- package/harmony/gesture_handler/build-profile.json5 +13 -2
- package/harmony/gesture_handler/hvigorfile.ts +1 -1
- package/harmony/gesture_handler/index.ets +1 -1
- package/harmony/gesture_handler/oh-package-lock.json5 +17 -0
- package/harmony/gesture_handler/oh-package.json5 +10 -11
- package/harmony/gesture_handler/src/main/cpp/GestureHandlerPackage.cpp +75 -6
- package/harmony/gesture_handler/src/main/cpp/GestureHandlerPackage.h +14 -8
- package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerButtonComponentDescriptor.h +4 -28
- package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerButtonComponentInstance.h +27 -0
- package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerButtonJSIBinder.h +32 -0
- package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerModule.cpp +17 -12
- package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerModule.h +5 -2
- package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerPackage.h +72 -0
- package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerRootViewComponentDescriptor.h +4 -28
- package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerRootViewComponentInstance.h +78 -0
- package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerRootViewJSIBinder.h +25 -0
- package/harmony/gesture_handler/src/main/ets/EventDispatcher.ts +16 -1
- package/harmony/gesture_handler/src/main/ets/GestureHandler.ts +2 -2
- package/harmony/gesture_handler/src/main/ets/{GestureHandlerArkUIAdapter.ets → GestureHandlerArkUIAdapter.ts} +2 -1
- package/harmony/gesture_handler/src/main/ets/GestureHandlerPackage.ts +2 -2
- package/harmony/gesture_handler/src/main/ets/OutgoingEvent.ts +5 -5
- package/harmony/gesture_handler/src/main/ets/RNGHLogger.ts +20 -1
- package/harmony/gesture_handler/src/main/ets/{RNGHRootTouchHandler.ets → RNGHRootTouchHandlerArkTS.ts} +5 -3
- package/harmony/gesture_handler/src/main/ets/RNGHRootTouchHandlerCAPI.ts +87 -0
- package/harmony/gesture_handler/src/main/ets/RNGestureHandlerButton.ets +4 -3
- package/harmony/gesture_handler/src/main/ets/RNGestureHandlerModule.ts +65 -7
- package/harmony/gesture_handler/src/main/ets/RNGestureHandlerRootView.ets +7 -11
- package/harmony/gesture_handler/src/main/ets/RNOHScrollLocker.ts +17 -5
- package/harmony/gesture_handler/src/main/ets/View.ts +1 -1
- package/harmony/gesture_handler/src/main/ets/ViewRegistry.ts +1 -1
- package/harmony/gesture_handler/src/main/ets/namespace/RNGestureHandlerButton.ts +140 -0
- package/harmony/gesture_handler/src/main/ets/namespace/RNGestureHandlerModule.ts +25 -0
- package/harmony/gesture_handler/src/main/ets/namespace/RNGestureHandlerRootView.ts +101 -0
- package/harmony/gesture_handler/src/main/ets/namespace/ts.ts +3 -0
- package/harmony/gesture_handler/src/main/ets/types.ts +25 -0
- package/harmony/gesture_handler/src/main/module.json5 +6 -6
- package/harmony/gesture_handler/ts.ts +2 -1
- package/harmony/gesture_handler.har +0 -0
- package/lib/commonjs/RNGestureHandlerModule.js +6 -3
- package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
- package/lib/commonjs/components/GestureHandlerRootView.js +5 -13
- package/lib/commonjs/components/GestureHandlerRootView.js.map +1 -1
- package/lib/commonjs/handlers/createHandler.js +31 -28
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/index.js +42 -19
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/specs/NativeRNGestureHandlerModule.js +10 -0
- package/lib/commonjs/specs/NativeRNGestureHandlerModule.js.map +1 -0
- package/lib/commonjs/specs/RNGestureHandlerButtonNativeComponent.js +11 -0
- package/lib/commonjs/specs/RNGestureHandlerButtonNativeComponent.js.map +1 -0
- package/lib/commonjs/specs/RNGestureHandlerRootViewNativeComponent.js +11 -0
- package/lib/commonjs/specs/RNGestureHandlerRootViewNativeComponent.js.map +1 -0
- package/lib/module/RNGestureHandlerModule.js +3 -2
- package/lib/module/RNGestureHandlerModule.js.map +1 -1
- package/lib/module/components/GestureHandlerRootView.js +3 -11
- package/lib/module/components/GestureHandlerRootView.js.map +1 -1
- package/lib/module/handlers/createHandler.js +20 -19
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/index.js +6 -14
- package/lib/module/index.js.map +1 -1
- package/lib/module/specs/NativeRNGestureHandlerModule.js +3 -0
- package/lib/module/specs/NativeRNGestureHandlerModule.js.map +1 -0
- package/lib/module/specs/RNGestureHandlerButtonNativeComponent.js +3 -0
- package/lib/module/specs/RNGestureHandlerButtonNativeComponent.js.map +1 -0
- package/lib/module/specs/RNGestureHandlerRootViewNativeComponent.js +3 -0
- package/lib/module/specs/RNGestureHandlerRootViewNativeComponent.js.map +1 -0
- package/lib/typescript/RNGestureHandlerModule.d.ts +2 -6
- package/lib/typescript/RNGestureHandlerModule.d.ts.map +1 -1
- package/lib/typescript/components/GestureHandlerRootView.d.ts +6 -6
- package/lib/typescript/components/GestureHandlerRootView.d.ts.map +1 -1
- package/lib/typescript/handlers/createHandler.d.ts +11 -11
- package/lib/typescript/handlers/createHandler.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +9 -8
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/specs/NativeRNGestureHandlerModule.d.ts +15 -0
- package/lib/typescript/specs/NativeRNGestureHandlerModule.d.ts.map +1 -0
- package/lib/typescript/specs/RNGestureHandlerButtonNativeComponent.d.ts +15 -0
- package/lib/typescript/specs/RNGestureHandlerButtonNativeComponent.d.ts.map +1 -0
- package/lib/typescript/specs/RNGestureHandlerRootViewNativeComponent.d.ts +7 -0
- package/lib/typescript/specs/RNGestureHandlerRootViewNativeComponent.d.ts.map +1 -0
- package/package.json +9 -13
- package/src/RNGestureHandlerModule.ts +3 -4
- package/src/components/GestureHandlerRootView.tsx +4 -15
- package/src/handlers/createHandler.tsx +4 -5
- package/src/index.ts +13 -13
- package/src/specs/NativeRNGestureHandlerModule.ts +26 -0
- package/src/specs/RNGestureHandlerButtonNativeComponent.ts +18 -0
- package/src/specs/RNGestureHandlerRootViewNativeComponent.ts +6 -0
- package/README.md +0 -1
- package/harmony/gesture_handler/LICENSE +0 -21
- package/harmony/gesture_handler/OAT.xml +0 -44
- package/harmony/gesture_handler/README.OpenSource +0 -11
- package/harmony/gesture_handler/README.md +0 -1
- package/lib/commonjs/components/GestureButtons.js +0 -186
- package/lib/commonjs/components/GestureButtons.js.map +0 -1
- package/lib/commonjs/components/GestureHandlerButton.js +0 -9
- package/lib/commonjs/components/GestureHandlerButton.js.map +0 -1
- package/lib/commonjs/components/RNGestureHandlerButton.js +0 -23
- package/lib/commonjs/components/RNGestureHandlerButton.js.map +0 -1
- package/lib/commonjs/components/touchables/GenericTouchable.js +0 -247
- package/lib/commonjs/components/touchables/GenericTouchable.js.map +0 -1
- package/lib/commonjs/components/touchables/TouchableOpacity.js +0 -58
- package/lib/commonjs/components/touchables/TouchableOpacity.js.map +0 -1
- package/lib/commonjs/components/touchables/TouchableWithoutFeedback.js +0 -18
- package/lib/commonjs/components/touchables/TouchableWithoutFeedback.js.map +0 -1
- package/lib/commonjs/components/touchables/index.js +0 -21
- package/lib/commonjs/components/touchables/index.js.map +0 -1
- package/lib/commonjs/handlers/NativeViewGestureHandler.js +0 -19
- package/lib/commonjs/handlers/NativeViewGestureHandler.js.map +0 -1
- package/lib/commonjs/handlers/PanGestureHandler.js +0 -103
- package/lib/commonjs/handlers/PanGestureHandler.js.map +0 -1
- package/lib/commonjs/handlers/TapGestureHandler.js +0 -22
- package/lib/commonjs/handlers/TapGestureHandler.js.map +0 -1
- package/lib/commonjs/handlers/createNativeWrapper.js +0 -64
- package/lib/commonjs/handlers/createNativeWrapper.js.map +0 -1
- package/lib/commonjs/handlers/gestureHandlerCommon.js +0 -22
- package/lib/commonjs/handlers/gestureHandlerCommon.js.map +0 -1
- package/lib/commonjs/handlers/gestures/GestureDetector.js +0 -554
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +0 -1
- package/lib/commonjs/init.js +0 -24
- package/lib/commonjs/init.js.map +0 -1
- package/lib/module/components/GestureButtons.js +0 -168
- package/lib/module/components/GestureButtons.js.map +0 -1
- package/lib/module/components/GestureHandlerButton.js +0 -3
- package/lib/module/components/GestureHandlerButton.js.map +0 -1
- package/lib/module/components/RNGestureHandlerButton.js +0 -17
- package/lib/module/components/RNGestureHandlerButton.js.map +0 -1
- package/lib/module/components/touchables/GenericTouchable.js +0 -238
- package/lib/module/components/touchables/GenericTouchable.js.map +0 -1
- package/lib/module/components/touchables/TouchableOpacity.js +0 -49
- package/lib/module/components/touchables/TouchableOpacity.js.map +0 -1
- package/lib/module/components/touchables/TouchableWithoutFeedback.js +0 -9
- package/lib/module/components/touchables/TouchableWithoutFeedback.js.map +0 -1
- package/lib/module/components/touchables/index.js +0 -8
- package/lib/module/components/touchables/index.js.map +0 -1
- package/lib/module/handlers/NativeViewGestureHandler.js +0 -12
- package/lib/module/handlers/NativeViewGestureHandler.js.map +0 -1
- package/lib/module/handlers/PanGestureHandler.js +0 -92
- package/lib/module/handlers/PanGestureHandler.js.map +0 -1
- package/lib/module/handlers/TapGestureHandler.js +0 -14
- package/lib/module/handlers/TapGestureHandler.js.map +0 -1
- package/lib/module/handlers/createNativeWrapper.js +0 -57
- package/lib/module/handlers/createNativeWrapper.js.map +0 -1
- package/lib/module/handlers/gestureHandlerCommon.js +0 -15
- package/lib/module/handlers/gestureHandlerCommon.js.map +0 -1
- package/lib/module/handlers/gestures/GestureDetector.js +0 -543
- package/lib/module/handlers/gestures/GestureDetector.js.map +0 -1
- package/lib/module/init.js +0 -17
- package/lib/module/init.js.map +0 -1
- package/lib/typescript/components/GestureButtons.d.ts +0 -122
- package/lib/typescript/components/GestureButtons.d.ts.map +0 -1
- package/lib/typescript/components/GestureHandlerButton.d.ts +0 -5
- package/lib/typescript/components/GestureHandlerButton.d.ts.map +0 -1
- package/lib/typescript/components/RNGestureHandlerButton.d.ts +0 -2
- package/lib/typescript/components/RNGestureHandlerButton.d.ts.map +0 -1
- package/lib/typescript/components/touchables/GenericTouchable.d.ts +0 -68
- package/lib/typescript/components/touchables/GenericTouchable.d.ts.map +0 -1
- package/lib/typescript/components/touchables/TouchableOpacity.d.ts +0 -26
- package/lib/typescript/components/touchables/TouchableOpacity.d.ts.map +0 -1
- package/lib/typescript/components/touchables/TouchableWithoutFeedback.d.ts +0 -8
- package/lib/typescript/components/touchables/TouchableWithoutFeedback.d.ts.map +0 -1
- package/lib/typescript/components/touchables/index.d.ts +0 -4
- package/lib/typescript/components/touchables/index.d.ts.map +0 -1
- package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +0 -29
- package/lib/typescript/handlers/NativeViewGestureHandler.d.ts.map +0 -1
- package/lib/typescript/handlers/PanGestureHandler.d.ts +0 -140
- package/lib/typescript/handlers/PanGestureHandler.d.ts.map +0 -1
- package/lib/typescript/handlers/TapGestureHandler.d.ts +0 -58
- package/lib/typescript/handlers/TapGestureHandler.d.ts.map +0 -1
- package/lib/typescript/handlers/createNativeWrapper.d.ts +0 -4
- package/lib/typescript/handlers/createNativeWrapper.d.ts.map +0 -1
- package/lib/typescript/handlers/gestureHandlerCommon.d.ts +0 -2
- package/lib/typescript/handlers/gestureHandlerCommon.d.ts.map +0 -1
- package/lib/typescript/handlers/gestures/GestureDetector.d.ts +0 -24
- package/lib/typescript/handlers/gestures/GestureDetector.d.ts.map +0 -1
- package/lib/typescript/init.d.ts +0 -3
- package/lib/typescript/init.d.ts.map +0 -1
- package/src/components/GestureButtons.tsx +0 -334
- package/src/components/GestureHandlerButton.tsx +0 -5
- package/src/components/RNGestureHandlerButton.tsx +0 -23
- package/src/components/touchables/GenericTouchable.tsx +0 -301
- package/src/components/touchables/TouchableOpacity.tsx +0 -76
- package/src/components/touchables/TouchableWithoutFeedback.tsx +0 -14
- package/src/components/touchables/index.ts +0 -7
- package/src/handlers/NativeViewGestureHandler.ts +0 -55
- package/src/handlers/PanGestureHandler.ts +0 -327
- package/src/handlers/TapGestureHandler.ts +0 -95
- package/src/handlers/createNativeWrapper.tsx +0 -81
- package/src/handlers/gestureHandlerCommon.ts +0 -15
- package/src/handlers/gestures/GestureDetector.tsx +0 -823
- package/src/init.ts +0 -18
|
@@ -1,334 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import {
|
|
3
|
-
Animated,
|
|
4
|
-
Platform,
|
|
5
|
-
processColor,
|
|
6
|
-
StyleSheet,
|
|
7
|
-
StyleProp,
|
|
8
|
-
ViewStyle,
|
|
9
|
-
} from 'react-native';
|
|
10
|
-
|
|
11
|
-
import createNativeWrapper from '../handlers/createNativeWrapper';
|
|
12
|
-
import GestureHandlerButton from './GestureHandlerButton';
|
|
13
|
-
import { State } from 'react-native-gesture-handler/src/State';
|
|
14
|
-
|
|
15
|
-
import {
|
|
16
|
-
GestureEvent,
|
|
17
|
-
HandlerStateChangeEvent,
|
|
18
|
-
} from 'react-native-gesture-handler/src/handlers/gestureHandlerCommon';
|
|
19
|
-
import {
|
|
20
|
-
NativeViewGestureHandlerPayload,
|
|
21
|
-
NativeViewGestureHandlerProps,
|
|
22
|
-
} from 'react-native-gesture-handler/src/handlers/NativeViewGestureHandler';
|
|
23
|
-
|
|
24
|
-
export interface RawButtonProps extends NativeViewGestureHandlerProps {
|
|
25
|
-
/**
|
|
26
|
-
* Defines if more than one button could be pressed simultaneously. By default
|
|
27
|
-
* set true.
|
|
28
|
-
*/
|
|
29
|
-
exclusive?: boolean;
|
|
30
|
-
// TODO: we should transform props in `createNativeWrapper`
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Android only.
|
|
34
|
-
*
|
|
35
|
-
* Defines color of native ripple animation used since API level 21.
|
|
36
|
-
*/
|
|
37
|
-
rippleColor?: any; // it was present in BaseButtonProps before but is used here in code
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Android only.
|
|
41
|
-
*
|
|
42
|
-
* Defines radius of native ripple animation used since API level 21.
|
|
43
|
-
*/
|
|
44
|
-
rippleRadius?: number | null;
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Android only.
|
|
48
|
-
*
|
|
49
|
-
* Set this to true if you want the ripple animation to render outside the view bounds.
|
|
50
|
-
*/
|
|
51
|
-
borderless?: boolean;
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Android only.
|
|
55
|
-
*
|
|
56
|
-
* Defines whether the ripple animation should be drawn on the foreground of the view.
|
|
57
|
-
*/
|
|
58
|
-
foreground?: boolean;
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Android only.
|
|
62
|
-
*
|
|
63
|
-
* Set this to true if you don't want the system to play sound when the button is pressed.
|
|
64
|
-
*/
|
|
65
|
-
touchSoundDisabled?: boolean;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
export interface BaseButtonProps extends RawButtonProps {
|
|
69
|
-
/**
|
|
70
|
-
* Called when the button gets pressed (analogous to `onPress` in
|
|
71
|
-
* `TouchableHighlight` from RN core).
|
|
72
|
-
*/
|
|
73
|
-
onPress?: (pointerInside: boolean) => void;
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* Called when the button gets pressed and is held for `delayLongPress`
|
|
77
|
-
* milliseconds.
|
|
78
|
-
*/
|
|
79
|
-
onLongPress?: () => void;
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Called when button changes from inactive to active and vice versa. It
|
|
83
|
-
* passes active state as a boolean variable as a first parameter for that
|
|
84
|
-
* method.
|
|
85
|
-
*/
|
|
86
|
-
onActiveStateChange?: (active: boolean) => void;
|
|
87
|
-
style?: StyleProp<ViewStyle>;
|
|
88
|
-
testID?: string;
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Delay, in milliseconds, after which the `onLongPress` callback gets called.
|
|
92
|
-
* Defaults to 600.
|
|
93
|
-
*/
|
|
94
|
-
delayLongPress?: number;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
export interface RectButtonProps extends BaseButtonProps {
|
|
98
|
-
/**
|
|
99
|
-
* Background color that will be dimmed when button is in active state.
|
|
100
|
-
*/
|
|
101
|
-
underlayColor?: string;
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* iOS only.
|
|
105
|
-
*
|
|
106
|
-
* Opacity applied to the underlay when button is in active state.
|
|
107
|
-
*/
|
|
108
|
-
activeOpacity?: number;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
export interface BorderlessButtonProps extends BaseButtonProps {
|
|
112
|
-
/**
|
|
113
|
-
* iOS only.
|
|
114
|
-
*
|
|
115
|
-
* Opacity applied to the button when it is in an active state.
|
|
116
|
-
*/
|
|
117
|
-
activeOpacity?: number;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
export const RawButton = createNativeWrapper(GestureHandlerButton, {
|
|
121
|
-
shouldCancelWhenOutside: false,
|
|
122
|
-
shouldActivateOnStart: false,
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
export class BaseButton extends React.Component<BaseButtonProps> {
|
|
126
|
-
static defaultProps = {
|
|
127
|
-
delayLongPress: 600,
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
private lastActive: boolean;
|
|
131
|
-
private longPressTimeout: ReturnType<typeof setTimeout> | undefined;
|
|
132
|
-
private longPressDetected: boolean;
|
|
133
|
-
|
|
134
|
-
constructor(props: BaseButtonProps) {
|
|
135
|
-
super(props);
|
|
136
|
-
this.lastActive = false;
|
|
137
|
-
this.longPressDetected = false;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
private handleEvent = ({
|
|
141
|
-
nativeEvent,
|
|
142
|
-
}: HandlerStateChangeEvent<NativeViewGestureHandlerPayload>) => {
|
|
143
|
-
const { state, oldState, pointerInside } = nativeEvent;
|
|
144
|
-
const active = pointerInside && state === State.ACTIVE;
|
|
145
|
-
|
|
146
|
-
if (active !== this.lastActive && this.props.onActiveStateChange) {
|
|
147
|
-
this.props.onActiveStateChange(active);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
if (
|
|
151
|
-
!this.longPressDetected &&
|
|
152
|
-
oldState === State.ACTIVE &&
|
|
153
|
-
state !== State.CANCELLED &&
|
|
154
|
-
this.lastActive &&
|
|
155
|
-
this.props.onPress
|
|
156
|
-
) {
|
|
157
|
-
this.props.onPress(active);
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
if (
|
|
161
|
-
!this.lastActive &&
|
|
162
|
-
// NativeViewGestureHandler sends different events based on platform
|
|
163
|
-
state === (Platform.OS !== 'android' ? State.ACTIVE : State.BEGAN) &&
|
|
164
|
-
pointerInside
|
|
165
|
-
) {
|
|
166
|
-
this.longPressDetected = false;
|
|
167
|
-
if (this.props.onLongPress) {
|
|
168
|
-
this.longPressTimeout = setTimeout(
|
|
169
|
-
this.onLongPress,
|
|
170
|
-
this.props.delayLongPress
|
|
171
|
-
);
|
|
172
|
-
}
|
|
173
|
-
} else if (
|
|
174
|
-
// cancel longpress timeout if it's set and the finger moved out of the view
|
|
175
|
-
state === State.ACTIVE &&
|
|
176
|
-
!pointerInside &&
|
|
177
|
-
this.longPressTimeout !== undefined
|
|
178
|
-
) {
|
|
179
|
-
clearTimeout(this.longPressTimeout);
|
|
180
|
-
this.longPressTimeout = undefined;
|
|
181
|
-
} else if (
|
|
182
|
-
// cancel longpress timeout if it's set and the gesture has finished
|
|
183
|
-
this.longPressTimeout !== undefined &&
|
|
184
|
-
(state === State.END ||
|
|
185
|
-
state === State.CANCELLED ||
|
|
186
|
-
state === State.FAILED)
|
|
187
|
-
) {
|
|
188
|
-
clearTimeout(this.longPressTimeout);
|
|
189
|
-
this.longPressTimeout = undefined;
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
this.lastActive = active;
|
|
193
|
-
};
|
|
194
|
-
|
|
195
|
-
private onLongPress = () => {
|
|
196
|
-
this.longPressDetected = true;
|
|
197
|
-
this.props.onLongPress?.();
|
|
198
|
-
};
|
|
199
|
-
|
|
200
|
-
// Normally, the parent would execute it's handler first, then forward the
|
|
201
|
-
// event to listeners. However, here our handler is virtually only forwarding
|
|
202
|
-
// events to listeners, so we reverse the order to keep the proper order of
|
|
203
|
-
// the callbacks (from "raw" ones to "processed").
|
|
204
|
-
private onHandlerStateChange = (
|
|
205
|
-
e: HandlerStateChangeEvent<NativeViewGestureHandlerPayload>
|
|
206
|
-
) => {
|
|
207
|
-
this.props.onHandlerStateChange?.(e);
|
|
208
|
-
this.handleEvent(e);
|
|
209
|
-
};
|
|
210
|
-
|
|
211
|
-
private onGestureEvent = (
|
|
212
|
-
e: GestureEvent<NativeViewGestureHandlerPayload>
|
|
213
|
-
) => {
|
|
214
|
-
this.props.onGestureEvent?.(e);
|
|
215
|
-
this.handleEvent(
|
|
216
|
-
e as HandlerStateChangeEvent<NativeViewGestureHandlerPayload>
|
|
217
|
-
); // TODO: maybe it is not correct
|
|
218
|
-
};
|
|
219
|
-
|
|
220
|
-
render() {
|
|
221
|
-
const { rippleColor, ...rest } = this.props;
|
|
222
|
-
|
|
223
|
-
return (
|
|
224
|
-
<RawButton
|
|
225
|
-
rippleColor={processColor(rippleColor)}
|
|
226
|
-
{...rest}
|
|
227
|
-
onGestureEvent={this.onGestureEvent}
|
|
228
|
-
onHandlerStateChange={this.onHandlerStateChange}
|
|
229
|
-
/>
|
|
230
|
-
);
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
const AnimatedBaseButton = Animated.createAnimatedComponent(BaseButton);
|
|
235
|
-
|
|
236
|
-
const btnStyles = StyleSheet.create({
|
|
237
|
-
underlay: {
|
|
238
|
-
position: 'absolute',
|
|
239
|
-
left: 0,
|
|
240
|
-
right: 0,
|
|
241
|
-
bottom: 0,
|
|
242
|
-
top: 0,
|
|
243
|
-
},
|
|
244
|
-
});
|
|
245
|
-
|
|
246
|
-
export class RectButton extends React.Component<RectButtonProps> {
|
|
247
|
-
static defaultProps = {
|
|
248
|
-
activeOpacity: 0.105,
|
|
249
|
-
underlayColor: 'black',
|
|
250
|
-
};
|
|
251
|
-
|
|
252
|
-
private opacity: Animated.Value;
|
|
253
|
-
|
|
254
|
-
constructor(props: RectButtonProps) {
|
|
255
|
-
super(props);
|
|
256
|
-
this.opacity = new Animated.Value(0);
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
private onActiveStateChange = (active: boolean) => {
|
|
260
|
-
if (Platform.OS !== 'android') {
|
|
261
|
-
this.opacity.setValue(active ? this.props.activeOpacity! : 0);
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
this.props.onActiveStateChange?.(active);
|
|
265
|
-
};
|
|
266
|
-
|
|
267
|
-
render() {
|
|
268
|
-
const { children, style, ...rest } = this.props;
|
|
269
|
-
|
|
270
|
-
const resolvedStyle = StyleSheet.flatten(style ?? {});
|
|
271
|
-
|
|
272
|
-
return (
|
|
273
|
-
<BaseButton
|
|
274
|
-
{...rest}
|
|
275
|
-
style={resolvedStyle}
|
|
276
|
-
onActiveStateChange={this.onActiveStateChange}
|
|
277
|
-
>
|
|
278
|
-
<Animated.View
|
|
279
|
-
style={[
|
|
280
|
-
btnStyles.underlay,
|
|
281
|
-
{
|
|
282
|
-
opacity: this.opacity,
|
|
283
|
-
backgroundColor: this.props.underlayColor,
|
|
284
|
-
borderRadius: resolvedStyle.borderRadius,
|
|
285
|
-
borderTopLeftRadius: resolvedStyle.borderTopLeftRadius,
|
|
286
|
-
borderTopRightRadius: resolvedStyle.borderTopRightRadius,
|
|
287
|
-
borderBottomLeftRadius: resolvedStyle.borderBottomLeftRadius,
|
|
288
|
-
borderBottomRightRadius: resolvedStyle.borderBottomRightRadius,
|
|
289
|
-
},
|
|
290
|
-
]}
|
|
291
|
-
/>
|
|
292
|
-
{children}
|
|
293
|
-
</BaseButton>
|
|
294
|
-
);
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
export class BorderlessButton extends React.Component<BorderlessButtonProps> {
|
|
299
|
-
static defaultProps = {
|
|
300
|
-
activeOpacity: 0.3,
|
|
301
|
-
borderless: true,
|
|
302
|
-
};
|
|
303
|
-
|
|
304
|
-
private opacity: Animated.Value;
|
|
305
|
-
|
|
306
|
-
constructor(props: BorderlessButtonProps) {
|
|
307
|
-
super(props);
|
|
308
|
-
this.opacity = new Animated.Value(1);
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
private onActiveStateChange = (active: boolean) => {
|
|
312
|
-
if (Platform.OS !== 'android') {
|
|
313
|
-
this.opacity.setValue(active ? this.props.activeOpacity! : 1);
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
this.props.onActiveStateChange?.(active);
|
|
317
|
-
};
|
|
318
|
-
|
|
319
|
-
render() {
|
|
320
|
-
const { children, style, ...rest } = this.props;
|
|
321
|
-
|
|
322
|
-
return (
|
|
323
|
-
<AnimatedBaseButton
|
|
324
|
-
{...rest}
|
|
325
|
-
onActiveStateChange={this.onActiveStateChange}
|
|
326
|
-
style={[style, Platform.OS === 'ios' && { opacity: this.opacity }]}
|
|
327
|
-
>
|
|
328
|
-
{children}
|
|
329
|
-
</AnimatedBaseButton>
|
|
330
|
-
);
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
export { default as PureNativeButton } from './GestureHandlerButton';
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { HostComponent } from 'react-native';
|
|
2
|
-
import { RawButtonProps } from 'react-native-gesture-handler/src/components/GestureButtons';
|
|
3
|
-
import { RNGestureHandlerButton } from './RNGestureHandlerButton';
|
|
4
|
-
|
|
5
|
-
export default RNGestureHandlerButton as HostComponent<RawButtonProps>;
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
registerViewConfig,
|
|
3
|
-
ReactNativeViewAttributes,
|
|
4
|
-
} from 'react-native-harmony';
|
|
5
|
-
|
|
6
|
-
export const RNGestureHandlerButton = registerViewConfig(
|
|
7
|
-
'RNGestureHandlerButton',
|
|
8
|
-
() => ({
|
|
9
|
-
uiViewClassName: 'RNGestureHandlerButton',
|
|
10
|
-
bubblingEventTypes: {},
|
|
11
|
-
directEventTypes: {},
|
|
12
|
-
validAttributes: {
|
|
13
|
-
...ReactNativeViewAttributes.UIView,
|
|
14
|
-
exclusive: true,
|
|
15
|
-
foreground: true,
|
|
16
|
-
borderless: true,
|
|
17
|
-
enabled: true,
|
|
18
|
-
rippleColor: true,
|
|
19
|
-
rippleRadius: true,
|
|
20
|
-
touchSoundDisabled: true,
|
|
21
|
-
},
|
|
22
|
-
})
|
|
23
|
-
);
|
|
@@ -1,301 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import { Component } from 'react';
|
|
3
|
-
import {
|
|
4
|
-
Animated,
|
|
5
|
-
Platform,
|
|
6
|
-
StyleProp,
|
|
7
|
-
ViewStyle,
|
|
8
|
-
TouchableWithoutFeedbackProps,
|
|
9
|
-
Insets,
|
|
10
|
-
} from 'react-native';
|
|
11
|
-
|
|
12
|
-
import { State } from 'react-native-gesture-handler/src/State';
|
|
13
|
-
import { BaseButton } from '../GestureButtons';
|
|
14
|
-
|
|
15
|
-
import {
|
|
16
|
-
GestureEvent,
|
|
17
|
-
HandlerStateChangeEvent,
|
|
18
|
-
} from 'react-native-gesture-handler/src/handlers/gestureHandlerCommon';
|
|
19
|
-
import { NativeViewGestureHandlerPayload } from 'react-native-gesture-handler/src/handlers/NativeViewGestureHandler';
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Each touchable is a states' machine which preforms transitions.
|
|
23
|
-
* On very beginning (and on the very end or recognition) touchable is
|
|
24
|
-
* UNDETERMINED. Then it moves to BEGAN. If touchable recognizes that finger
|
|
25
|
-
* travel outside it transits to special MOVED_OUTSIDE state. Gesture recognition
|
|
26
|
-
* finishes in UNDETERMINED state.
|
|
27
|
-
*/
|
|
28
|
-
export const TOUCHABLE_STATE = {
|
|
29
|
-
UNDETERMINED: 0,
|
|
30
|
-
BEGAN: 1,
|
|
31
|
-
MOVED_OUTSIDE: 2,
|
|
32
|
-
} as const;
|
|
33
|
-
|
|
34
|
-
type TouchableState = (typeof TOUCHABLE_STATE)[keyof typeof TOUCHABLE_STATE];
|
|
35
|
-
|
|
36
|
-
export interface GenericTouchableProps
|
|
37
|
-
extends Omit<TouchableWithoutFeedbackProps, 'hitSlop'> {
|
|
38
|
-
// Decided to drop not used fields from RN's implementation.
|
|
39
|
-
// e.g. onBlur and onFocus as well as deprecated props. - TODO: this comment may be unuseful in this moment
|
|
40
|
-
|
|
41
|
-
// TODO: in RN these events get native event parameter, which prolly could be used in our implementation too
|
|
42
|
-
onPress?: () => void;
|
|
43
|
-
onPressIn?: () => void;
|
|
44
|
-
onPressOut?: () => void;
|
|
45
|
-
onLongPress?: () => void;
|
|
46
|
-
|
|
47
|
-
nativeID?: string;
|
|
48
|
-
shouldActivateOnStart?: boolean;
|
|
49
|
-
disallowInterruption?: boolean;
|
|
50
|
-
|
|
51
|
-
containerStyle?: StyleProp<ViewStyle>;
|
|
52
|
-
hitSlop?: Insets | number;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
interface InternalProps {
|
|
56
|
-
extraButtonProps: any;
|
|
57
|
-
onStateChange?: (oldState: TouchableState, newState: TouchableState) => void;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// TODO: maybe can be better
|
|
61
|
-
// TODO: all clearTimeout have ! added, maybe they shouldn't ?
|
|
62
|
-
type Timeout = ReturnType<typeof setTimeout> | null | undefined;
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* GenericTouchable is not intented to be used as it is.
|
|
66
|
-
* Should be treated as a source for the rest of touchables
|
|
67
|
-
*/
|
|
68
|
-
|
|
69
|
-
export default class GenericTouchable extends Component<
|
|
70
|
-
GenericTouchableProps & InternalProps
|
|
71
|
-
> {
|
|
72
|
-
static defaultProps = {
|
|
73
|
-
delayLongPress: 600,
|
|
74
|
-
extraButtonProps: {
|
|
75
|
-
rippleColor: 'transparent',
|
|
76
|
-
exclusive: true,
|
|
77
|
-
},
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
// timeout handlers
|
|
81
|
-
pressInTimeout: Timeout;
|
|
82
|
-
pressOutTimeout: Timeout;
|
|
83
|
-
longPressTimeout: Timeout;
|
|
84
|
-
|
|
85
|
-
// This flag is required since recognition of longPress implies not-invoking onPress
|
|
86
|
-
longPressDetected = false;
|
|
87
|
-
|
|
88
|
-
pointerInside = true;
|
|
89
|
-
|
|
90
|
-
// State of touchable
|
|
91
|
-
STATE: TouchableState = TOUCHABLE_STATE.UNDETERMINED;
|
|
92
|
-
|
|
93
|
-
// handlePressIn in called on first touch on traveling inside component.
|
|
94
|
-
// Handles state transition with delay.
|
|
95
|
-
handlePressIn() {
|
|
96
|
-
if (this.props.delayPressIn) {
|
|
97
|
-
this.pressInTimeout = setTimeout(() => {
|
|
98
|
-
this.moveToState(TOUCHABLE_STATE.BEGAN);
|
|
99
|
-
this.pressInTimeout = null;
|
|
100
|
-
}, this.props.delayPressIn);
|
|
101
|
-
} else {
|
|
102
|
-
this.moveToState(TOUCHABLE_STATE.BEGAN);
|
|
103
|
-
}
|
|
104
|
-
if (this.props.onLongPress) {
|
|
105
|
-
const time =
|
|
106
|
-
(this.props.delayPressIn || 0) + (this.props.delayLongPress || 0);
|
|
107
|
-
this.longPressTimeout = setTimeout(this.onLongPressDetected, time);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
// handleMoveOutside in called on traveling outside component.
|
|
111
|
-
// Handles state transition with delay.
|
|
112
|
-
handleMoveOutside() {
|
|
113
|
-
if (this.props.delayPressOut) {
|
|
114
|
-
this.pressOutTimeout =
|
|
115
|
-
this.pressOutTimeout ||
|
|
116
|
-
setTimeout(() => {
|
|
117
|
-
this.moveToState(TOUCHABLE_STATE.MOVED_OUTSIDE);
|
|
118
|
-
this.pressOutTimeout = null;
|
|
119
|
-
}, this.props.delayPressOut);
|
|
120
|
-
} else {
|
|
121
|
-
this.moveToState(TOUCHABLE_STATE.MOVED_OUTSIDE);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
// handleGoToUndetermined transits to UNDETERMINED state with proper delay
|
|
126
|
-
handleGoToUndetermined() {
|
|
127
|
-
clearTimeout(this.pressOutTimeout!); // TODO: maybe it can be undefined
|
|
128
|
-
if (this.props.delayPressOut) {
|
|
129
|
-
this.pressOutTimeout = setTimeout(() => {
|
|
130
|
-
if (this.STATE === TOUCHABLE_STATE.UNDETERMINED) {
|
|
131
|
-
this.moveToState(TOUCHABLE_STATE.BEGAN);
|
|
132
|
-
}
|
|
133
|
-
this.moveToState(TOUCHABLE_STATE.UNDETERMINED);
|
|
134
|
-
this.pressOutTimeout = null;
|
|
135
|
-
}, this.props.delayPressOut);
|
|
136
|
-
} else {
|
|
137
|
-
if (this.STATE === TOUCHABLE_STATE.UNDETERMINED) {
|
|
138
|
-
this.moveToState(TOUCHABLE_STATE.BEGAN);
|
|
139
|
-
}
|
|
140
|
-
this.moveToState(TOUCHABLE_STATE.UNDETERMINED);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
componentDidMount() {
|
|
145
|
-
this.reset();
|
|
146
|
-
}
|
|
147
|
-
// reset timeout to prevent memory leaks.
|
|
148
|
-
reset() {
|
|
149
|
-
this.longPressDetected = false;
|
|
150
|
-
this.pointerInside = true;
|
|
151
|
-
clearTimeout(this.pressInTimeout!);
|
|
152
|
-
clearTimeout(this.pressOutTimeout!);
|
|
153
|
-
clearTimeout(this.longPressTimeout!);
|
|
154
|
-
this.pressOutTimeout = null;
|
|
155
|
-
this.longPressTimeout = null;
|
|
156
|
-
this.pressInTimeout = null;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
// All states' transitions are defined here.
|
|
160
|
-
moveToState(newState: TouchableState) {
|
|
161
|
-
if (newState === this.STATE) {
|
|
162
|
-
// Ignore dummy transitions
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
|
-
if (newState === TOUCHABLE_STATE.BEGAN) {
|
|
166
|
-
// First touch and moving inside
|
|
167
|
-
this.props.onPressIn?.();
|
|
168
|
-
} else if (newState === TOUCHABLE_STATE.MOVED_OUTSIDE) {
|
|
169
|
-
// Moving outside
|
|
170
|
-
this.props.onPressOut?.();
|
|
171
|
-
} else if (newState === TOUCHABLE_STATE.UNDETERMINED) {
|
|
172
|
-
// Need to reset each time on transition to UNDETERMINED
|
|
173
|
-
this.reset();
|
|
174
|
-
if (this.STATE === TOUCHABLE_STATE.BEGAN) {
|
|
175
|
-
// ... and if it happens inside button.
|
|
176
|
-
this.props.onPressOut?.();
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
// Finally call lister (used by subclasses)
|
|
180
|
-
this.props.onStateChange?.(this.STATE, newState);
|
|
181
|
-
// ... and make transition.
|
|
182
|
-
this.STATE = newState;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
onGestureEvent = ({
|
|
186
|
-
nativeEvent: { pointerInside },
|
|
187
|
-
}: GestureEvent<NativeViewGestureHandlerPayload>) => {
|
|
188
|
-
if (this.pointerInside !== pointerInside) {
|
|
189
|
-
if (pointerInside) {
|
|
190
|
-
this.onMoveIn();
|
|
191
|
-
} else {
|
|
192
|
-
this.onMoveOut();
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
this.pointerInside = pointerInside;
|
|
196
|
-
};
|
|
197
|
-
|
|
198
|
-
onHandlerStateChange = ({
|
|
199
|
-
nativeEvent,
|
|
200
|
-
}: HandlerStateChangeEvent<NativeViewGestureHandlerPayload>) => {
|
|
201
|
-
const { state } = nativeEvent;
|
|
202
|
-
if (state === State.CANCELLED || state === State.FAILED) {
|
|
203
|
-
// Need to handle case with external cancellation (e.g. by ScrollView)
|
|
204
|
-
this.moveToState(TOUCHABLE_STATE.UNDETERMINED);
|
|
205
|
-
} else if (
|
|
206
|
-
// This platform check is an implication of slightly different behavior of handlers on different platform.
|
|
207
|
-
// And Android "Active" state is achieving on first move of a finger, not on press in.
|
|
208
|
-
// On iOS event on "Began" is not delivered.
|
|
209
|
-
state === (Platform.OS !== 'android' ? State.ACTIVE : State.BEGAN) &&
|
|
210
|
-
this.STATE === TOUCHABLE_STATE.UNDETERMINED
|
|
211
|
-
) {
|
|
212
|
-
// Moving inside requires
|
|
213
|
-
this.handlePressIn();
|
|
214
|
-
} else if (state === State.END) {
|
|
215
|
-
const shouldCallOnPress =
|
|
216
|
-
!this.longPressDetected &&
|
|
217
|
-
this.STATE !== TOUCHABLE_STATE.MOVED_OUTSIDE &&
|
|
218
|
-
this.pressOutTimeout === null;
|
|
219
|
-
this.handleGoToUndetermined();
|
|
220
|
-
if (shouldCallOnPress) {
|
|
221
|
-
// Calls only inside component whether no long press was called previously
|
|
222
|
-
this.props.onPress?.();
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
};
|
|
226
|
-
|
|
227
|
-
onLongPressDetected = () => {
|
|
228
|
-
this.longPressDetected = true;
|
|
229
|
-
// checked for in the caller of `onLongPressDetected`, but better to check twice
|
|
230
|
-
this.props.onLongPress?.();
|
|
231
|
-
};
|
|
232
|
-
|
|
233
|
-
componentWillUnmount() {
|
|
234
|
-
// to prevent memory leaks
|
|
235
|
-
this.reset();
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
onMoveIn() {
|
|
239
|
-
if (this.STATE === TOUCHABLE_STATE.MOVED_OUTSIDE) {
|
|
240
|
-
// This call is not throttled with delays (like in RN's implementation).
|
|
241
|
-
this.moveToState(TOUCHABLE_STATE.BEGAN);
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
onMoveOut() {
|
|
246
|
-
// long press should no longer be detected
|
|
247
|
-
clearTimeout(this.longPressTimeout!);
|
|
248
|
-
this.longPressTimeout = null;
|
|
249
|
-
if (this.STATE === TOUCHABLE_STATE.BEGAN) {
|
|
250
|
-
this.handleMoveOutside();
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
render() {
|
|
255
|
-
const hitSlop =
|
|
256
|
-
(typeof this.props.hitSlop === 'number'
|
|
257
|
-
? {
|
|
258
|
-
top: this.props.hitSlop,
|
|
259
|
-
left: this.props.hitSlop,
|
|
260
|
-
bottom: this.props.hitSlop,
|
|
261
|
-
right: this.props.hitSlop,
|
|
262
|
-
}
|
|
263
|
-
: this.props.hitSlop) ?? undefined;
|
|
264
|
-
|
|
265
|
-
const coreProps = {
|
|
266
|
-
accessible: this.props.accessible !== false,
|
|
267
|
-
accessibilityLabel: this.props.accessibilityLabel,
|
|
268
|
-
accessibilityHint: this.props.accessibilityHint,
|
|
269
|
-
accessibilityRole: this.props.accessibilityRole,
|
|
270
|
-
// TODO: check if changed to no 's' correctly, also removed 2 props that are no longer available: `accessibilityComponentType` and `accessibilityTraits`,
|
|
271
|
-
// would be good to check if it is ok for sure, see: https://github.com/facebook/react-native/issues/24016
|
|
272
|
-
accessibilityState: this.props.accessibilityState,
|
|
273
|
-
accessibilityActions: this.props.accessibilityActions,
|
|
274
|
-
onAccessibilityAction: this.props.onAccessibilityAction,
|
|
275
|
-
nativeID: this.props.nativeID,
|
|
276
|
-
onLayout: this.props.onLayout,
|
|
277
|
-
};
|
|
278
|
-
|
|
279
|
-
return (
|
|
280
|
-
<BaseButton
|
|
281
|
-
style={this.props.containerStyle}
|
|
282
|
-
onHandlerStateChange={
|
|
283
|
-
// TODO: not sure if it can be undefined instead of null
|
|
284
|
-
this.props.disabled ? undefined : this.onHandlerStateChange
|
|
285
|
-
}
|
|
286
|
-
onGestureEvent={this.onGestureEvent}
|
|
287
|
-
hitSlop={hitSlop}
|
|
288
|
-
shouldActivateOnStart={this.props.shouldActivateOnStart}
|
|
289
|
-
disallowInterruption={this.props.disallowInterruption}
|
|
290
|
-
testID={this.props.testID}
|
|
291
|
-
touchSoundDisabled={this.props.touchSoundDisabled ?? false}
|
|
292
|
-
enabled={!this.props.disabled}
|
|
293
|
-
{...this.props.extraButtonProps}
|
|
294
|
-
>
|
|
295
|
-
<Animated.View {...coreProps} style={this.props.style}>
|
|
296
|
-
{this.props.children}
|
|
297
|
-
</Animated.View>
|
|
298
|
-
</BaseButton>
|
|
299
|
-
);
|
|
300
|
-
}
|
|
301
|
-
}
|