react-native-gesture-handler 2.0.0 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- package/android/build.gradle +25 -0
- package/android/{src → common/src}/main/java/com/swmansion/common/GestureHandlerStateManager.kt +0 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt +4 -1
- package/ios/Handlers/RNFlingHandler.m +1 -1
- package/ios/Handlers/RNLongPressHandler.m +2 -2
- package/ios/Handlers/RNPanHandler.m +1 -1
- package/ios/Handlers/RNTapHandler.m +2 -2
- package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/RNGestureHandler.xcodeproj/xcuserdata/{mdk.xcuserdatad → jakubpiasecki.xcuserdatad}/xcschemes/xcschememanagement.plist +1 -9
- package/lib/commonjs/handlers/gestures/GestureDetector.js +13 -2
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/commonjs/handlers/gestures/eventReceiver.js +23 -11
- package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gesture.js +12 -4
- package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector.js +13 -2
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/module/handlers/gestures/eventReceiver.js +23 -11
- package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
- package/lib/module/handlers/gestures/gesture.js +12 -4
- package/lib/module/handlers/gestures/gesture.js.map +1 -1
- package/lib/typescript/handlers/gestures/gesture.d.ts +7 -4
- package/package.json +2 -1
- package/src/handlers/gestures/GestureDetector.tsx +10 -2
- package/src/handlers/gestures/eventReceiver.ts +8 -2
- package/src/handlers/gestures/gesture.ts +21 -4
- package/ios/RNGestureHandler.xcodeproj/xcuserdata/mdk.xcuserdatad/xcschemes/RNGestureHandler.xcscheme +0 -80
package/android/build.gradle
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
import groovy.json.JsonSlurper
|
2
|
+
|
1
3
|
buildscript {
|
2
4
|
def kotlin_version = rootProject.ext.has('kotlinVersion') ? rootProject.ext.get('kotlinVersion') : project.properties['RNGH_kotlinVersion']
|
3
5
|
|
@@ -17,6 +19,19 @@ def safeExtGet(prop, fallback) {
|
|
17
19
|
rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
|
18
20
|
}
|
19
21
|
|
22
|
+
// Check whether Reanimated 2.3 or higher is installed alongside Gesture Handler
|
23
|
+
def shouldUseCommonInterfaceFromReanimated() {
|
24
|
+
if (rootProject.subprojects.find { it.name == 'react-native-reanimated' } != null) {
|
25
|
+
def inputFile = new File(rootProject.projectDir, '../node_modules/react-native-reanimated/package.json')
|
26
|
+
def json = new JsonSlurper().parseText(inputFile.text)
|
27
|
+
def reanimatedVersion = json.version as String
|
28
|
+
def (major, minor, patch) = reanimatedVersion.tokenize('.')
|
29
|
+
return Integer.parseInt(minor) >= 3
|
30
|
+
} else {
|
31
|
+
return false
|
32
|
+
}
|
33
|
+
}
|
34
|
+
|
20
35
|
repositories {
|
21
36
|
mavenCentral()
|
22
37
|
}
|
@@ -36,6 +51,12 @@ android {
|
|
36
51
|
// standalone gradle module just to be used in AndroidNativeExample
|
37
52
|
sourceSets {
|
38
53
|
main.java.srcDirs += 'lib/src/main/java'
|
54
|
+
|
55
|
+
// Include "common/" only when it's not provided by Reanimated to mitigate
|
56
|
+
// multiple definitions of the same class preventing build
|
57
|
+
if (!shouldUseCommonInterfaceFromReanimated()) {
|
58
|
+
main.java.srcDirs += 'common/src/main/java'
|
59
|
+
}
|
39
60
|
}
|
40
61
|
}
|
41
62
|
|
@@ -43,6 +64,10 @@ def kotlin_version = safeExtGet('kotlinVersion', project.properties['RNGH_kotlin
|
|
43
64
|
|
44
65
|
dependencies {
|
45
66
|
//noinspection GradleDynamicVersion
|
67
|
+
if (shouldUseCommonInterfaceFromReanimated()) {
|
68
|
+
// Include Reanimated as dependency to load the common interface
|
69
|
+
implementation project(':react-native-reanimated')
|
70
|
+
}
|
46
71
|
implementation 'com.facebook.react:react-native:+'
|
47
72
|
implementation 'androidx.appcompat:appcompat:1.2.0'
|
48
73
|
implementation "androidx.core:core-ktx:1.6.0"
|
package/android/{src → common/src}/main/java/com/swmansion/common/GestureHandlerStateManager.kt
RENAMED
File without changes
|
@@ -111,7 +111,10 @@ open class GestureHandler<ConcreteGestureHandlerT : GestureHandler<ConcreteGestu
|
|
111
111
|
applySelf { this.shouldCancelWhenOutside = shouldCancelWhenOutside }
|
112
112
|
|
113
113
|
fun setEnabled(enabled: Boolean): ConcreteGestureHandlerT = applySelf {
|
114
|
-
|
114
|
+
// Don't cancel handler when not changing the value of the isEnabled, executing it always caused
|
115
|
+
// handlers to be cancelled on re-render because that's the moment when the config is updated.
|
116
|
+
// If the enabled prop "changed" from true to true the handler would get cancelled.
|
117
|
+
if (view != null && isEnabled != enabled) {
|
115
118
|
// If view is set then handler is in "active" state. In that case we want to "cancel" handler
|
116
119
|
// when it changes enabled state so that it gets cleared from the orchestrator
|
117
120
|
UiThreadUtil.runOnUiThread { cancel() }
|
@@ -171,11 +171,11 @@ static const NSTimeInterval defaultMaxDuration = 0.5;
|
|
171
171
|
|
172
172
|
- (void)reset
|
173
173
|
{
|
174
|
-
[_gestureHandler.pointerTracker reset];
|
175
|
-
|
176
174
|
if (self.state == UIGestureRecognizerStateFailed) {
|
177
175
|
[self triggerAction];
|
178
176
|
}
|
177
|
+
[_gestureHandler.pointerTracker reset];
|
178
|
+
|
179
179
|
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(cancel) object:nil];
|
180
180
|
_tapsSoFar = 0;
|
181
181
|
_maxNumberOfTouches = 0;
|
Binary file
|
@@ -9,19 +9,11 @@
|
|
9
9
|
<key>orderHint</key>
|
10
10
|
<integer>1</integer>
|
11
11
|
</dict>
|
12
|
-
<key>RNGestureHandler.
|
12
|
+
<key>RNGestureHandler.xcscheme_^#shared#^_</key>
|
13
13
|
<dict>
|
14
14
|
<key>orderHint</key>
|
15
15
|
<integer>0</integer>
|
16
16
|
</dict>
|
17
17
|
</dict>
|
18
|
-
<key>SuppressBuildableAutocreation</key>
|
19
|
-
<dict>
|
20
|
-
<key>58B511DA1A9E6C8500147676</key>
|
21
|
-
<dict>
|
22
|
-
<key>primary</key>
|
23
|
-
<true/>
|
24
|
-
</dict>
|
25
|
-
</dict>
|
26
18
|
</dict>
|
27
19
|
</plist>
|
@@ -210,6 +210,9 @@ function useAnimatedGesture(preparedGesture) {
|
|
210
210
|
case _gesture.CALLBACK_TYPE.END:
|
211
211
|
return gesture.onEnd;
|
212
212
|
|
213
|
+
case _gesture.CALLBACK_TYPE.FINALIZE:
|
214
|
+
return gesture.onFinalize;
|
215
|
+
|
213
216
|
case _gesture.CALLBACK_TYPE.TOUCHES_DOWN:
|
214
217
|
return gesture.onTouchesDown;
|
215
218
|
|
@@ -285,9 +288,17 @@ function useAnimatedGesture(preparedGesture) {
|
|
285
288
|
} else if ((event.oldState === _State.State.BEGAN || event.oldState === _State.State.UNDETERMINED) && event.state === _State.State.ACTIVE) {
|
286
289
|
runWorklet(_gesture.CALLBACK_TYPE.START, gesture, event);
|
287
290
|
} else if (event.oldState !== event.state && event.state === _State.State.END) {
|
288
|
-
|
291
|
+
if (event.oldState === _State.State.ACTIVE) {
|
292
|
+
runWorklet(_gesture.CALLBACK_TYPE.END, gesture, event, true);
|
293
|
+
}
|
294
|
+
|
295
|
+
runWorklet(_gesture.CALLBACK_TYPE.FINALIZE, gesture, event, true);
|
289
296
|
} else if ((event.state === _State.State.FAILED || event.state === _State.State.CANCELLED) && event.state !== event.oldState) {
|
290
|
-
|
297
|
+
if (event.oldState === _State.State.ACTIVE) {
|
298
|
+
runWorklet(_gesture.CALLBACK_TYPE.END, gesture, event, false);
|
299
|
+
}
|
300
|
+
|
301
|
+
runWorklet(_gesture.CALLBACK_TYPE.FINALIZE, gesture, event, false);
|
291
302
|
}
|
292
303
|
} else if (isTouchEvent(event)) {
|
293
304
|
if (!stateControllers[i]) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["GestureDetector.tsx"],"names":["ALLOWED_PROPS","baseGestureHandlerWithMonitorProps","tapGestureHandlerProps","panGestureHandlerProps","panGestureHandlerCustomNativeProps","longPressGestureHandlerProps","forceTouchGestureHandlerProps","flingGestureHandlerProps","convertToHandlerTag","ref","BaseGesture","handlerTag","current","extractValidHandlerTags","interactionGroup","map","filter","tag","dropHandlers","preparedGesture","handler","config","RNGestureHandlerModule","dropGestureHandler","attachHandlers","gestureConfig","gesture","viewTag","useAnimated","firstExecution","initialize","setImmediate","prepare","createGestureHandler","handlerName","requireToFail","simultaneousWith","updateGestureHandler","simultaneousHandlers","waitFor","attachGestureHandler","animatedHandlers","value","g","handlers","updateHandlers","i","length","needsToReattach","useAnimatedGesture","Reanimated","isStateChangeEvent","event","oldState","isTouchEvent","eventType","getHandler","type","CALLBACK_TYPE","BEGAN","onBegin","START","onStart","UPDATE","onUpdate","END","onEnd","TOUCHES_DOWN","onTouchesDown","TOUCHES_MOVE","onTouchesMove","TOUCHES_UP","onTouchesUp","TOUCHES_CANCELLED","onTouchesCancelled","touchEventTypeToCallbackType","EventType","UNDEFINED","runWorklet","args","isWorklet","console","warn","sharedHandlersCallbacks","useSharedValue","stateControllers","callback","currentCallback","State","UNDETERMINED","state","ACTIVE","FAILED","CANCELLED","GestureStateManager","create","useEvent","animatedEventHandler","GestureDetector","props","toGestureArray","find","reduce","prev","viewRef","firstRenderRef","React","useRef","Error","children","Wrap","Component","render","child","Children","only","cloneElement","collapsable","AnimatedWrap","default","createAnimatedComponent"],"mappings":"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","sourcesContent":["import React, { useEffect, useRef } from 'react';\nimport {\n GestureType,\n HandlerCallbacks,\n BaseGesture,\n GestureRef,\n CALLBACK_TYPE,\n} from './gesture';\nimport { Reanimated, SharedValue } from './reanimatedWrapper';\nimport { registerHandler, unregisterHandler } from '../handlersRegistry';\nimport RNGestureHandlerModule from '../../RNGestureHandlerModule';\nimport {\n baseGestureHandlerWithMonitorProps,\n filterConfig,\n findNodeHandle,\n GestureTouchEvent,\n GestureUpdateEvent,\n GestureStateChangeEvent,\n} from '../gestureHandlerCommon';\nimport {\n GestureStateManager,\n GestureStateManagerType,\n} from './gestureStateManager';\nimport { flingGestureHandlerProps } from '../FlingGestureHandler';\nimport { forceTouchGestureHandlerProps } from '../ForceTouchGestureHandler';\nimport { longPressGestureHandlerProps } from '../LongPressGestureHandler';\nimport {\n panGestureHandlerProps,\n panGestureHandlerCustomNativeProps,\n} from '../PanGestureHandler';\nimport { tapGestureHandlerProps } from '../TapGestureHandler';\nimport { State } from '../../State';\nimport { EventType } from '../../EventType';\nimport { ComposedGesture } from './gestureComposition';\n\nconst ALLOWED_PROPS = [\n ...baseGestureHandlerWithMonitorProps,\n ...tapGestureHandlerProps,\n ...panGestureHandlerProps,\n ...panGestureHandlerCustomNativeProps,\n ...longPressGestureHandlerProps,\n ...forceTouchGestureHandlerProps,\n ...flingGestureHandlerProps,\n];\n\nexport type GestureConfigReference = {\n config: GestureType[];\n animatedEventHandler: unknown;\n animatedHandlers: SharedValue<\n HandlerCallbacks<Record<string, unknown>>[] | null\n > | null;\n firstExecution: boolean;\n useAnimated: boolean;\n};\n\nfunction convertToHandlerTag(ref: GestureRef): number {\n if (typeof ref === 'number') {\n return ref;\n } else if (ref instanceof BaseGesture) {\n return ref.handlerTag;\n } else {\n // @ts-ignore in this case it should be a ref either to gesture object or\n // a gesture handler component, in both cases handlerTag property exists\n return ref.current?.handlerTag ?? -1;\n }\n}\n\nfunction extractValidHandlerTags(interactionGroup: GestureRef[] | undefined) {\n return (\n interactionGroup?.map(convertToHandlerTag)?.filter((tag) => tag > 0) ?? []\n );\n}\n\nfunction dropHandlers(preparedGesture: GestureConfigReference) {\n for (const handler of preparedGesture.config) {\n RNGestureHandlerModule.dropGestureHandler(handler.handlerTag);\n\n unregisterHandler(handler.handlerTag);\n }\n}\n\ninterface AttachHandlersConfig {\n preparedGesture: GestureConfigReference;\n gestureConfig: ComposedGesture | GestureType | undefined;\n gesture: GestureType[];\n viewTag: number;\n useAnimated: boolean;\n}\n\nfunction attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n useAnimated,\n}: AttachHandlersConfig) {\n if (!preparedGesture.firstExecution) {\n gestureConfig?.initialize();\n } else {\n preparedGesture.firstExecution = false;\n }\n\n // use setImmediate to extract handlerTags, because all refs should be initialized\n // when it's ran\n setImmediate(() => {\n gestureConfig?.prepare();\n });\n\n for (const handler of gesture) {\n RNGestureHandlerModule.createGestureHandler(\n handler.handlerName,\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS)\n );\n\n registerHandler(handler.handlerTag, handler);\n\n // use setImmediate to extract handlerTags, because all refs should be initialized\n // when it's ran\n setImmediate(() => {\n let requireToFail: number[] = [];\n if (handler.config.requireToFail) {\n requireToFail = extractValidHandlerTags(handler.config.requireToFail);\n }\n\n let simultaneousWith: number[] = [];\n if (handler.config.simultaneousWith) {\n simultaneousWith = extractValidHandlerTags(\n handler.config.simultaneousWith\n );\n }\n\n RNGestureHandlerModule.updateGestureHandler(\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS, {\n simultaneousHandlers: simultaneousWith,\n waitFor: requireToFail,\n })\n );\n });\n }\n preparedGesture.config = gesture;\n\n for (const gesture of preparedGesture.config) {\n RNGestureHandlerModule.attachGestureHandler(\n gesture.handlerTag,\n viewTag,\n !useAnimated // send direct events when using animatedGesture, device events otherwise\n );\n }\n\n if (preparedGesture.animatedHandlers) {\n preparedGesture.animatedHandlers.value = (gesture.map(\n (g) => g.handlers\n ) as unknown) as HandlerCallbacks<Record<string, unknown>>[];\n }\n}\n\nfunction updateHandlers(\n preparedGesture: GestureConfigReference,\n gestureConfig: ComposedGesture | GestureType | undefined,\n gesture: GestureType[]\n) {\n gestureConfig?.prepare();\n\n for (let i = 0; i < gesture.length; i++) {\n const handler = preparedGesture.config[i];\n\n gesture[i].handlerTag = handler.handlerTag;\n gesture[i].handlers.handlerTag = handler.handlerTag;\n }\n\n // use setImmediate to extract handlerTags, because when it's ran, all refs should be updated\n // and handlerTags in BaseGesture references should be updated in the loop above (we need to wait\n // in case of external relations)\n setImmediate(() => {\n for (let i = 0; i < gesture.length; i++) {\n const handler = preparedGesture.config[i];\n\n handler.config = gesture[i].config;\n handler.handlers = gesture[i].handlers;\n handler.handlers.handlerTag = handler.handlerTag;\n\n const requireToFail = extractValidHandlerTags(\n handler.config.requireToFail\n );\n\n const simultaneousWith = extractValidHandlerTags(\n handler.config.simultaneousWith\n );\n\n RNGestureHandlerModule.updateGestureHandler(\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS, {\n simultaneousHandlers: simultaneousWith,\n waitFor: requireToFail,\n })\n );\n\n registerHandler(handler.handlerTag, handler);\n }\n\n if (preparedGesture.animatedHandlers) {\n preparedGesture.animatedHandlers.value = (preparedGesture.config.map(\n (g) => g.handlers\n ) as unknown) as HandlerCallbacks<Record<string, unknown>>[];\n }\n });\n}\n\nfunction needsToReattach(\n preparedGesture: GestureConfigReference,\n gesture: GestureType[]\n) {\n if (gesture.length !== preparedGesture.config.length) {\n return true;\n }\n for (let i = 0; i < gesture.length; i++) {\n if (gesture[i].handlerName !== preparedGesture.config[i].handlerName) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction useAnimatedGesture(preparedGesture: GestureConfigReference) {\n if (!Reanimated) {\n return;\n }\n\n function isStateChangeEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n ): event is GestureStateChangeEvent {\n 'worklet';\n // @ts-ignore Yes, the oldState prop is missing on GestureTouchEvent, that's the point\n return event.oldState != null;\n }\n\n function isTouchEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n ): event is GestureTouchEvent {\n 'worklet';\n return event.eventType != null;\n }\n\n function getHandler(\n type: CALLBACK_TYPE,\n gesture: HandlerCallbacks<Record<string, unknown>>\n ) {\n 'worklet';\n switch (type) {\n case CALLBACK_TYPE.BEGAN:\n return gesture.onBegin;\n case CALLBACK_TYPE.START:\n return gesture.onStart;\n case CALLBACK_TYPE.UPDATE:\n return gesture.onUpdate;\n case CALLBACK_TYPE.END:\n return gesture.onEnd;\n case CALLBACK_TYPE.TOUCHES_DOWN:\n return gesture.onTouchesDown;\n case CALLBACK_TYPE.TOUCHES_MOVE:\n return gesture.onTouchesMove;\n case CALLBACK_TYPE.TOUCHES_UP:\n return gesture.onTouchesUp;\n case CALLBACK_TYPE.TOUCHES_CANCELLED:\n return gesture.onTouchesCancelled;\n }\n }\n\n function touchEventTypeToCallbackType(eventType: EventType): CALLBACK_TYPE {\n 'worklet';\n switch (eventType) {\n case EventType.TOUCHES_DOWN:\n return CALLBACK_TYPE.TOUCHES_DOWN;\n case EventType.TOUCHES_MOVE:\n return CALLBACK_TYPE.TOUCHES_MOVE;\n case EventType.TOUCHES_UP:\n return CALLBACK_TYPE.TOUCHES_UP;\n case EventType.TOUCHES_CANCELLED:\n return CALLBACK_TYPE.TOUCHES_CANCELLED;\n }\n return CALLBACK_TYPE.UNDEFINED;\n }\n\n function runWorklet(\n type: CALLBACK_TYPE,\n gesture: HandlerCallbacks<Record<string, unknown>>,\n event: GestureStateChangeEvent | GestureUpdateEvent | GestureTouchEvent,\n ...args: any[]\n ) {\n 'worklet';\n const handler = getHandler(type, gesture);\n if (gesture.isWorklet[type]) {\n // @ts-ignore Logic below makes sure the correct event is send to the\n // correct handler.\n handler?.(event, ...args);\n } else if (handler) {\n console.warn('Animated gesture callback must be a worklet');\n }\n }\n\n // Hooks are called conditionally, but the condition is whether the\n // react-native-reanimated is installed, which shouldn't change while running\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const sharedHandlersCallbacks = Reanimated.useSharedValue<\n HandlerCallbacks<Record<string, unknown>>[] | null\n >(null);\n\n // not every gesture needs a state controller, init them lazily\n const stateControllers: GestureStateManagerType[] = [];\n\n const callback = (\n event: GestureStateChangeEvent | GestureUpdateEvent | GestureTouchEvent\n ) => {\n 'worklet';\n\n const currentCallback = sharedHandlersCallbacks.value;\n if (!currentCallback) {\n return;\n }\n\n for (let i = 0; i < currentCallback.length; i++) {\n const gesture = currentCallback[i];\n\n if (event.handlerTag === gesture.handlerTag) {\n if (isStateChangeEvent(event)) {\n if (\n event.oldState === State.UNDETERMINED &&\n event.state === State.BEGAN\n ) {\n runWorklet(CALLBACK_TYPE.BEGAN, gesture, event);\n } else if (\n (event.oldState === State.BEGAN ||\n event.oldState === State.UNDETERMINED) &&\n event.state === State.ACTIVE\n ) {\n runWorklet(CALLBACK_TYPE.START, gesture, event);\n } else if (\n event.oldState !== event.state &&\n event.state === State.END\n ) {\n runWorklet(CALLBACK_TYPE.END, gesture, event, true);\n } else if (\n (event.state === State.FAILED || event.state === State.CANCELLED) &&\n event.state !== event.oldState\n ) {\n runWorklet(CALLBACK_TYPE.END, gesture, event, false);\n }\n } else if (isTouchEvent(event)) {\n if (!stateControllers[i]) {\n stateControllers[i] = GestureStateManager.create(event.handlerTag);\n }\n\n if (event.eventType !== EventType.UNDETERMINED) {\n runWorklet(\n touchEventTypeToCallbackType(event.eventType),\n gesture,\n event,\n stateControllers[i]\n );\n }\n } else {\n runWorklet(CALLBACK_TYPE.UPDATE, gesture, event);\n }\n }\n }\n };\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const event = Reanimated.useEvent(\n callback,\n ['onGestureHandlerStateChange', 'onGestureHandlerEvent'],\n true\n );\n\n preparedGesture.animatedEventHandler = event;\n preparedGesture.animatedHandlers = sharedHandlersCallbacks;\n}\n\ninterface GestureDetectorProps {\n gesture?: ComposedGesture | GestureType;\n}\nexport const GestureDetector: React.FunctionComponent<GestureDetectorProps> = (\n props\n) => {\n const gestureConfig = props.gesture;\n const gesture = gestureConfig?.toGestureArray?.() ?? [];\n const useAnimated =\n gesture.find((gesture) =>\n gesture.handlers.isWorklet.reduce((prev, current) => prev || current)\n ) != null;\n const viewRef = useRef(null);\n const firstRenderRef = useRef(true);\n\n const preparedGesture = React.useRef<GestureConfigReference>({\n config: gesture,\n animatedEventHandler: null,\n animatedHandlers: null,\n firstExecution: true,\n useAnimated: useAnimated,\n }).current;\n\n if (useAnimated !== preparedGesture.useAnimated) {\n throw new Error(\n 'You cannot change whether you are using gesture or animatedGesture while the app is running'\n );\n }\n\n if (preparedGesture.firstExecution) {\n gestureConfig?.initialize?.();\n }\n\n if (useAnimated) {\n // Whether animatedGesture or gesture is used shouldn't change\n // during while an app is running\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useAnimatedGesture(preparedGesture);\n }\n\n useEffect(() => {\n firstRenderRef.current = true;\n const viewTag = findNodeHandle(viewRef.current) as number;\n attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n useAnimated,\n });\n\n return () => {\n dropHandlers(preparedGesture);\n };\n }, []);\n\n useEffect(() => {\n if (!firstRenderRef.current) {\n const viewTag = findNodeHandle(viewRef.current) as number;\n\n if (needsToReattach(preparedGesture, gesture)) {\n dropHandlers(preparedGesture);\n attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n useAnimated,\n });\n } else {\n updateHandlers(preparedGesture, gestureConfig, gesture);\n }\n } else {\n firstRenderRef.current = false;\n }\n }, [props]);\n\n if (useAnimated) {\n return (\n <AnimatedWrap\n ref={viewRef}\n onGestureHandlerEvent={preparedGesture.animatedEventHandler}>\n {props.children}\n </AnimatedWrap>\n );\n } else {\n return <Wrap ref={viewRef}>{props.children}</Wrap>;\n }\n};\n\nclass Wrap extends React.Component<{ onGestureHandlerEvent?: unknown }> {\n render() {\n // I don't think that fighting with types over such a simple function is worth it\n // The only thing it does is add 'collapsable: false' to the child component\n // to make sure it is in the native view hierarchy so the detector can find\n // correct viewTag to attach to.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const child: any = React.Children.only(this.props.children);\n\n return React.cloneElement(\n child,\n { collapsable: false },\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n child.props.children\n );\n }\n}\n\nconst AnimatedWrap = Reanimated?.default?.createAnimatedComponent(Wrap) ?? Wrap;\n"]}
|
1
|
+
{"version":3,"sources":["GestureDetector.tsx"],"names":["ALLOWED_PROPS","baseGestureHandlerWithMonitorProps","tapGestureHandlerProps","panGestureHandlerProps","panGestureHandlerCustomNativeProps","longPressGestureHandlerProps","forceTouchGestureHandlerProps","flingGestureHandlerProps","convertToHandlerTag","ref","BaseGesture","handlerTag","current","extractValidHandlerTags","interactionGroup","map","filter","tag","dropHandlers","preparedGesture","handler","config","RNGestureHandlerModule","dropGestureHandler","attachHandlers","gestureConfig","gesture","viewTag","useAnimated","firstExecution","initialize","setImmediate","prepare","createGestureHandler","handlerName","requireToFail","simultaneousWith","updateGestureHandler","simultaneousHandlers","waitFor","attachGestureHandler","animatedHandlers","value","g","handlers","updateHandlers","i","length","needsToReattach","useAnimatedGesture","Reanimated","isStateChangeEvent","event","oldState","isTouchEvent","eventType","getHandler","type","CALLBACK_TYPE","BEGAN","onBegin","START","onStart","UPDATE","onUpdate","END","onEnd","FINALIZE","onFinalize","TOUCHES_DOWN","onTouchesDown","TOUCHES_MOVE","onTouchesMove","TOUCHES_UP","onTouchesUp","TOUCHES_CANCELLED","onTouchesCancelled","touchEventTypeToCallbackType","EventType","UNDEFINED","runWorklet","args","isWorklet","console","warn","sharedHandlersCallbacks","useSharedValue","stateControllers","callback","currentCallback","State","UNDETERMINED","state","ACTIVE","FAILED","CANCELLED","GestureStateManager","create","useEvent","animatedEventHandler","GestureDetector","props","toGestureArray","find","reduce","prev","viewRef","firstRenderRef","React","useRef","Error","children","Wrap","Component","render","child","Children","only","cloneElement","collapsable","AnimatedWrap","default","createAnimatedComponent"],"mappings":"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","sourcesContent":["import React, { useEffect, useRef } from 'react';\nimport {\n GestureType,\n HandlerCallbacks,\n BaseGesture,\n GestureRef,\n CALLBACK_TYPE,\n} from './gesture';\nimport { Reanimated, SharedValue } from './reanimatedWrapper';\nimport { registerHandler, unregisterHandler } from '../handlersRegistry';\nimport RNGestureHandlerModule from '../../RNGestureHandlerModule';\nimport {\n baseGestureHandlerWithMonitorProps,\n filterConfig,\n findNodeHandle,\n GestureTouchEvent,\n GestureUpdateEvent,\n GestureStateChangeEvent,\n} from '../gestureHandlerCommon';\nimport {\n GestureStateManager,\n GestureStateManagerType,\n} from './gestureStateManager';\nimport { flingGestureHandlerProps } from '../FlingGestureHandler';\nimport { forceTouchGestureHandlerProps } from '../ForceTouchGestureHandler';\nimport { longPressGestureHandlerProps } from '../LongPressGestureHandler';\nimport {\n panGestureHandlerProps,\n panGestureHandlerCustomNativeProps,\n} from '../PanGestureHandler';\nimport { tapGestureHandlerProps } from '../TapGestureHandler';\nimport { State } from '../../State';\nimport { EventType } from '../../EventType';\nimport { ComposedGesture } from './gestureComposition';\n\nconst ALLOWED_PROPS = [\n ...baseGestureHandlerWithMonitorProps,\n ...tapGestureHandlerProps,\n ...panGestureHandlerProps,\n ...panGestureHandlerCustomNativeProps,\n ...longPressGestureHandlerProps,\n ...forceTouchGestureHandlerProps,\n ...flingGestureHandlerProps,\n];\n\nexport type GestureConfigReference = {\n config: GestureType[];\n animatedEventHandler: unknown;\n animatedHandlers: SharedValue<\n HandlerCallbacks<Record<string, unknown>>[] | null\n > | null;\n firstExecution: boolean;\n useAnimated: boolean;\n};\n\nfunction convertToHandlerTag(ref: GestureRef): number {\n if (typeof ref === 'number') {\n return ref;\n } else if (ref instanceof BaseGesture) {\n return ref.handlerTag;\n } else {\n // @ts-ignore in this case it should be a ref either to gesture object or\n // a gesture handler component, in both cases handlerTag property exists\n return ref.current?.handlerTag ?? -1;\n }\n}\n\nfunction extractValidHandlerTags(interactionGroup: GestureRef[] | undefined) {\n return (\n interactionGroup?.map(convertToHandlerTag)?.filter((tag) => tag > 0) ?? []\n );\n}\n\nfunction dropHandlers(preparedGesture: GestureConfigReference) {\n for (const handler of preparedGesture.config) {\n RNGestureHandlerModule.dropGestureHandler(handler.handlerTag);\n\n unregisterHandler(handler.handlerTag);\n }\n}\n\ninterface AttachHandlersConfig {\n preparedGesture: GestureConfigReference;\n gestureConfig: ComposedGesture | GestureType | undefined;\n gesture: GestureType[];\n viewTag: number;\n useAnimated: boolean;\n}\n\nfunction attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n useAnimated,\n}: AttachHandlersConfig) {\n if (!preparedGesture.firstExecution) {\n gestureConfig?.initialize();\n } else {\n preparedGesture.firstExecution = false;\n }\n\n // use setImmediate to extract handlerTags, because all refs should be initialized\n // when it's ran\n setImmediate(() => {\n gestureConfig?.prepare();\n });\n\n for (const handler of gesture) {\n RNGestureHandlerModule.createGestureHandler(\n handler.handlerName,\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS)\n );\n\n registerHandler(handler.handlerTag, handler);\n\n // use setImmediate to extract handlerTags, because all refs should be initialized\n // when it's ran\n setImmediate(() => {\n let requireToFail: number[] = [];\n if (handler.config.requireToFail) {\n requireToFail = extractValidHandlerTags(handler.config.requireToFail);\n }\n\n let simultaneousWith: number[] = [];\n if (handler.config.simultaneousWith) {\n simultaneousWith = extractValidHandlerTags(\n handler.config.simultaneousWith\n );\n }\n\n RNGestureHandlerModule.updateGestureHandler(\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS, {\n simultaneousHandlers: simultaneousWith,\n waitFor: requireToFail,\n })\n );\n });\n }\n preparedGesture.config = gesture;\n\n for (const gesture of preparedGesture.config) {\n RNGestureHandlerModule.attachGestureHandler(\n gesture.handlerTag,\n viewTag,\n !useAnimated // send direct events when using animatedGesture, device events otherwise\n );\n }\n\n if (preparedGesture.animatedHandlers) {\n preparedGesture.animatedHandlers.value = (gesture.map(\n (g) => g.handlers\n ) as unknown) as HandlerCallbacks<Record<string, unknown>>[];\n }\n}\n\nfunction updateHandlers(\n preparedGesture: GestureConfigReference,\n gestureConfig: ComposedGesture | GestureType | undefined,\n gesture: GestureType[]\n) {\n gestureConfig?.prepare();\n\n for (let i = 0; i < gesture.length; i++) {\n const handler = preparedGesture.config[i];\n\n gesture[i].handlerTag = handler.handlerTag;\n gesture[i].handlers.handlerTag = handler.handlerTag;\n }\n\n // use setImmediate to extract handlerTags, because when it's ran, all refs should be updated\n // and handlerTags in BaseGesture references should be updated in the loop above (we need to wait\n // in case of external relations)\n setImmediate(() => {\n for (let i = 0; i < gesture.length; i++) {\n const handler = preparedGesture.config[i];\n\n handler.config = gesture[i].config;\n handler.handlers = gesture[i].handlers;\n handler.handlers.handlerTag = handler.handlerTag;\n\n const requireToFail = extractValidHandlerTags(\n handler.config.requireToFail\n );\n\n const simultaneousWith = extractValidHandlerTags(\n handler.config.simultaneousWith\n );\n\n RNGestureHandlerModule.updateGestureHandler(\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS, {\n simultaneousHandlers: simultaneousWith,\n waitFor: requireToFail,\n })\n );\n\n registerHandler(handler.handlerTag, handler);\n }\n\n if (preparedGesture.animatedHandlers) {\n preparedGesture.animatedHandlers.value = (preparedGesture.config.map(\n (g) => g.handlers\n ) as unknown) as HandlerCallbacks<Record<string, unknown>>[];\n }\n });\n}\n\nfunction needsToReattach(\n preparedGesture: GestureConfigReference,\n gesture: GestureType[]\n) {\n if (gesture.length !== preparedGesture.config.length) {\n return true;\n }\n for (let i = 0; i < gesture.length; i++) {\n if (gesture[i].handlerName !== preparedGesture.config[i].handlerName) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction useAnimatedGesture(preparedGesture: GestureConfigReference) {\n if (!Reanimated) {\n return;\n }\n\n function isStateChangeEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n ): event is GestureStateChangeEvent {\n 'worklet';\n // @ts-ignore Yes, the oldState prop is missing on GestureTouchEvent, that's the point\n return event.oldState != null;\n }\n\n function isTouchEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n ): event is GestureTouchEvent {\n 'worklet';\n return event.eventType != null;\n }\n\n function getHandler(\n type: CALLBACK_TYPE,\n gesture: HandlerCallbacks<Record<string, unknown>>\n ) {\n 'worklet';\n switch (type) {\n case CALLBACK_TYPE.BEGAN:\n return gesture.onBegin;\n case CALLBACK_TYPE.START:\n return gesture.onStart;\n case CALLBACK_TYPE.UPDATE:\n return gesture.onUpdate;\n case CALLBACK_TYPE.END:\n return gesture.onEnd;\n case CALLBACK_TYPE.FINALIZE:\n return gesture.onFinalize;\n case CALLBACK_TYPE.TOUCHES_DOWN:\n return gesture.onTouchesDown;\n case CALLBACK_TYPE.TOUCHES_MOVE:\n return gesture.onTouchesMove;\n case CALLBACK_TYPE.TOUCHES_UP:\n return gesture.onTouchesUp;\n case CALLBACK_TYPE.TOUCHES_CANCELLED:\n return gesture.onTouchesCancelled;\n }\n }\n\n function touchEventTypeToCallbackType(eventType: EventType): CALLBACK_TYPE {\n 'worklet';\n switch (eventType) {\n case EventType.TOUCHES_DOWN:\n return CALLBACK_TYPE.TOUCHES_DOWN;\n case EventType.TOUCHES_MOVE:\n return CALLBACK_TYPE.TOUCHES_MOVE;\n case EventType.TOUCHES_UP:\n return CALLBACK_TYPE.TOUCHES_UP;\n case EventType.TOUCHES_CANCELLED:\n return CALLBACK_TYPE.TOUCHES_CANCELLED;\n }\n return CALLBACK_TYPE.UNDEFINED;\n }\n\n function runWorklet(\n type: CALLBACK_TYPE,\n gesture: HandlerCallbacks<Record<string, unknown>>,\n event: GestureStateChangeEvent | GestureUpdateEvent | GestureTouchEvent,\n ...args: any[]\n ) {\n 'worklet';\n const handler = getHandler(type, gesture);\n if (gesture.isWorklet[type]) {\n // @ts-ignore Logic below makes sure the correct event is send to the\n // correct handler.\n handler?.(event, ...args);\n } else if (handler) {\n console.warn('Animated gesture callback must be a worklet');\n }\n }\n\n // Hooks are called conditionally, but the condition is whether the\n // react-native-reanimated is installed, which shouldn't change while running\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const sharedHandlersCallbacks = Reanimated.useSharedValue<\n HandlerCallbacks<Record<string, unknown>>[] | null\n >(null);\n\n // not every gesture needs a state controller, init them lazily\n const stateControllers: GestureStateManagerType[] = [];\n\n const callback = (\n event: GestureStateChangeEvent | GestureUpdateEvent | GestureTouchEvent\n ) => {\n 'worklet';\n\n const currentCallback = sharedHandlersCallbacks.value;\n if (!currentCallback) {\n return;\n }\n\n for (let i = 0; i < currentCallback.length; i++) {\n const gesture = currentCallback[i];\n\n if (event.handlerTag === gesture.handlerTag) {\n if (isStateChangeEvent(event)) {\n if (\n event.oldState === State.UNDETERMINED &&\n event.state === State.BEGAN\n ) {\n runWorklet(CALLBACK_TYPE.BEGAN, gesture, event);\n } else if (\n (event.oldState === State.BEGAN ||\n event.oldState === State.UNDETERMINED) &&\n event.state === State.ACTIVE\n ) {\n runWorklet(CALLBACK_TYPE.START, gesture, event);\n } else if (\n event.oldState !== event.state &&\n event.state === State.END\n ) {\n if (event.oldState === State.ACTIVE) {\n runWorklet(CALLBACK_TYPE.END, gesture, event, true);\n }\n runWorklet(CALLBACK_TYPE.FINALIZE, gesture, event, true);\n } else if (\n (event.state === State.FAILED || event.state === State.CANCELLED) &&\n event.state !== event.oldState\n ) {\n if (event.oldState === State.ACTIVE) {\n runWorklet(CALLBACK_TYPE.END, gesture, event, false);\n }\n runWorklet(CALLBACK_TYPE.FINALIZE, gesture, event, false);\n }\n } else if (isTouchEvent(event)) {\n if (!stateControllers[i]) {\n stateControllers[i] = GestureStateManager.create(event.handlerTag);\n }\n\n if (event.eventType !== EventType.UNDETERMINED) {\n runWorklet(\n touchEventTypeToCallbackType(event.eventType),\n gesture,\n event,\n stateControllers[i]\n );\n }\n } else {\n runWorklet(CALLBACK_TYPE.UPDATE, gesture, event);\n }\n }\n }\n };\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const event = Reanimated.useEvent(\n callback,\n ['onGestureHandlerStateChange', 'onGestureHandlerEvent'],\n true\n );\n\n preparedGesture.animatedEventHandler = event;\n preparedGesture.animatedHandlers = sharedHandlersCallbacks;\n}\n\ninterface GestureDetectorProps {\n gesture?: ComposedGesture | GestureType;\n}\nexport const GestureDetector: React.FunctionComponent<GestureDetectorProps> = (\n props\n) => {\n const gestureConfig = props.gesture;\n const gesture = gestureConfig?.toGestureArray?.() ?? [];\n const useAnimated =\n gesture.find((gesture) =>\n gesture.handlers.isWorklet.reduce((prev, current) => prev || current)\n ) != null;\n const viewRef = useRef(null);\n const firstRenderRef = useRef(true);\n\n const preparedGesture = React.useRef<GestureConfigReference>({\n config: gesture,\n animatedEventHandler: null,\n animatedHandlers: null,\n firstExecution: true,\n useAnimated: useAnimated,\n }).current;\n\n if (useAnimated !== preparedGesture.useAnimated) {\n throw new Error(\n 'You cannot change whether you are using gesture or animatedGesture while the app is running'\n );\n }\n\n if (preparedGesture.firstExecution) {\n gestureConfig?.initialize?.();\n }\n\n if (useAnimated) {\n // Whether animatedGesture or gesture is used shouldn't change\n // during while an app is running\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useAnimatedGesture(preparedGesture);\n }\n\n useEffect(() => {\n firstRenderRef.current = true;\n const viewTag = findNodeHandle(viewRef.current) as number;\n attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n useAnimated,\n });\n\n return () => {\n dropHandlers(preparedGesture);\n };\n }, []);\n\n useEffect(() => {\n if (!firstRenderRef.current) {\n const viewTag = findNodeHandle(viewRef.current) as number;\n\n if (needsToReattach(preparedGesture, gesture)) {\n dropHandlers(preparedGesture);\n attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n useAnimated,\n });\n } else {\n updateHandlers(preparedGesture, gestureConfig, gesture);\n }\n } else {\n firstRenderRef.current = false;\n }\n }, [props]);\n\n if (useAnimated) {\n return (\n <AnimatedWrap\n ref={viewRef}\n onGestureHandlerEvent={preparedGesture.animatedEventHandler}>\n {props.children}\n </AnimatedWrap>\n );\n } else {\n return <Wrap ref={viewRef}>{props.children}</Wrap>;\n }\n};\n\nclass Wrap extends React.Component<{ onGestureHandlerEvent?: unknown }> {\n render() {\n // I don't think that fighting with types over such a simple function is worth it\n // The only thing it does is add 'collapsable: false' to the child component\n // to make sure it is in the native view hierarchy so the detector can find\n // correct viewTag to attach to.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const child: any = React.Children.only(this.props.children);\n\n return React.cloneElement(\n child,\n { collapsable: false },\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n child.props.children\n );\n }\n}\n\nconst AnimatedWrap = Reanimated?.default?.createAnimatedComponent(Wrap) ?? Wrap;\n"]}
|
@@ -41,7 +41,7 @@ function isTouchEvent(event) {
|
|
41
41
|
}
|
42
42
|
|
43
43
|
function onGestureHandlerEvent(event) {
|
44
|
-
var _handler$
|
44
|
+
var _handler$handlers7, _handler$handlers7$on, _handler$handlers8, _handler$handlers8$on, _handler$handlers9, _handler$handlers9$on, _handler$handlers10, _handler$handlers10$o;
|
45
45
|
|
46
46
|
const handler = (0, _handlersRegistry.findHandler)(event.handlerTag);
|
47
47
|
|
@@ -56,36 +56,48 @@ function onGestureHandlerEvent(event) {
|
|
56
56
|
|
57
57
|
(_handler$handlers$onS = (_handler$handlers2 = handler.handlers).onStart) === null || _handler$handlers$onS === void 0 ? void 0 : _handler$handlers$onS.call(_handler$handlers2, event);
|
58
58
|
} else if (event.oldState !== event.state && event.state === _State.State.END) {
|
59
|
-
var _handler$handlers$
|
59
|
+
var _handler$handlers$onF, _handler$handlers4;
|
60
60
|
|
61
|
-
|
61
|
+
if (event.oldState === _State.State.ACTIVE) {
|
62
|
+
var _handler$handlers$onE, _handler$handlers3;
|
63
|
+
|
64
|
+
(_handler$handlers$onE = (_handler$handlers3 = handler.handlers).onEnd) === null || _handler$handlers$onE === void 0 ? void 0 : _handler$handlers$onE.call(_handler$handlers3, event, true);
|
65
|
+
}
|
66
|
+
|
67
|
+
(_handler$handlers$onF = (_handler$handlers4 = handler.handlers).onFinalize) === null || _handler$handlers$onF === void 0 ? void 0 : _handler$handlers$onF.call(_handler$handlers4, event, true);
|
62
68
|
} else if ((event.state === _State.State.FAILED || event.state === _State.State.CANCELLED) && event.oldState !== event.state) {
|
63
|
-
var _handler$handlers$
|
69
|
+
var _handler$handlers$onF2, _handler$handlers6;
|
70
|
+
|
71
|
+
if (event.oldState === _State.State.ACTIVE) {
|
72
|
+
var _handler$handlers$onE2, _handler$handlers5;
|
73
|
+
|
74
|
+
(_handler$handlers$onE2 = (_handler$handlers5 = handler.handlers).onEnd) === null || _handler$handlers$onE2 === void 0 ? void 0 : _handler$handlers$onE2.call(_handler$handlers5, event, false);
|
75
|
+
}
|
64
76
|
|
65
|
-
(_handler$handlers$
|
77
|
+
(_handler$handlers$onF2 = (_handler$handlers6 = handler.handlers).onFinalize) === null || _handler$handlers$onF2 === void 0 ? void 0 : _handler$handlers$onF2.call(_handler$handlers6, event, false);
|
66
78
|
}
|
67
79
|
} else if (isTouchEvent(event)) {
|
68
80
|
switch (event.eventType) {
|
69
81
|
case _EventType.EventType.TOUCHES_DOWN:
|
70
|
-
(_handler$
|
82
|
+
(_handler$handlers7 = handler.handlers) === null || _handler$handlers7 === void 0 ? void 0 : (_handler$handlers7$on = _handler$handlers7.onTouchesDown) === null || _handler$handlers7$on === void 0 ? void 0 : _handler$handlers7$on.call(_handler$handlers7, event, dummyStateManager);
|
71
83
|
break;
|
72
84
|
|
73
85
|
case _EventType.EventType.TOUCHES_MOVE:
|
74
|
-
(_handler$
|
86
|
+
(_handler$handlers8 = handler.handlers) === null || _handler$handlers8 === void 0 ? void 0 : (_handler$handlers8$on = _handler$handlers8.onTouchesMove) === null || _handler$handlers8$on === void 0 ? void 0 : _handler$handlers8$on.call(_handler$handlers8, event, dummyStateManager);
|
75
87
|
break;
|
76
88
|
|
77
89
|
case _EventType.EventType.TOUCHES_UP:
|
78
|
-
(_handler$
|
90
|
+
(_handler$handlers9 = handler.handlers) === null || _handler$handlers9 === void 0 ? void 0 : (_handler$handlers9$on = _handler$handlers9.onTouchesUp) === null || _handler$handlers9$on === void 0 ? void 0 : _handler$handlers9$on.call(_handler$handlers9, event, dummyStateManager);
|
79
91
|
break;
|
80
92
|
|
81
93
|
case _EventType.EventType.TOUCHES_CANCELLED:
|
82
|
-
(_handler$
|
94
|
+
(_handler$handlers10 = handler.handlers) === null || _handler$handlers10 === void 0 ? void 0 : (_handler$handlers10$o = _handler$handlers10.onTouchesCancelled) === null || _handler$handlers10$o === void 0 ? void 0 : _handler$handlers10$o.call(_handler$handlers10, event, dummyStateManager);
|
83
95
|
break;
|
84
96
|
}
|
85
97
|
} else {
|
86
|
-
var _handler$handlers$onU, _handler$
|
98
|
+
var _handler$handlers$onU, _handler$handlers11;
|
87
99
|
|
88
|
-
(_handler$handlers$onU = (_handler$
|
100
|
+
(_handler$handlers$onU = (_handler$handlers11 = handler.handlers).onUpdate) === null || _handler$handlers$onU === void 0 ? void 0 : _handler$handlers$onU.call(_handler$handlers11, event);
|
89
101
|
}
|
90
102
|
}
|
91
103
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["eventReceiver.ts"],"names":["gestureHandlerEventSubscription","gestureHandlerStateChangeEventSubscription","dummyStateManager","begin","console","warn","activate","end","fail","isStateChangeEvent","event","oldState","isTouchEvent","eventType","onGestureHandlerEvent","handler","handlerTag","State","UNDETERMINED","state","BEGAN","handlers","onBegin","ACTIVE","onStart","END","onEnd","FAILED","CANCELLED","EventType","TOUCHES_DOWN","onTouchesDown","TOUCHES_MOVE","onTouchesMove","TOUCHES_UP","onTouchesUp","TOUCHES_CANCELLED","onTouchesCancelled","onUpdate","startListening","stopListening","DeviceEventEmitter","addListener","removeSubscription"],"mappings":";;;;;;;;AAAA;;AACA;;AACA;;AAOA;;AAGA,IAAIA,+BAA2D,GAAG,IAAlE;AACA,IAAIC,0CAAsE,GAAG,IAA7E;AAEA,MAAMC,iBAA0C,GAAG;AACjDC,EAAAA,KAAK,EAAE,MAAM;AACXC,IAAAA,OAAO,CAACC,IAAR,CACE,uFADF;AAGD,GALgD;AAMjDC,EAAAA,QAAQ,EAAE,MAAM;AACdF,IAAAA,OAAO,CAACC,IAAR,CACE,uFADF;AAGD,GAVgD;AAWjDE,EAAAA,GAAG,EAAE,MAAM;AACTH,IAAAA,OAAO,CAACC,IAAR,CACE,uFADF;AAGD,GAfgD;AAgBjDG,EAAAA,IAAI,EAAE,MAAM;AACVJ,IAAAA,OAAO,CAACC,IAAR,CACE,uFADF;AAGD;AApBgD,CAAnD;;AAuBA,SAASI,kBAAT,CACEC,KADF,EAEoC;AAClC;AACA,SAAOA,KAAK,CAACC,QAAN,IAAkB,IAAzB;AACD;;AAED,SAASC,YAAT,CACEF,KADF,EAE8B;AAC5B,SAAOA,KAAK,CAACG,SAAN,IAAmB,IAA1B;AACD;;AAED,SAASC,qBAAT,CACEJ,KADF,EAEE;AAAA;;AACA,QAAMK,OAAO,GAAG,mCAAYL,KAAK,CAACM,UAAlB,CAAhB;;AAIA,MAAID,OAAJ,EAAa;AACX,QAAIN,kBAAkB,CAACC,KAAD,CAAtB,EAA+B;AAC7B,UACEA,KAAK,CAACC,QAAN,KAAmBM,aAAMC,YAAzB,IACAR,KAAK,CAACS,KAAN,KAAgBF,aAAMG,KAFxB,EAGE;AAAA;;AACA,sDAAAL,OAAO,CAACM,QAAR,EAAiBC,OAAjB,wGAA2BZ,KAA3B;AACD,OALD,MAKO,IACL,CAACA,KAAK,CAACC,QAAN,KAAmBM,aAAMG,KAAzB,IACCV,KAAK,CAACC,QAAN,KAAmBM,aAAMC,YAD3B,KAEAR,KAAK,CAACS,KAAN,KAAgBF,aAAMM,MAHjB,EAIL;AAAA;;AACA,uDAAAR,OAAO,CAACM,QAAR,EAAiBG,OAAjB,yGAA2Bd,KAA3B;AACD,OANM,MAMA,IAAIA,KAAK,CAACC,QAAN,KAAmBD,KAAK,CAACS,KAAzB,IAAkCT,KAAK,CAACS,KAAN,KAAgBF,aAAMQ,GAA5D,EAAiE;AAAA;;AACtE,
|
1
|
+
{"version":3,"sources":["eventReceiver.ts"],"names":["gestureHandlerEventSubscription","gestureHandlerStateChangeEventSubscription","dummyStateManager","begin","console","warn","activate","end","fail","isStateChangeEvent","event","oldState","isTouchEvent","eventType","onGestureHandlerEvent","handler","handlerTag","State","UNDETERMINED","state","BEGAN","handlers","onBegin","ACTIVE","onStart","END","onEnd","onFinalize","FAILED","CANCELLED","EventType","TOUCHES_DOWN","onTouchesDown","TOUCHES_MOVE","onTouchesMove","TOUCHES_UP","onTouchesUp","TOUCHES_CANCELLED","onTouchesCancelled","onUpdate","startListening","stopListening","DeviceEventEmitter","addListener","removeSubscription"],"mappings":"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","sourcesContent":["import { DeviceEventEmitter, EmitterSubscription } from 'react-native';\nimport { State } from '../../State';\nimport { EventType } from '../../EventType';\nimport {\n GestureTouchEvent,\n GestureUpdateEvent,\n GestureStateChangeEvent,\n} from '../gestureHandlerCommon';\nimport { GestureStateManagerType } from './gestureStateManager';\nimport { findHandler } from '../handlersRegistry';\nimport { BaseGesture } from './gesture';\n\nlet gestureHandlerEventSubscription: EmitterSubscription | null = null;\nlet gestureHandlerStateChangeEventSubscription: EmitterSubscription | null = null;\n\nconst dummyStateManager: GestureStateManagerType = {\n begin: () => {\n console.warn(\n 'You have to use react-native-reanimated in order to control the state of the gesture.'\n );\n },\n activate: () => {\n console.warn(\n 'You have to use react-native-reanimated in order to control the state of the gesture.'\n );\n },\n end: () => {\n console.warn(\n 'You have to use react-native-reanimated in order to control the state of the gesture.'\n );\n },\n fail: () => {\n console.warn(\n 'You have to use react-native-reanimated in order to control the state of the gesture.'\n );\n },\n};\n\nfunction isStateChangeEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n): event is GestureStateChangeEvent {\n // @ts-ignore oldState doesn't exist on GestureTouchEvent and that's the point\n return event.oldState != null;\n}\n\nfunction isTouchEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n): event is GestureTouchEvent {\n return event.eventType != null;\n}\n\nfunction onGestureHandlerEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n) {\n const handler = findHandler(event.handlerTag) as BaseGesture<\n Record<string, unknown>\n >;\n\n if (handler) {\n if (isStateChangeEvent(event)) {\n if (\n event.oldState === State.UNDETERMINED &&\n event.state === State.BEGAN\n ) {\n handler.handlers.onBegin?.(event);\n } else if (\n (event.oldState === State.BEGAN ||\n event.oldState === State.UNDETERMINED) &&\n event.state === State.ACTIVE\n ) {\n handler.handlers.onStart?.(event);\n } else if (event.oldState !== event.state && event.state === State.END) {\n if (event.oldState === State.ACTIVE) {\n handler.handlers.onEnd?.(event, true);\n }\n handler.handlers.onFinalize?.(event, true);\n } else if (\n (event.state === State.FAILED || event.state === State.CANCELLED) &&\n event.oldState !== event.state\n ) {\n if (event.oldState === State.ACTIVE) {\n handler.handlers.onEnd?.(event, false);\n }\n handler.handlers.onFinalize?.(event, false);\n }\n } else if (isTouchEvent(event)) {\n switch (event.eventType) {\n case EventType.TOUCHES_DOWN:\n handler.handlers?.onTouchesDown?.(event, dummyStateManager);\n break;\n case EventType.TOUCHES_MOVE:\n handler.handlers?.onTouchesMove?.(event, dummyStateManager);\n break;\n case EventType.TOUCHES_UP:\n handler.handlers?.onTouchesUp?.(event, dummyStateManager);\n break;\n case EventType.TOUCHES_CANCELLED:\n handler.handlers?.onTouchesCancelled?.(event, dummyStateManager);\n break;\n }\n } else {\n handler.handlers.onUpdate?.(event);\n }\n }\n}\n\nexport function startListening() {\n stopListening();\n\n gestureHandlerEventSubscription = DeviceEventEmitter.addListener(\n 'onGestureHandlerEvent',\n onGestureHandlerEvent\n );\n\n gestureHandlerStateChangeEventSubscription = DeviceEventEmitter.addListener(\n 'onGestureHandlerStateChange',\n onGestureHandlerEvent\n );\n}\n\nexport function stopListening() {\n if (gestureHandlerEventSubscription) {\n DeviceEventEmitter.removeSubscription(gestureHandlerEventSubscription);\n\n gestureHandlerEventSubscription = null;\n }\n\n if (gestureHandlerStateChangeEventSubscription) {\n DeviceEventEmitter.removeSubscription(\n gestureHandlerStateChangeEventSubscription\n );\n\n gestureHandlerStateChangeEventSubscription = null;\n }\n}\n"]}
|
@@ -15,10 +15,11 @@ const CALLBACK_TYPE = {
|
|
15
15
|
START: 2,
|
16
16
|
UPDATE: 3,
|
17
17
|
END: 4,
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
FINALIZE: 5,
|
19
|
+
TOUCHES_DOWN: 6,
|
20
|
+
TOUCHES_MOVE: 7,
|
21
|
+
TOUCHES_UP: 8,
|
22
|
+
TOUCHES_CANCELLED: 9
|
22
23
|
}; // Allow using CALLBACK_TYPE as object and type
|
23
24
|
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
24
25
|
|
@@ -78,6 +79,13 @@ class BaseGesture extends Gesture {
|
|
78
79
|
return this;
|
79
80
|
}
|
80
81
|
|
82
|
+
onFinalize(callback) {
|
83
|
+
this.handlers.onFinalize = callback; //@ts-ignore if callback is a worklet, the property will be available, if not then the check will return false
|
84
|
+
|
85
|
+
this.handlers.isWorklet[CALLBACK_TYPE.FINALIZE] = this.isWorklet(callback);
|
86
|
+
return this;
|
87
|
+
}
|
88
|
+
|
81
89
|
onTouchesDown(callback) {
|
82
90
|
this.config.needsPointerData = true;
|
83
91
|
this.handlers.onTouchesDown = callback;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["gesture.ts"],"names":["CALLBACK_TYPE","UNDEFINED","BEGAN","START","UPDATE","END","TOUCHES_DOWN","TOUCHES_MOVE","TOUCHES_UP","TOUCHES_CANCELLED","Gesture","BaseGesture","handlerTag","isWorklet","addDependency","key","gesture","value","config","Array","concat","withRef","ref","callback","__workletHash","undefined","onBegin","handlers","onStart","onEnd","onTouchesDown","needsPointerData","onTouchesMove","onTouchesUp","onTouchesCancelled","enabled","shouldCancelWhenOutside","hitSlop","simultaneousWithExternalGesture","gestures","requireExternalGestureToFail","initialize","current","toGestureArray","prepare","ContinousBaseGesture","onUpdate","manualActivation"],"mappings":"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","sourcesContent":["import { FlingGestureHandlerEventPayload } from '../FlingGestureHandler';\nimport { ForceTouchGestureHandlerEventPayload } from '../ForceTouchGestureHandler';\nimport {\n HitSlop,\n CommonGestureConfig,\n GestureTouchEvent,\n GestureStateChangeEvent,\n GestureUpdateEvent,\n} from '../gestureHandlerCommon';\nimport { getNextHandlerTag } from '../handlersRegistry';\nimport { GestureStateManagerType } from './gestureStateManager';\nimport { LongPressGestureHandlerEventPayload } from '../LongPressGestureHandler';\nimport { PanGestureHandlerEventPayload } from '../PanGestureHandler';\nimport { PinchGestureHandlerEventPayload } from '../PinchGestureHandler';\nimport { RotationGestureHandlerEventPayload } from '../RotationGestureHandler';\nimport { TapGestureHandlerEventPayload } from '../TapGestureHandler';\nimport { NativeViewGestureHandlerPayload } from '../NativeViewGestureHandler';\n\nexport type GestureType =\n | BaseGesture<Record<string, unknown>>\n | BaseGesture<Record<string, never>>\n | BaseGesture<TapGestureHandlerEventPayload>\n | BaseGesture<PanGestureHandlerEventPayload>\n | BaseGesture<LongPressGestureHandlerEventPayload>\n | BaseGesture<RotationGestureHandlerEventPayload>\n | BaseGesture<PinchGestureHandlerEventPayload>\n | BaseGesture<FlingGestureHandlerEventPayload>\n | BaseGesture<ForceTouchGestureHandlerEventPayload>\n | BaseGesture<NativeViewGestureHandlerPayload>;\n\nexport type GestureRef =\n | number\n | GestureType\n | React.RefObject<GestureType | undefined>\n | React.RefObject<React.ComponentType | undefined>; // allow adding a ref to a gesture handler\nexport interface BaseGestureConfig\n extends CommonGestureConfig,\n Record<string, unknown> {\n ref?: React.MutableRefObject<GestureType | undefined>;\n requireToFail?: GestureRef[];\n simultaneousWith?: GestureRef[];\n needsPointerData?: boolean;\n manualActivation?: boolean;\n}\n\ntype TouchEventHandlerType = (\n event: GestureTouchEvent,\n stateManager: GestureStateManagerType\n) => void;\n\nexport type HandlerCallbacks<EventPayloadT extends Record<string, unknown>> = {\n handlerTag: number;\n onBegin?: (event: GestureStateChangeEvent<EventPayloadT>) => void;\n onStart?: (event: GestureStateChangeEvent<EventPayloadT>) => void;\n onEnd?: (\n event: GestureStateChangeEvent<EventPayloadT>,\n success: boolean\n ) => void;\n onUpdate?: (event: GestureUpdateEvent<EventPayloadT>) => void;\n onTouchesDown?: TouchEventHandlerType;\n onTouchesMove?: TouchEventHandlerType;\n onTouchesUp?: TouchEventHandlerType;\n onTouchesCancelled?: TouchEventHandlerType;\n isWorklet: boolean[];\n};\n\nexport const CALLBACK_TYPE = {\n UNDEFINED: 0,\n BEGAN: 1,\n START: 2,\n UPDATE: 3,\n END: 4,\n TOUCHES_DOWN: 5,\n TOUCHES_MOVE: 6,\n TOUCHES_UP: 7,\n TOUCHES_CANCELLED: 8,\n} as const;\n\n// Allow using CALLBACK_TYPE as object and type\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport type CALLBACK_TYPE = typeof CALLBACK_TYPE[keyof typeof CALLBACK_TYPE];\n\nexport abstract class Gesture {\n /**\n * Return array of gestures, providing the same interface for creating and updating\n * handlers, no matter which object was used to create gesture instance.\n */\n abstract toGestureArray(): GestureType[];\n\n /**\n * Assign handlerTag to the gesture instance and set ref.current (if a ref is set)\n */\n abstract initialize(): void;\n\n /**\n * Make sure that values of properties defining relations are arrays. Do any necessary\n * preprocessing required to configure relations between handlers. Called just before\n * updating the handler on the native side.\n */\n abstract prepare(): void;\n}\n\nexport abstract class BaseGesture<\n EventPayloadT extends Record<string, unknown>\n> extends Gesture {\n public handlerTag = -1;\n public handlerName = '';\n public config: BaseGestureConfig = {};\n public handlers: HandlerCallbacks<EventPayloadT> = {\n handlerTag: -1,\n isWorklet: [false, false, false, false],\n };\n\n private addDependency(\n key: 'simultaneousWith' | 'requireToFail',\n gesture: Exclude<GestureRef, number>\n ) {\n const value = this.config[key];\n this.config[key] = value\n ? Array<GestureRef>().concat(value, gesture)\n : [gesture];\n }\n\n withRef(ref: React.MutableRefObject<GestureType | undefined>) {\n this.config.ref = ref;\n return this;\n }\n\n protected isWorklet(\n callback:\n | TouchEventHandlerType\n | ((event: GestureUpdateEvent<EventPayloadT>) => void)\n | ((event: GestureStateChangeEvent<EventPayloadT>) => void)\n ) {\n //@ts-ignore if callback is a worklet, the property will be available, if not then the check will return false\n return callback.__workletHash !== undefined;\n }\n\n onBegin(callback: (event: GestureStateChangeEvent<EventPayloadT>) => void) {\n this.handlers.onBegin = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.BEGAN] = this.isWorklet(callback);\n return this;\n }\n\n onStart(callback: (event: GestureStateChangeEvent<EventPayloadT>) => void) {\n this.handlers.onStart = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.START] = this.isWorklet(callback);\n return this;\n }\n\n onEnd(\n callback: (\n event: GestureStateChangeEvent<EventPayloadT>,\n success: boolean\n ) => void\n ) {\n this.handlers.onEnd = callback;\n //@ts-ignore if callback is a worklet, the property will be available, if not then the check will return false\n this.handlers.isWorklet[CALLBACK_TYPE.END] = this.isWorklet(callback);\n return this;\n }\n\n onTouchesDown(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesDown = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_DOWN] = this.isWorklet(\n callback\n );\n\n return this;\n }\n\n onTouchesMove(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesMove = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_MOVE] = this.isWorklet(\n callback\n );\n\n return this;\n }\n\n onTouchesUp(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesUp = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_UP] = this.isWorklet(\n callback\n );\n\n return this;\n }\n\n onTouchesCancelled(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesCancelled = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_CANCELLED] = this.isWorklet(\n callback\n );\n\n return this;\n }\n\n enabled(enabled: boolean) {\n this.config.enabled = enabled;\n return this;\n }\n\n shouldCancelWhenOutside(value: boolean) {\n this.config.shouldCancelWhenOutside = value;\n return this;\n }\n\n hitSlop(hitSlop: HitSlop) {\n this.config.hitSlop = hitSlop;\n return this;\n }\n\n simultaneousWithExternalGesture(...gestures: Exclude<GestureRef, number>[]) {\n for (const gesture of gestures) {\n this.addDependency('simultaneousWith', gesture);\n }\n return this;\n }\n\n requireExternalGestureToFail(...gestures: Exclude<GestureRef, number>[]) {\n for (const gesture of gestures) {\n this.addDependency('requireToFail', gesture);\n }\n return this;\n }\n\n initialize() {\n this.handlerTag = getNextHandlerTag();\n this.handlers = { ...this.handlers, handlerTag: this.handlerTag };\n\n if (this.config.ref) {\n this.config.ref.current = this as GestureType;\n }\n }\n\n toGestureArray(): GestureType[] {\n return [this as GestureType];\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n prepare() {}\n}\n\nexport abstract class ContinousBaseGesture<\n EventPayloadT extends Record<string, unknown>\n> extends BaseGesture<EventPayloadT> {\n onUpdate(callback: (event: GestureUpdateEvent<EventPayloadT>) => void) {\n this.handlers.onUpdate = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.UPDATE] = this.isWorklet(callback);\n return this;\n }\n\n manualActivation(manualActivation: boolean) {\n this.config.manualActivation = manualActivation;\n return this;\n }\n}\n"]}
|
1
|
+
{"version":3,"sources":["gesture.ts"],"names":["CALLBACK_TYPE","UNDEFINED","BEGAN","START","UPDATE","END","FINALIZE","TOUCHES_DOWN","TOUCHES_MOVE","TOUCHES_UP","TOUCHES_CANCELLED","Gesture","BaseGesture","handlerTag","isWorklet","addDependency","key","gesture","value","config","Array","concat","withRef","ref","callback","__workletHash","undefined","onBegin","handlers","onStart","onEnd","onFinalize","onTouchesDown","needsPointerData","onTouchesMove","onTouchesUp","onTouchesCancelled","enabled","shouldCancelWhenOutside","hitSlop","simultaneousWithExternalGesture","gestures","requireExternalGestureToFail","initialize","current","toGestureArray","prepare","ContinousBaseGesture","onUpdate","manualActivation"],"mappings":"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","sourcesContent":["import { FlingGestureHandlerEventPayload } from '../FlingGestureHandler';\nimport { ForceTouchGestureHandlerEventPayload } from '../ForceTouchGestureHandler';\nimport {\n HitSlop,\n CommonGestureConfig,\n GestureTouchEvent,\n GestureStateChangeEvent,\n GestureUpdateEvent,\n} from '../gestureHandlerCommon';\nimport { getNextHandlerTag } from '../handlersRegistry';\nimport { GestureStateManagerType } from './gestureStateManager';\nimport { LongPressGestureHandlerEventPayload } from '../LongPressGestureHandler';\nimport { PanGestureHandlerEventPayload } from '../PanGestureHandler';\nimport { PinchGestureHandlerEventPayload } from '../PinchGestureHandler';\nimport { RotationGestureHandlerEventPayload } from '../RotationGestureHandler';\nimport { TapGestureHandlerEventPayload } from '../TapGestureHandler';\nimport { NativeViewGestureHandlerPayload } from '../NativeViewGestureHandler';\n\nexport type GestureType =\n | BaseGesture<Record<string, unknown>>\n | BaseGesture<Record<string, never>>\n | BaseGesture<TapGestureHandlerEventPayload>\n | BaseGesture<PanGestureHandlerEventPayload>\n | BaseGesture<LongPressGestureHandlerEventPayload>\n | BaseGesture<RotationGestureHandlerEventPayload>\n | BaseGesture<PinchGestureHandlerEventPayload>\n | BaseGesture<FlingGestureHandlerEventPayload>\n | BaseGesture<ForceTouchGestureHandlerEventPayload>\n | BaseGesture<NativeViewGestureHandlerPayload>;\n\nexport type GestureRef =\n | number\n | GestureType\n | React.RefObject<GestureType | undefined>\n | React.RefObject<React.ComponentType | undefined>; // allow adding a ref to a gesture handler\nexport interface BaseGestureConfig\n extends CommonGestureConfig,\n Record<string, unknown> {\n ref?: React.MutableRefObject<GestureType | undefined>;\n requireToFail?: GestureRef[];\n simultaneousWith?: GestureRef[];\n needsPointerData?: boolean;\n manualActivation?: boolean;\n}\n\ntype TouchEventHandlerType = (\n event: GestureTouchEvent,\n stateManager: GestureStateManagerType\n) => void;\n\nexport type HandlerCallbacks<EventPayloadT extends Record<string, unknown>> = {\n handlerTag: number;\n onBegin?: (event: GestureStateChangeEvent<EventPayloadT>) => void;\n onStart?: (event: GestureStateChangeEvent<EventPayloadT>) => void;\n onEnd?: (\n event: GestureStateChangeEvent<EventPayloadT>,\n success: boolean\n ) => void;\n onFinalize?: (\n event: GestureStateChangeEvent<EventPayloadT>,\n success: boolean\n ) => void;\n onUpdate?: (event: GestureUpdateEvent<EventPayloadT>) => void;\n onTouchesDown?: TouchEventHandlerType;\n onTouchesMove?: TouchEventHandlerType;\n onTouchesUp?: TouchEventHandlerType;\n onTouchesCancelled?: TouchEventHandlerType;\n isWorklet: boolean[];\n};\n\nexport const CALLBACK_TYPE = {\n UNDEFINED: 0,\n BEGAN: 1,\n START: 2,\n UPDATE: 3,\n END: 4,\n FINALIZE: 5,\n TOUCHES_DOWN: 6,\n TOUCHES_MOVE: 7,\n TOUCHES_UP: 8,\n TOUCHES_CANCELLED: 9,\n} as const;\n\n// Allow using CALLBACK_TYPE as object and type\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport type CALLBACK_TYPE = typeof CALLBACK_TYPE[keyof typeof CALLBACK_TYPE];\n\nexport abstract class Gesture {\n /**\n * Return array of gestures, providing the same interface for creating and updating\n * handlers, no matter which object was used to create gesture instance.\n */\n abstract toGestureArray(): GestureType[];\n\n /**\n * Assign handlerTag to the gesture instance and set ref.current (if a ref is set)\n */\n abstract initialize(): void;\n\n /**\n * Make sure that values of properties defining relations are arrays. Do any necessary\n * preprocessing required to configure relations between handlers. Called just before\n * updating the handler on the native side.\n */\n abstract prepare(): void;\n}\n\nexport abstract class BaseGesture<\n EventPayloadT extends Record<string, unknown>\n> extends Gesture {\n public handlerTag = -1;\n public handlerName = '';\n public config: BaseGestureConfig = {};\n public handlers: HandlerCallbacks<EventPayloadT> = {\n handlerTag: -1,\n isWorklet: [false, false, false, false],\n };\n\n private addDependency(\n key: 'simultaneousWith' | 'requireToFail',\n gesture: Exclude<GestureRef, number>\n ) {\n const value = this.config[key];\n this.config[key] = value\n ? Array<GestureRef>().concat(value, gesture)\n : [gesture];\n }\n\n withRef(ref: React.MutableRefObject<GestureType | undefined>) {\n this.config.ref = ref;\n return this;\n }\n\n protected isWorklet(\n callback:\n | TouchEventHandlerType\n | ((event: GestureUpdateEvent<EventPayloadT>) => void)\n | ((event: GestureStateChangeEvent<EventPayloadT>) => void)\n ) {\n //@ts-ignore if callback is a worklet, the property will be available, if not then the check will return false\n return callback.__workletHash !== undefined;\n }\n\n onBegin(callback: (event: GestureStateChangeEvent<EventPayloadT>) => void) {\n this.handlers.onBegin = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.BEGAN] = this.isWorklet(callback);\n return this;\n }\n\n onStart(callback: (event: GestureStateChangeEvent<EventPayloadT>) => void) {\n this.handlers.onStart = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.START] = this.isWorklet(callback);\n return this;\n }\n\n onEnd(\n callback: (\n event: GestureStateChangeEvent<EventPayloadT>,\n success: boolean\n ) => void\n ) {\n this.handlers.onEnd = callback;\n //@ts-ignore if callback is a worklet, the property will be available, if not then the check will return false\n this.handlers.isWorklet[CALLBACK_TYPE.END] = this.isWorklet(callback);\n return this;\n }\n\n onFinalize(\n callback: (\n event: GestureStateChangeEvent<EventPayloadT>,\n success: boolean\n ) => void\n ) {\n this.handlers.onFinalize = callback;\n //@ts-ignore if callback is a worklet, the property will be available, if not then the check will return false\n this.handlers.isWorklet[CALLBACK_TYPE.FINALIZE] = this.isWorklet(callback);\n return this;\n }\n\n onTouchesDown(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesDown = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_DOWN] = this.isWorklet(\n callback\n );\n\n return this;\n }\n\n onTouchesMove(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesMove = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_MOVE] = this.isWorklet(\n callback\n );\n\n return this;\n }\n\n onTouchesUp(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesUp = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_UP] = this.isWorklet(\n callback\n );\n\n return this;\n }\n\n onTouchesCancelled(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesCancelled = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_CANCELLED] = this.isWorklet(\n callback\n );\n\n return this;\n }\n\n enabled(enabled: boolean) {\n this.config.enabled = enabled;\n return this;\n }\n\n shouldCancelWhenOutside(value: boolean) {\n this.config.shouldCancelWhenOutside = value;\n return this;\n }\n\n hitSlop(hitSlop: HitSlop) {\n this.config.hitSlop = hitSlop;\n return this;\n }\n\n simultaneousWithExternalGesture(...gestures: Exclude<GestureRef, number>[]) {\n for (const gesture of gestures) {\n this.addDependency('simultaneousWith', gesture);\n }\n return this;\n }\n\n requireExternalGestureToFail(...gestures: Exclude<GestureRef, number>[]) {\n for (const gesture of gestures) {\n this.addDependency('requireToFail', gesture);\n }\n return this;\n }\n\n initialize() {\n this.handlerTag = getNextHandlerTag();\n this.handlers = { ...this.handlers, handlerTag: this.handlerTag };\n\n if (this.config.ref) {\n this.config.ref.current = this as GestureType;\n }\n }\n\n toGestureArray(): GestureType[] {\n return [this as GestureType];\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n prepare() {}\n}\n\nexport abstract class ContinousBaseGesture<\n EventPayloadT extends Record<string, unknown>\n> extends BaseGesture<EventPayloadT> {\n onUpdate(callback: (event: GestureUpdateEvent<EventPayloadT>) => void) {\n this.handlers.onUpdate = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.UPDATE] = this.isWorklet(callback);\n return this;\n }\n\n manualActivation(manualActivation: boolean) {\n this.config.manualActivation = manualActivation;\n return this;\n }\n}\n"]}
|
@@ -179,6 +179,9 @@ function useAnimatedGesture(preparedGesture) {
|
|
179
179
|
case CALLBACK_TYPE.END:
|
180
180
|
return gesture.onEnd;
|
181
181
|
|
182
|
+
case CALLBACK_TYPE.FINALIZE:
|
183
|
+
return gesture.onFinalize;
|
184
|
+
|
182
185
|
case CALLBACK_TYPE.TOUCHES_DOWN:
|
183
186
|
return gesture.onTouchesDown;
|
184
187
|
|
@@ -253,9 +256,17 @@ function useAnimatedGesture(preparedGesture) {
|
|
253
256
|
} else if ((event.oldState === State.BEGAN || event.oldState === State.UNDETERMINED) && event.state === State.ACTIVE) {
|
254
257
|
runWorklet(CALLBACK_TYPE.START, gesture, event);
|
255
258
|
} else if (event.oldState !== event.state && event.state === State.END) {
|
256
|
-
|
259
|
+
if (event.oldState === State.ACTIVE) {
|
260
|
+
runWorklet(CALLBACK_TYPE.END, gesture, event, true);
|
261
|
+
}
|
262
|
+
|
263
|
+
runWorklet(CALLBACK_TYPE.FINALIZE, gesture, event, true);
|
257
264
|
} else if ((event.state === State.FAILED || event.state === State.CANCELLED) && event.state !== event.oldState) {
|
258
|
-
|
265
|
+
if (event.oldState === State.ACTIVE) {
|
266
|
+
runWorklet(CALLBACK_TYPE.END, gesture, event, false);
|
267
|
+
}
|
268
|
+
|
269
|
+
runWorklet(CALLBACK_TYPE.FINALIZE, gesture, event, false);
|
259
270
|
}
|
260
271
|
} else if (isTouchEvent(event)) {
|
261
272
|
if (!stateControllers[i]) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["GestureDetector.tsx"],"names":["React","useEffect","useRef","BaseGesture","CALLBACK_TYPE","Reanimated","registerHandler","unregisterHandler","RNGestureHandlerModule","baseGestureHandlerWithMonitorProps","filterConfig","findNodeHandle","GestureStateManager","flingGestureHandlerProps","forceTouchGestureHandlerProps","longPressGestureHandlerProps","panGestureHandlerProps","panGestureHandlerCustomNativeProps","tapGestureHandlerProps","State","EventType","ALLOWED_PROPS","convertToHandlerTag","ref","handlerTag","current","extractValidHandlerTags","interactionGroup","map","filter","tag","dropHandlers","preparedGesture","handler","config","dropGestureHandler","attachHandlers","gestureConfig","gesture","viewTag","useAnimated","firstExecution","initialize","setImmediate","prepare","createGestureHandler","handlerName","requireToFail","simultaneousWith","updateGestureHandler","simultaneousHandlers","waitFor","attachGestureHandler","animatedHandlers","value","g","handlers","updateHandlers","i","length","needsToReattach","useAnimatedGesture","isStateChangeEvent","event","oldState","isTouchEvent","eventType","getHandler","type","BEGAN","onBegin","START","onStart","UPDATE","onUpdate","END","onEnd","TOUCHES_DOWN","onTouchesDown","TOUCHES_MOVE","onTouchesMove","TOUCHES_UP","onTouchesUp","TOUCHES_CANCELLED","onTouchesCancelled","touchEventTypeToCallbackType","UNDEFINED","runWorklet","args","isWorklet","console","warn","sharedHandlersCallbacks","useSharedValue","stateControllers","callback","currentCallback","UNDETERMINED","state","ACTIVE","FAILED","CANCELLED","create","useEvent","animatedEventHandler","GestureDetector","props","toGestureArray","find","reduce","prev","viewRef","firstRenderRef","Error","children","Wrap","Component","render","child","Children","only","cloneElement","collapsable","AnimatedWrap","default","createAnimatedComponent"],"mappings":"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","sourcesContent":["import React, { useEffect, useRef } from 'react';\nimport {\n GestureType,\n HandlerCallbacks,\n BaseGesture,\n GestureRef,\n CALLBACK_TYPE,\n} from './gesture';\nimport { Reanimated, SharedValue } from './reanimatedWrapper';\nimport { registerHandler, unregisterHandler } from '../handlersRegistry';\nimport RNGestureHandlerModule from '../../RNGestureHandlerModule';\nimport {\n baseGestureHandlerWithMonitorProps,\n filterConfig,\n findNodeHandle,\n GestureTouchEvent,\n GestureUpdateEvent,\n GestureStateChangeEvent,\n} from '../gestureHandlerCommon';\nimport {\n GestureStateManager,\n GestureStateManagerType,\n} from './gestureStateManager';\nimport { flingGestureHandlerProps } from '../FlingGestureHandler';\nimport { forceTouchGestureHandlerProps } from '../ForceTouchGestureHandler';\nimport { longPressGestureHandlerProps } from '../LongPressGestureHandler';\nimport {\n panGestureHandlerProps,\n panGestureHandlerCustomNativeProps,\n} from '../PanGestureHandler';\nimport { tapGestureHandlerProps } from '../TapGestureHandler';\nimport { State } from '../../State';\nimport { EventType } from '../../EventType';\nimport { ComposedGesture } from './gestureComposition';\n\nconst ALLOWED_PROPS = [\n ...baseGestureHandlerWithMonitorProps,\n ...tapGestureHandlerProps,\n ...panGestureHandlerProps,\n ...panGestureHandlerCustomNativeProps,\n ...longPressGestureHandlerProps,\n ...forceTouchGestureHandlerProps,\n ...flingGestureHandlerProps,\n];\n\nexport type GestureConfigReference = {\n config: GestureType[];\n animatedEventHandler: unknown;\n animatedHandlers: SharedValue<\n HandlerCallbacks<Record<string, unknown>>[] | null\n > | null;\n firstExecution: boolean;\n useAnimated: boolean;\n};\n\nfunction convertToHandlerTag(ref: GestureRef): number {\n if (typeof ref === 'number') {\n return ref;\n } else if (ref instanceof BaseGesture) {\n return ref.handlerTag;\n } else {\n // @ts-ignore in this case it should be a ref either to gesture object or\n // a gesture handler component, in both cases handlerTag property exists\n return ref.current?.handlerTag ?? -1;\n }\n}\n\nfunction extractValidHandlerTags(interactionGroup: GestureRef[] | undefined) {\n return (\n interactionGroup?.map(convertToHandlerTag)?.filter((tag) => tag > 0) ?? []\n );\n}\n\nfunction dropHandlers(preparedGesture: GestureConfigReference) {\n for (const handler of preparedGesture.config) {\n RNGestureHandlerModule.dropGestureHandler(handler.handlerTag);\n\n unregisterHandler(handler.handlerTag);\n }\n}\n\ninterface AttachHandlersConfig {\n preparedGesture: GestureConfigReference;\n gestureConfig: ComposedGesture | GestureType | undefined;\n gesture: GestureType[];\n viewTag: number;\n useAnimated: boolean;\n}\n\nfunction attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n useAnimated,\n}: AttachHandlersConfig) {\n if (!preparedGesture.firstExecution) {\n gestureConfig?.initialize();\n } else {\n preparedGesture.firstExecution = false;\n }\n\n // use setImmediate to extract handlerTags, because all refs should be initialized\n // when it's ran\n setImmediate(() => {\n gestureConfig?.prepare();\n });\n\n for (const handler of gesture) {\n RNGestureHandlerModule.createGestureHandler(\n handler.handlerName,\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS)\n );\n\n registerHandler(handler.handlerTag, handler);\n\n // use setImmediate to extract handlerTags, because all refs should be initialized\n // when it's ran\n setImmediate(() => {\n let requireToFail: number[] = [];\n if (handler.config.requireToFail) {\n requireToFail = extractValidHandlerTags(handler.config.requireToFail);\n }\n\n let simultaneousWith: number[] = [];\n if (handler.config.simultaneousWith) {\n simultaneousWith = extractValidHandlerTags(\n handler.config.simultaneousWith\n );\n }\n\n RNGestureHandlerModule.updateGestureHandler(\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS, {\n simultaneousHandlers: simultaneousWith,\n waitFor: requireToFail,\n })\n );\n });\n }\n preparedGesture.config = gesture;\n\n for (const gesture of preparedGesture.config) {\n RNGestureHandlerModule.attachGestureHandler(\n gesture.handlerTag,\n viewTag,\n !useAnimated // send direct events when using animatedGesture, device events otherwise\n );\n }\n\n if (preparedGesture.animatedHandlers) {\n preparedGesture.animatedHandlers.value = (gesture.map(\n (g) => g.handlers\n ) as unknown) as HandlerCallbacks<Record<string, unknown>>[];\n }\n}\n\nfunction updateHandlers(\n preparedGesture: GestureConfigReference,\n gestureConfig: ComposedGesture | GestureType | undefined,\n gesture: GestureType[]\n) {\n gestureConfig?.prepare();\n\n for (let i = 0; i < gesture.length; i++) {\n const handler = preparedGesture.config[i];\n\n gesture[i].handlerTag = handler.handlerTag;\n gesture[i].handlers.handlerTag = handler.handlerTag;\n }\n\n // use setImmediate to extract handlerTags, because when it's ran, all refs should be updated\n // and handlerTags in BaseGesture references should be updated in the loop above (we need to wait\n // in case of external relations)\n setImmediate(() => {\n for (let i = 0; i < gesture.length; i++) {\n const handler = preparedGesture.config[i];\n\n handler.config = gesture[i].config;\n handler.handlers = gesture[i].handlers;\n handler.handlers.handlerTag = handler.handlerTag;\n\n const requireToFail = extractValidHandlerTags(\n handler.config.requireToFail\n );\n\n const simultaneousWith = extractValidHandlerTags(\n handler.config.simultaneousWith\n );\n\n RNGestureHandlerModule.updateGestureHandler(\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS, {\n simultaneousHandlers: simultaneousWith,\n waitFor: requireToFail,\n })\n );\n\n registerHandler(handler.handlerTag, handler);\n }\n\n if (preparedGesture.animatedHandlers) {\n preparedGesture.animatedHandlers.value = (preparedGesture.config.map(\n (g) => g.handlers\n ) as unknown) as HandlerCallbacks<Record<string, unknown>>[];\n }\n });\n}\n\nfunction needsToReattach(\n preparedGesture: GestureConfigReference,\n gesture: GestureType[]\n) {\n if (gesture.length !== preparedGesture.config.length) {\n return true;\n }\n for (let i = 0; i < gesture.length; i++) {\n if (gesture[i].handlerName !== preparedGesture.config[i].handlerName) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction useAnimatedGesture(preparedGesture: GestureConfigReference) {\n if (!Reanimated) {\n return;\n }\n\n function isStateChangeEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n ): event is GestureStateChangeEvent {\n 'worklet';\n // @ts-ignore Yes, the oldState prop is missing on GestureTouchEvent, that's the point\n return event.oldState != null;\n }\n\n function isTouchEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n ): event is GestureTouchEvent {\n 'worklet';\n return event.eventType != null;\n }\n\n function getHandler(\n type: CALLBACK_TYPE,\n gesture: HandlerCallbacks<Record<string, unknown>>\n ) {\n 'worklet';\n switch (type) {\n case CALLBACK_TYPE.BEGAN:\n return gesture.onBegin;\n case CALLBACK_TYPE.START:\n return gesture.onStart;\n case CALLBACK_TYPE.UPDATE:\n return gesture.onUpdate;\n case CALLBACK_TYPE.END:\n return gesture.onEnd;\n case CALLBACK_TYPE.TOUCHES_DOWN:\n return gesture.onTouchesDown;\n case CALLBACK_TYPE.TOUCHES_MOVE:\n return gesture.onTouchesMove;\n case CALLBACK_TYPE.TOUCHES_UP:\n return gesture.onTouchesUp;\n case CALLBACK_TYPE.TOUCHES_CANCELLED:\n return gesture.onTouchesCancelled;\n }\n }\n\n function touchEventTypeToCallbackType(eventType: EventType): CALLBACK_TYPE {\n 'worklet';\n switch (eventType) {\n case EventType.TOUCHES_DOWN:\n return CALLBACK_TYPE.TOUCHES_DOWN;\n case EventType.TOUCHES_MOVE:\n return CALLBACK_TYPE.TOUCHES_MOVE;\n case EventType.TOUCHES_UP:\n return CALLBACK_TYPE.TOUCHES_UP;\n case EventType.TOUCHES_CANCELLED:\n return CALLBACK_TYPE.TOUCHES_CANCELLED;\n }\n return CALLBACK_TYPE.UNDEFINED;\n }\n\n function runWorklet(\n type: CALLBACK_TYPE,\n gesture: HandlerCallbacks<Record<string, unknown>>,\n event: GestureStateChangeEvent | GestureUpdateEvent | GestureTouchEvent,\n ...args: any[]\n ) {\n 'worklet';\n const handler = getHandler(type, gesture);\n if (gesture.isWorklet[type]) {\n // @ts-ignore Logic below makes sure the correct event is send to the\n // correct handler.\n handler?.(event, ...args);\n } else if (handler) {\n console.warn('Animated gesture callback must be a worklet');\n }\n }\n\n // Hooks are called conditionally, but the condition is whether the\n // react-native-reanimated is installed, which shouldn't change while running\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const sharedHandlersCallbacks = Reanimated.useSharedValue<\n HandlerCallbacks<Record<string, unknown>>[] | null\n >(null);\n\n // not every gesture needs a state controller, init them lazily\n const stateControllers: GestureStateManagerType[] = [];\n\n const callback = (\n event: GestureStateChangeEvent | GestureUpdateEvent | GestureTouchEvent\n ) => {\n 'worklet';\n\n const currentCallback = sharedHandlersCallbacks.value;\n if (!currentCallback) {\n return;\n }\n\n for (let i = 0; i < currentCallback.length; i++) {\n const gesture = currentCallback[i];\n\n if (event.handlerTag === gesture.handlerTag) {\n if (isStateChangeEvent(event)) {\n if (\n event.oldState === State.UNDETERMINED &&\n event.state === State.BEGAN\n ) {\n runWorklet(CALLBACK_TYPE.BEGAN, gesture, event);\n } else if (\n (event.oldState === State.BEGAN ||\n event.oldState === State.UNDETERMINED) &&\n event.state === State.ACTIVE\n ) {\n runWorklet(CALLBACK_TYPE.START, gesture, event);\n } else if (\n event.oldState !== event.state &&\n event.state === State.END\n ) {\n runWorklet(CALLBACK_TYPE.END, gesture, event, true);\n } else if (\n (event.state === State.FAILED || event.state === State.CANCELLED) &&\n event.state !== event.oldState\n ) {\n runWorklet(CALLBACK_TYPE.END, gesture, event, false);\n }\n } else if (isTouchEvent(event)) {\n if (!stateControllers[i]) {\n stateControllers[i] = GestureStateManager.create(event.handlerTag);\n }\n\n if (event.eventType !== EventType.UNDETERMINED) {\n runWorklet(\n touchEventTypeToCallbackType(event.eventType),\n gesture,\n event,\n stateControllers[i]\n );\n }\n } else {\n runWorklet(CALLBACK_TYPE.UPDATE, gesture, event);\n }\n }\n }\n };\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const event = Reanimated.useEvent(\n callback,\n ['onGestureHandlerStateChange', 'onGestureHandlerEvent'],\n true\n );\n\n preparedGesture.animatedEventHandler = event;\n preparedGesture.animatedHandlers = sharedHandlersCallbacks;\n}\n\ninterface GestureDetectorProps {\n gesture?: ComposedGesture | GestureType;\n}\nexport const GestureDetector: React.FunctionComponent<GestureDetectorProps> = (\n props\n) => {\n const gestureConfig = props.gesture;\n const gesture = gestureConfig?.toGestureArray?.() ?? [];\n const useAnimated =\n gesture.find((gesture) =>\n gesture.handlers.isWorklet.reduce((prev, current) => prev || current)\n ) != null;\n const viewRef = useRef(null);\n const firstRenderRef = useRef(true);\n\n const preparedGesture = React.useRef<GestureConfigReference>({\n config: gesture,\n animatedEventHandler: null,\n animatedHandlers: null,\n firstExecution: true,\n useAnimated: useAnimated,\n }).current;\n\n if (useAnimated !== preparedGesture.useAnimated) {\n throw new Error(\n 'You cannot change whether you are using gesture or animatedGesture while the app is running'\n );\n }\n\n if (preparedGesture.firstExecution) {\n gestureConfig?.initialize?.();\n }\n\n if (useAnimated) {\n // Whether animatedGesture or gesture is used shouldn't change\n // during while an app is running\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useAnimatedGesture(preparedGesture);\n }\n\n useEffect(() => {\n firstRenderRef.current = true;\n const viewTag = findNodeHandle(viewRef.current) as number;\n attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n useAnimated,\n });\n\n return () => {\n dropHandlers(preparedGesture);\n };\n }, []);\n\n useEffect(() => {\n if (!firstRenderRef.current) {\n const viewTag = findNodeHandle(viewRef.current) as number;\n\n if (needsToReattach(preparedGesture, gesture)) {\n dropHandlers(preparedGesture);\n attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n useAnimated,\n });\n } else {\n updateHandlers(preparedGesture, gestureConfig, gesture);\n }\n } else {\n firstRenderRef.current = false;\n }\n }, [props]);\n\n if (useAnimated) {\n return (\n <AnimatedWrap\n ref={viewRef}\n onGestureHandlerEvent={preparedGesture.animatedEventHandler}>\n {props.children}\n </AnimatedWrap>\n );\n } else {\n return <Wrap ref={viewRef}>{props.children}</Wrap>;\n }\n};\n\nclass Wrap extends React.Component<{ onGestureHandlerEvent?: unknown }> {\n render() {\n // I don't think that fighting with types over such a simple function is worth it\n // The only thing it does is add 'collapsable: false' to the child component\n // to make sure it is in the native view hierarchy so the detector can find\n // correct viewTag to attach to.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const child: any = React.Children.only(this.props.children);\n\n return React.cloneElement(\n child,\n { collapsable: false },\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n child.props.children\n );\n }\n}\n\nconst AnimatedWrap = Reanimated?.default?.createAnimatedComponent(Wrap) ?? Wrap;\n"]}
|
1
|
+
{"version":3,"sources":["GestureDetector.tsx"],"names":["React","useEffect","useRef","BaseGesture","CALLBACK_TYPE","Reanimated","registerHandler","unregisterHandler","RNGestureHandlerModule","baseGestureHandlerWithMonitorProps","filterConfig","findNodeHandle","GestureStateManager","flingGestureHandlerProps","forceTouchGestureHandlerProps","longPressGestureHandlerProps","panGestureHandlerProps","panGestureHandlerCustomNativeProps","tapGestureHandlerProps","State","EventType","ALLOWED_PROPS","convertToHandlerTag","ref","handlerTag","current","extractValidHandlerTags","interactionGroup","map","filter","tag","dropHandlers","preparedGesture","handler","config","dropGestureHandler","attachHandlers","gestureConfig","gesture","viewTag","useAnimated","firstExecution","initialize","setImmediate","prepare","createGestureHandler","handlerName","requireToFail","simultaneousWith","updateGestureHandler","simultaneousHandlers","waitFor","attachGestureHandler","animatedHandlers","value","g","handlers","updateHandlers","i","length","needsToReattach","useAnimatedGesture","isStateChangeEvent","event","oldState","isTouchEvent","eventType","getHandler","type","BEGAN","onBegin","START","onStart","UPDATE","onUpdate","END","onEnd","FINALIZE","onFinalize","TOUCHES_DOWN","onTouchesDown","TOUCHES_MOVE","onTouchesMove","TOUCHES_UP","onTouchesUp","TOUCHES_CANCELLED","onTouchesCancelled","touchEventTypeToCallbackType","UNDEFINED","runWorklet","args","isWorklet","console","warn","sharedHandlersCallbacks","useSharedValue","stateControllers","callback","currentCallback","UNDETERMINED","state","ACTIVE","FAILED","CANCELLED","create","useEvent","animatedEventHandler","GestureDetector","props","toGestureArray","find","reduce","prev","viewRef","firstRenderRef","Error","children","Wrap","Component","render","child","Children","only","cloneElement","collapsable","AnimatedWrap","default","createAnimatedComponent"],"mappings":"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","sourcesContent":["import React, { useEffect, useRef } from 'react';\nimport {\n GestureType,\n HandlerCallbacks,\n BaseGesture,\n GestureRef,\n CALLBACK_TYPE,\n} from './gesture';\nimport { Reanimated, SharedValue } from './reanimatedWrapper';\nimport { registerHandler, unregisterHandler } from '../handlersRegistry';\nimport RNGestureHandlerModule from '../../RNGestureHandlerModule';\nimport {\n baseGestureHandlerWithMonitorProps,\n filterConfig,\n findNodeHandle,\n GestureTouchEvent,\n GestureUpdateEvent,\n GestureStateChangeEvent,\n} from '../gestureHandlerCommon';\nimport {\n GestureStateManager,\n GestureStateManagerType,\n} from './gestureStateManager';\nimport { flingGestureHandlerProps } from '../FlingGestureHandler';\nimport { forceTouchGestureHandlerProps } from '../ForceTouchGestureHandler';\nimport { longPressGestureHandlerProps } from '../LongPressGestureHandler';\nimport {\n panGestureHandlerProps,\n panGestureHandlerCustomNativeProps,\n} from '../PanGestureHandler';\nimport { tapGestureHandlerProps } from '../TapGestureHandler';\nimport { State } from '../../State';\nimport { EventType } from '../../EventType';\nimport { ComposedGesture } from './gestureComposition';\n\nconst ALLOWED_PROPS = [\n ...baseGestureHandlerWithMonitorProps,\n ...tapGestureHandlerProps,\n ...panGestureHandlerProps,\n ...panGestureHandlerCustomNativeProps,\n ...longPressGestureHandlerProps,\n ...forceTouchGestureHandlerProps,\n ...flingGestureHandlerProps,\n];\n\nexport type GestureConfigReference = {\n config: GestureType[];\n animatedEventHandler: unknown;\n animatedHandlers: SharedValue<\n HandlerCallbacks<Record<string, unknown>>[] | null\n > | null;\n firstExecution: boolean;\n useAnimated: boolean;\n};\n\nfunction convertToHandlerTag(ref: GestureRef): number {\n if (typeof ref === 'number') {\n return ref;\n } else if (ref instanceof BaseGesture) {\n return ref.handlerTag;\n } else {\n // @ts-ignore in this case it should be a ref either to gesture object or\n // a gesture handler component, in both cases handlerTag property exists\n return ref.current?.handlerTag ?? -1;\n }\n}\n\nfunction extractValidHandlerTags(interactionGroup: GestureRef[] | undefined) {\n return (\n interactionGroup?.map(convertToHandlerTag)?.filter((tag) => tag > 0) ?? []\n );\n}\n\nfunction dropHandlers(preparedGesture: GestureConfigReference) {\n for (const handler of preparedGesture.config) {\n RNGestureHandlerModule.dropGestureHandler(handler.handlerTag);\n\n unregisterHandler(handler.handlerTag);\n }\n}\n\ninterface AttachHandlersConfig {\n preparedGesture: GestureConfigReference;\n gestureConfig: ComposedGesture | GestureType | undefined;\n gesture: GestureType[];\n viewTag: number;\n useAnimated: boolean;\n}\n\nfunction attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n useAnimated,\n}: AttachHandlersConfig) {\n if (!preparedGesture.firstExecution) {\n gestureConfig?.initialize();\n } else {\n preparedGesture.firstExecution = false;\n }\n\n // use setImmediate to extract handlerTags, because all refs should be initialized\n // when it's ran\n setImmediate(() => {\n gestureConfig?.prepare();\n });\n\n for (const handler of gesture) {\n RNGestureHandlerModule.createGestureHandler(\n handler.handlerName,\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS)\n );\n\n registerHandler(handler.handlerTag, handler);\n\n // use setImmediate to extract handlerTags, because all refs should be initialized\n // when it's ran\n setImmediate(() => {\n let requireToFail: number[] = [];\n if (handler.config.requireToFail) {\n requireToFail = extractValidHandlerTags(handler.config.requireToFail);\n }\n\n let simultaneousWith: number[] = [];\n if (handler.config.simultaneousWith) {\n simultaneousWith = extractValidHandlerTags(\n handler.config.simultaneousWith\n );\n }\n\n RNGestureHandlerModule.updateGestureHandler(\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS, {\n simultaneousHandlers: simultaneousWith,\n waitFor: requireToFail,\n })\n );\n });\n }\n preparedGesture.config = gesture;\n\n for (const gesture of preparedGesture.config) {\n RNGestureHandlerModule.attachGestureHandler(\n gesture.handlerTag,\n viewTag,\n !useAnimated // send direct events when using animatedGesture, device events otherwise\n );\n }\n\n if (preparedGesture.animatedHandlers) {\n preparedGesture.animatedHandlers.value = (gesture.map(\n (g) => g.handlers\n ) as unknown) as HandlerCallbacks<Record<string, unknown>>[];\n }\n}\n\nfunction updateHandlers(\n preparedGesture: GestureConfigReference,\n gestureConfig: ComposedGesture | GestureType | undefined,\n gesture: GestureType[]\n) {\n gestureConfig?.prepare();\n\n for (let i = 0; i < gesture.length; i++) {\n const handler = preparedGesture.config[i];\n\n gesture[i].handlerTag = handler.handlerTag;\n gesture[i].handlers.handlerTag = handler.handlerTag;\n }\n\n // use setImmediate to extract handlerTags, because when it's ran, all refs should be updated\n // and handlerTags in BaseGesture references should be updated in the loop above (we need to wait\n // in case of external relations)\n setImmediate(() => {\n for (let i = 0; i < gesture.length; i++) {\n const handler = preparedGesture.config[i];\n\n handler.config = gesture[i].config;\n handler.handlers = gesture[i].handlers;\n handler.handlers.handlerTag = handler.handlerTag;\n\n const requireToFail = extractValidHandlerTags(\n handler.config.requireToFail\n );\n\n const simultaneousWith = extractValidHandlerTags(\n handler.config.simultaneousWith\n );\n\n RNGestureHandlerModule.updateGestureHandler(\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS, {\n simultaneousHandlers: simultaneousWith,\n waitFor: requireToFail,\n })\n );\n\n registerHandler(handler.handlerTag, handler);\n }\n\n if (preparedGesture.animatedHandlers) {\n preparedGesture.animatedHandlers.value = (preparedGesture.config.map(\n (g) => g.handlers\n ) as unknown) as HandlerCallbacks<Record<string, unknown>>[];\n }\n });\n}\n\nfunction needsToReattach(\n preparedGesture: GestureConfigReference,\n gesture: GestureType[]\n) {\n if (gesture.length !== preparedGesture.config.length) {\n return true;\n }\n for (let i = 0; i < gesture.length; i++) {\n if (gesture[i].handlerName !== preparedGesture.config[i].handlerName) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction useAnimatedGesture(preparedGesture: GestureConfigReference) {\n if (!Reanimated) {\n return;\n }\n\n function isStateChangeEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n ): event is GestureStateChangeEvent {\n 'worklet';\n // @ts-ignore Yes, the oldState prop is missing on GestureTouchEvent, that's the point\n return event.oldState != null;\n }\n\n function isTouchEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n ): event is GestureTouchEvent {\n 'worklet';\n return event.eventType != null;\n }\n\n function getHandler(\n type: CALLBACK_TYPE,\n gesture: HandlerCallbacks<Record<string, unknown>>\n ) {\n 'worklet';\n switch (type) {\n case CALLBACK_TYPE.BEGAN:\n return gesture.onBegin;\n case CALLBACK_TYPE.START:\n return gesture.onStart;\n case CALLBACK_TYPE.UPDATE:\n return gesture.onUpdate;\n case CALLBACK_TYPE.END:\n return gesture.onEnd;\n case CALLBACK_TYPE.FINALIZE:\n return gesture.onFinalize;\n case CALLBACK_TYPE.TOUCHES_DOWN:\n return gesture.onTouchesDown;\n case CALLBACK_TYPE.TOUCHES_MOVE:\n return gesture.onTouchesMove;\n case CALLBACK_TYPE.TOUCHES_UP:\n return gesture.onTouchesUp;\n case CALLBACK_TYPE.TOUCHES_CANCELLED:\n return gesture.onTouchesCancelled;\n }\n }\n\n function touchEventTypeToCallbackType(eventType: EventType): CALLBACK_TYPE {\n 'worklet';\n switch (eventType) {\n case EventType.TOUCHES_DOWN:\n return CALLBACK_TYPE.TOUCHES_DOWN;\n case EventType.TOUCHES_MOVE:\n return CALLBACK_TYPE.TOUCHES_MOVE;\n case EventType.TOUCHES_UP:\n return CALLBACK_TYPE.TOUCHES_UP;\n case EventType.TOUCHES_CANCELLED:\n return CALLBACK_TYPE.TOUCHES_CANCELLED;\n }\n return CALLBACK_TYPE.UNDEFINED;\n }\n\n function runWorklet(\n type: CALLBACK_TYPE,\n gesture: HandlerCallbacks<Record<string, unknown>>,\n event: GestureStateChangeEvent | GestureUpdateEvent | GestureTouchEvent,\n ...args: any[]\n ) {\n 'worklet';\n const handler = getHandler(type, gesture);\n if (gesture.isWorklet[type]) {\n // @ts-ignore Logic below makes sure the correct event is send to the\n // correct handler.\n handler?.(event, ...args);\n } else if (handler) {\n console.warn('Animated gesture callback must be a worklet');\n }\n }\n\n // Hooks are called conditionally, but the condition is whether the\n // react-native-reanimated is installed, which shouldn't change while running\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const sharedHandlersCallbacks = Reanimated.useSharedValue<\n HandlerCallbacks<Record<string, unknown>>[] | null\n >(null);\n\n // not every gesture needs a state controller, init them lazily\n const stateControllers: GestureStateManagerType[] = [];\n\n const callback = (\n event: GestureStateChangeEvent | GestureUpdateEvent | GestureTouchEvent\n ) => {\n 'worklet';\n\n const currentCallback = sharedHandlersCallbacks.value;\n if (!currentCallback) {\n return;\n }\n\n for (let i = 0; i < currentCallback.length; i++) {\n const gesture = currentCallback[i];\n\n if (event.handlerTag === gesture.handlerTag) {\n if (isStateChangeEvent(event)) {\n if (\n event.oldState === State.UNDETERMINED &&\n event.state === State.BEGAN\n ) {\n runWorklet(CALLBACK_TYPE.BEGAN, gesture, event);\n } else if (\n (event.oldState === State.BEGAN ||\n event.oldState === State.UNDETERMINED) &&\n event.state === State.ACTIVE\n ) {\n runWorklet(CALLBACK_TYPE.START, gesture, event);\n } else if (\n event.oldState !== event.state &&\n event.state === State.END\n ) {\n if (event.oldState === State.ACTIVE) {\n runWorklet(CALLBACK_TYPE.END, gesture, event, true);\n }\n runWorklet(CALLBACK_TYPE.FINALIZE, gesture, event, true);\n } else if (\n (event.state === State.FAILED || event.state === State.CANCELLED) &&\n event.state !== event.oldState\n ) {\n if (event.oldState === State.ACTIVE) {\n runWorklet(CALLBACK_TYPE.END, gesture, event, false);\n }\n runWorklet(CALLBACK_TYPE.FINALIZE, gesture, event, false);\n }\n } else if (isTouchEvent(event)) {\n if (!stateControllers[i]) {\n stateControllers[i] = GestureStateManager.create(event.handlerTag);\n }\n\n if (event.eventType !== EventType.UNDETERMINED) {\n runWorklet(\n touchEventTypeToCallbackType(event.eventType),\n gesture,\n event,\n stateControllers[i]\n );\n }\n } else {\n runWorklet(CALLBACK_TYPE.UPDATE, gesture, event);\n }\n }\n }\n };\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const event = Reanimated.useEvent(\n callback,\n ['onGestureHandlerStateChange', 'onGestureHandlerEvent'],\n true\n );\n\n preparedGesture.animatedEventHandler = event;\n preparedGesture.animatedHandlers = sharedHandlersCallbacks;\n}\n\ninterface GestureDetectorProps {\n gesture?: ComposedGesture | GestureType;\n}\nexport const GestureDetector: React.FunctionComponent<GestureDetectorProps> = (\n props\n) => {\n const gestureConfig = props.gesture;\n const gesture = gestureConfig?.toGestureArray?.() ?? [];\n const useAnimated =\n gesture.find((gesture) =>\n gesture.handlers.isWorklet.reduce((prev, current) => prev || current)\n ) != null;\n const viewRef = useRef(null);\n const firstRenderRef = useRef(true);\n\n const preparedGesture = React.useRef<GestureConfigReference>({\n config: gesture,\n animatedEventHandler: null,\n animatedHandlers: null,\n firstExecution: true,\n useAnimated: useAnimated,\n }).current;\n\n if (useAnimated !== preparedGesture.useAnimated) {\n throw new Error(\n 'You cannot change whether you are using gesture or animatedGesture while the app is running'\n );\n }\n\n if (preparedGesture.firstExecution) {\n gestureConfig?.initialize?.();\n }\n\n if (useAnimated) {\n // Whether animatedGesture or gesture is used shouldn't change\n // during while an app is running\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useAnimatedGesture(preparedGesture);\n }\n\n useEffect(() => {\n firstRenderRef.current = true;\n const viewTag = findNodeHandle(viewRef.current) as number;\n attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n useAnimated,\n });\n\n return () => {\n dropHandlers(preparedGesture);\n };\n }, []);\n\n useEffect(() => {\n if (!firstRenderRef.current) {\n const viewTag = findNodeHandle(viewRef.current) as number;\n\n if (needsToReattach(preparedGesture, gesture)) {\n dropHandlers(preparedGesture);\n attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n useAnimated,\n });\n } else {\n updateHandlers(preparedGesture, gestureConfig, gesture);\n }\n } else {\n firstRenderRef.current = false;\n }\n }, [props]);\n\n if (useAnimated) {\n return (\n <AnimatedWrap\n ref={viewRef}\n onGestureHandlerEvent={preparedGesture.animatedEventHandler}>\n {props.children}\n </AnimatedWrap>\n );\n } else {\n return <Wrap ref={viewRef}>{props.children}</Wrap>;\n }\n};\n\nclass Wrap extends React.Component<{ onGestureHandlerEvent?: unknown }> {\n render() {\n // I don't think that fighting with types over such a simple function is worth it\n // The only thing it does is add 'collapsable: false' to the child component\n // to make sure it is in the native view hierarchy so the detector can find\n // correct viewTag to attach to.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const child: any = React.Children.only(this.props.children);\n\n return React.cloneElement(\n child,\n { collapsable: false },\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n child.props.children\n );\n }\n}\n\nconst AnimatedWrap = Reanimated?.default?.createAnimatedComponent(Wrap) ?? Wrap;\n"]}
|
@@ -29,7 +29,7 @@ function isTouchEvent(event) {
|
|
29
29
|
}
|
30
30
|
|
31
31
|
function onGestureHandlerEvent(event) {
|
32
|
-
var _handler$
|
32
|
+
var _handler$handlers7, _handler$handlers7$on, _handler$handlers8, _handler$handlers8$on, _handler$handlers9, _handler$handlers9$on, _handler$handlers10, _handler$handlers10$o;
|
33
33
|
|
34
34
|
const handler = findHandler(event.handlerTag);
|
35
35
|
|
@@ -44,36 +44,48 @@ function onGestureHandlerEvent(event) {
|
|
44
44
|
|
45
45
|
(_handler$handlers$onS = (_handler$handlers2 = handler.handlers).onStart) === null || _handler$handlers$onS === void 0 ? void 0 : _handler$handlers$onS.call(_handler$handlers2, event);
|
46
46
|
} else if (event.oldState !== event.state && event.state === State.END) {
|
47
|
-
var _handler$handlers$
|
47
|
+
var _handler$handlers$onF, _handler$handlers4;
|
48
48
|
|
49
|
-
|
49
|
+
if (event.oldState === State.ACTIVE) {
|
50
|
+
var _handler$handlers$onE, _handler$handlers3;
|
51
|
+
|
52
|
+
(_handler$handlers$onE = (_handler$handlers3 = handler.handlers).onEnd) === null || _handler$handlers$onE === void 0 ? void 0 : _handler$handlers$onE.call(_handler$handlers3, event, true);
|
53
|
+
}
|
54
|
+
|
55
|
+
(_handler$handlers$onF = (_handler$handlers4 = handler.handlers).onFinalize) === null || _handler$handlers$onF === void 0 ? void 0 : _handler$handlers$onF.call(_handler$handlers4, event, true);
|
50
56
|
} else if ((event.state === State.FAILED || event.state === State.CANCELLED) && event.oldState !== event.state) {
|
51
|
-
var _handler$handlers$
|
57
|
+
var _handler$handlers$onF2, _handler$handlers6;
|
58
|
+
|
59
|
+
if (event.oldState === State.ACTIVE) {
|
60
|
+
var _handler$handlers$onE2, _handler$handlers5;
|
61
|
+
|
62
|
+
(_handler$handlers$onE2 = (_handler$handlers5 = handler.handlers).onEnd) === null || _handler$handlers$onE2 === void 0 ? void 0 : _handler$handlers$onE2.call(_handler$handlers5, event, false);
|
63
|
+
}
|
52
64
|
|
53
|
-
(_handler$handlers$
|
65
|
+
(_handler$handlers$onF2 = (_handler$handlers6 = handler.handlers).onFinalize) === null || _handler$handlers$onF2 === void 0 ? void 0 : _handler$handlers$onF2.call(_handler$handlers6, event, false);
|
54
66
|
}
|
55
67
|
} else if (isTouchEvent(event)) {
|
56
68
|
switch (event.eventType) {
|
57
69
|
case EventType.TOUCHES_DOWN:
|
58
|
-
(_handler$
|
70
|
+
(_handler$handlers7 = handler.handlers) === null || _handler$handlers7 === void 0 ? void 0 : (_handler$handlers7$on = _handler$handlers7.onTouchesDown) === null || _handler$handlers7$on === void 0 ? void 0 : _handler$handlers7$on.call(_handler$handlers7, event, dummyStateManager);
|
59
71
|
break;
|
60
72
|
|
61
73
|
case EventType.TOUCHES_MOVE:
|
62
|
-
(_handler$
|
74
|
+
(_handler$handlers8 = handler.handlers) === null || _handler$handlers8 === void 0 ? void 0 : (_handler$handlers8$on = _handler$handlers8.onTouchesMove) === null || _handler$handlers8$on === void 0 ? void 0 : _handler$handlers8$on.call(_handler$handlers8, event, dummyStateManager);
|
63
75
|
break;
|
64
76
|
|
65
77
|
case EventType.TOUCHES_UP:
|
66
|
-
(_handler$
|
78
|
+
(_handler$handlers9 = handler.handlers) === null || _handler$handlers9 === void 0 ? void 0 : (_handler$handlers9$on = _handler$handlers9.onTouchesUp) === null || _handler$handlers9$on === void 0 ? void 0 : _handler$handlers9$on.call(_handler$handlers9, event, dummyStateManager);
|
67
79
|
break;
|
68
80
|
|
69
81
|
case EventType.TOUCHES_CANCELLED:
|
70
|
-
(_handler$
|
82
|
+
(_handler$handlers10 = handler.handlers) === null || _handler$handlers10 === void 0 ? void 0 : (_handler$handlers10$o = _handler$handlers10.onTouchesCancelled) === null || _handler$handlers10$o === void 0 ? void 0 : _handler$handlers10$o.call(_handler$handlers10, event, dummyStateManager);
|
71
83
|
break;
|
72
84
|
}
|
73
85
|
} else {
|
74
|
-
var _handler$handlers$onU, _handler$
|
86
|
+
var _handler$handlers$onU, _handler$handlers11;
|
75
87
|
|
76
|
-
(_handler$handlers$onU = (_handler$
|
88
|
+
(_handler$handlers$onU = (_handler$handlers11 = handler.handlers).onUpdate) === null || _handler$handlers$onU === void 0 ? void 0 : _handler$handlers$onU.call(_handler$handlers11, event);
|
77
89
|
}
|
78
90
|
}
|
79
91
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["eventReceiver.ts"],"names":["DeviceEventEmitter","State","EventType","findHandler","gestureHandlerEventSubscription","gestureHandlerStateChangeEventSubscription","dummyStateManager","begin","console","warn","activate","end","fail","isStateChangeEvent","event","oldState","isTouchEvent","eventType","onGestureHandlerEvent","handler","handlerTag","UNDETERMINED","state","BEGAN","handlers","onBegin","ACTIVE","onStart","END","onEnd","FAILED","CANCELLED","TOUCHES_DOWN","onTouchesDown","TOUCHES_MOVE","onTouchesMove","TOUCHES_UP","onTouchesUp","TOUCHES_CANCELLED","onTouchesCancelled","onUpdate","startListening","stopListening","addListener","removeSubscription"],"mappings":"AAAA,SAASA,kBAAT,QAAwD,cAAxD;AACA,SAASC,KAAT,QAAsB,aAAtB;AACA,SAASC,SAAT,QAA0B,iBAA1B;AAOA,SAASC,WAAT,QAA4B,qBAA5B;AAGA,IAAIC,+BAA2D,GAAG,IAAlE;AACA,IAAIC,0CAAsE,GAAG,IAA7E;AAEA,MAAMC,iBAA0C,GAAG;AACjDC,EAAAA,KAAK,EAAE,MAAM;AACXC,IAAAA,OAAO,CAACC,IAAR,CACE,uFADF;AAGD,GALgD;AAMjDC,EAAAA,QAAQ,EAAE,MAAM;AACdF,IAAAA,OAAO,CAACC,IAAR,CACE,uFADF;AAGD,GAVgD;AAWjDE,EAAAA,GAAG,EAAE,MAAM;AACTH,IAAAA,OAAO,CAACC,IAAR,CACE,uFADF;AAGD,GAfgD;AAgBjDG,EAAAA,IAAI,EAAE,MAAM;AACVJ,IAAAA,OAAO,CAACC,IAAR,CACE,uFADF;AAGD;AApBgD,CAAnD;;AAuBA,SAASI,kBAAT,CACEC,KADF,EAEoC;AAClC;AACA,SAAOA,KAAK,CAACC,QAAN,IAAkB,IAAzB;AACD;;AAED,SAASC,YAAT,CACEF,KADF,EAE8B;AAC5B,SAAOA,KAAK,CAACG,SAAN,IAAmB,IAA1B;AACD;;AAED,SAASC,qBAAT,CACEJ,KADF,EAEE;AAAA;;AACA,QAAMK,OAAO,GAAGhB,WAAW,CAACW,KAAK,CAACM,UAAP,CAA3B;;AAIA,MAAID,OAAJ,EAAa;AACX,QAAIN,kBAAkB,CAACC,KAAD,CAAtB,EAA+B;AAC7B,UACEA,KAAK,CAACC,QAAN,KAAmBd,KAAK,CAACoB,YAAzB,IACAP,KAAK,CAACQ,KAAN,KAAgBrB,KAAK,CAACsB,KAFxB,EAGE;AAAA;;AACA,sDAAAJ,OAAO,CAACK,QAAR,EAAiBC,OAAjB,wGAA2BX,KAA3B;AACD,OALD,MAKO,IACL,CAACA,KAAK,CAACC,QAAN,KAAmBd,KAAK,CAACsB,KAAzB,IACCT,KAAK,CAACC,QAAN,KAAmBd,KAAK,CAACoB,YAD3B,KAEAP,KAAK,CAACQ,KAAN,KAAgBrB,KAAK,CAACyB,MAHjB,EAIL;AAAA;;AACA,uDAAAP,OAAO,CAACK,QAAR,EAAiBG,OAAjB,yGAA2Bb,KAA3B;AACD,OANM,MAMA,IAAIA,KAAK,CAACC,QAAN,KAAmBD,KAAK,CAACQ,KAAzB,IAAkCR,KAAK,CAACQ,KAAN,KAAgBrB,KAAK,CAAC2B,GAA5D,EAAiE;AAAA;;AACtE,
|
1
|
+
{"version":3,"sources":["eventReceiver.ts"],"names":["DeviceEventEmitter","State","EventType","findHandler","gestureHandlerEventSubscription","gestureHandlerStateChangeEventSubscription","dummyStateManager","begin","console","warn","activate","end","fail","isStateChangeEvent","event","oldState","isTouchEvent","eventType","onGestureHandlerEvent","handler","handlerTag","UNDETERMINED","state","BEGAN","handlers","onBegin","ACTIVE","onStart","END","onEnd","onFinalize","FAILED","CANCELLED","TOUCHES_DOWN","onTouchesDown","TOUCHES_MOVE","onTouchesMove","TOUCHES_UP","onTouchesUp","TOUCHES_CANCELLED","onTouchesCancelled","onUpdate","startListening","stopListening","addListener","removeSubscription"],"mappings":"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","sourcesContent":["import { DeviceEventEmitter, EmitterSubscription } from 'react-native';\nimport { State } from '../../State';\nimport { EventType } from '../../EventType';\nimport {\n GestureTouchEvent,\n GestureUpdateEvent,\n GestureStateChangeEvent,\n} from '../gestureHandlerCommon';\nimport { GestureStateManagerType } from './gestureStateManager';\nimport { findHandler } from '../handlersRegistry';\nimport { BaseGesture } from './gesture';\n\nlet gestureHandlerEventSubscription: EmitterSubscription | null = null;\nlet gestureHandlerStateChangeEventSubscription: EmitterSubscription | null = null;\n\nconst dummyStateManager: GestureStateManagerType = {\n begin: () => {\n console.warn(\n 'You have to use react-native-reanimated in order to control the state of the gesture.'\n );\n },\n activate: () => {\n console.warn(\n 'You have to use react-native-reanimated in order to control the state of the gesture.'\n );\n },\n end: () => {\n console.warn(\n 'You have to use react-native-reanimated in order to control the state of the gesture.'\n );\n },\n fail: () => {\n console.warn(\n 'You have to use react-native-reanimated in order to control the state of the gesture.'\n );\n },\n};\n\nfunction isStateChangeEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n): event is GestureStateChangeEvent {\n // @ts-ignore oldState doesn't exist on GestureTouchEvent and that's the point\n return event.oldState != null;\n}\n\nfunction isTouchEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n): event is GestureTouchEvent {\n return event.eventType != null;\n}\n\nfunction onGestureHandlerEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n) {\n const handler = findHandler(event.handlerTag) as BaseGesture<\n Record<string, unknown>\n >;\n\n if (handler) {\n if (isStateChangeEvent(event)) {\n if (\n event.oldState === State.UNDETERMINED &&\n event.state === State.BEGAN\n ) {\n handler.handlers.onBegin?.(event);\n } else if (\n (event.oldState === State.BEGAN ||\n event.oldState === State.UNDETERMINED) &&\n event.state === State.ACTIVE\n ) {\n handler.handlers.onStart?.(event);\n } else if (event.oldState !== event.state && event.state === State.END) {\n if (event.oldState === State.ACTIVE) {\n handler.handlers.onEnd?.(event, true);\n }\n handler.handlers.onFinalize?.(event, true);\n } else if (\n (event.state === State.FAILED || event.state === State.CANCELLED) &&\n event.oldState !== event.state\n ) {\n if (event.oldState === State.ACTIVE) {\n handler.handlers.onEnd?.(event, false);\n }\n handler.handlers.onFinalize?.(event, false);\n }\n } else if (isTouchEvent(event)) {\n switch (event.eventType) {\n case EventType.TOUCHES_DOWN:\n handler.handlers?.onTouchesDown?.(event, dummyStateManager);\n break;\n case EventType.TOUCHES_MOVE:\n handler.handlers?.onTouchesMove?.(event, dummyStateManager);\n break;\n case EventType.TOUCHES_UP:\n handler.handlers?.onTouchesUp?.(event, dummyStateManager);\n break;\n case EventType.TOUCHES_CANCELLED:\n handler.handlers?.onTouchesCancelled?.(event, dummyStateManager);\n break;\n }\n } else {\n handler.handlers.onUpdate?.(event);\n }\n }\n}\n\nexport function startListening() {\n stopListening();\n\n gestureHandlerEventSubscription = DeviceEventEmitter.addListener(\n 'onGestureHandlerEvent',\n onGestureHandlerEvent\n );\n\n gestureHandlerStateChangeEventSubscription = DeviceEventEmitter.addListener(\n 'onGestureHandlerStateChange',\n onGestureHandlerEvent\n );\n}\n\nexport function stopListening() {\n if (gestureHandlerEventSubscription) {\n DeviceEventEmitter.removeSubscription(gestureHandlerEventSubscription);\n\n gestureHandlerEventSubscription = null;\n }\n\n if (gestureHandlerStateChangeEventSubscription) {\n DeviceEventEmitter.removeSubscription(\n gestureHandlerStateChangeEventSubscription\n );\n\n gestureHandlerStateChangeEventSubscription = null;\n }\n}\n"]}
|
@@ -7,10 +7,11 @@ export const CALLBACK_TYPE = {
|
|
7
7
|
START: 2,
|
8
8
|
UPDATE: 3,
|
9
9
|
END: 4,
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
FINALIZE: 5,
|
11
|
+
TOUCHES_DOWN: 6,
|
12
|
+
TOUCHES_MOVE: 7,
|
13
|
+
TOUCHES_UP: 8,
|
14
|
+
TOUCHES_CANCELLED: 9
|
14
15
|
}; // Allow using CALLBACK_TYPE as object and type
|
15
16
|
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
16
17
|
|
@@ -65,6 +66,13 @@ export class BaseGesture extends Gesture {
|
|
65
66
|
return this;
|
66
67
|
}
|
67
68
|
|
69
|
+
onFinalize(callback) {
|
70
|
+
this.handlers.onFinalize = callback; //@ts-ignore if callback is a worklet, the property will be available, if not then the check will return false
|
71
|
+
|
72
|
+
this.handlers.isWorklet[CALLBACK_TYPE.FINALIZE] = this.isWorklet(callback);
|
73
|
+
return this;
|
74
|
+
}
|
75
|
+
|
68
76
|
onTouchesDown(callback) {
|
69
77
|
this.config.needsPointerData = true;
|
70
78
|
this.handlers.onTouchesDown = callback;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["gesture.ts"],"names":["getNextHandlerTag","CALLBACK_TYPE","UNDEFINED","BEGAN","START","UPDATE","END","TOUCHES_DOWN","TOUCHES_MOVE","TOUCHES_UP","TOUCHES_CANCELLED","Gesture","BaseGesture","handlerTag","isWorklet","addDependency","key","gesture","value","config","Array","concat","withRef","ref","callback","__workletHash","undefined","onBegin","handlers","onStart","onEnd","onTouchesDown","needsPointerData","onTouchesMove","onTouchesUp","onTouchesCancelled","enabled","shouldCancelWhenOutside","hitSlop","simultaneousWithExternalGesture","gestures","requireExternalGestureToFail","initialize","current","toGestureArray","prepare","ContinousBaseGesture","onUpdate","manualActivation"],"mappings":"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","sourcesContent":["import { FlingGestureHandlerEventPayload } from '../FlingGestureHandler';\nimport { ForceTouchGestureHandlerEventPayload } from '../ForceTouchGestureHandler';\nimport {\n HitSlop,\n CommonGestureConfig,\n GestureTouchEvent,\n GestureStateChangeEvent,\n GestureUpdateEvent,\n} from '../gestureHandlerCommon';\nimport { getNextHandlerTag } from '../handlersRegistry';\nimport { GestureStateManagerType } from './gestureStateManager';\nimport { LongPressGestureHandlerEventPayload } from '../LongPressGestureHandler';\nimport { PanGestureHandlerEventPayload } from '../PanGestureHandler';\nimport { PinchGestureHandlerEventPayload } from '../PinchGestureHandler';\nimport { RotationGestureHandlerEventPayload } from '../RotationGestureHandler';\nimport { TapGestureHandlerEventPayload } from '../TapGestureHandler';\nimport { NativeViewGestureHandlerPayload } from '../NativeViewGestureHandler';\n\nexport type GestureType =\n | BaseGesture<Record<string, unknown>>\n | BaseGesture<Record<string, never>>\n | BaseGesture<TapGestureHandlerEventPayload>\n | BaseGesture<PanGestureHandlerEventPayload>\n | BaseGesture<LongPressGestureHandlerEventPayload>\n | BaseGesture<RotationGestureHandlerEventPayload>\n | BaseGesture<PinchGestureHandlerEventPayload>\n | BaseGesture<FlingGestureHandlerEventPayload>\n | BaseGesture<ForceTouchGestureHandlerEventPayload>\n | BaseGesture<NativeViewGestureHandlerPayload>;\n\nexport type GestureRef =\n | number\n | GestureType\n | React.RefObject<GestureType | undefined>\n | React.RefObject<React.ComponentType | undefined>; // allow adding a ref to a gesture handler\nexport interface BaseGestureConfig\n extends CommonGestureConfig,\n Record<string, unknown> {\n ref?: React.MutableRefObject<GestureType | undefined>;\n requireToFail?: GestureRef[];\n simultaneousWith?: GestureRef[];\n needsPointerData?: boolean;\n manualActivation?: boolean;\n}\n\ntype TouchEventHandlerType = (\n event: GestureTouchEvent,\n stateManager: GestureStateManagerType\n) => void;\n\nexport type HandlerCallbacks<EventPayloadT extends Record<string, unknown>> = {\n handlerTag: number;\n onBegin?: (event: GestureStateChangeEvent<EventPayloadT>) => void;\n onStart?: (event: GestureStateChangeEvent<EventPayloadT>) => void;\n onEnd?: (\n event: GestureStateChangeEvent<EventPayloadT>,\n success: boolean\n ) => void;\n onUpdate?: (event: GestureUpdateEvent<EventPayloadT>) => void;\n onTouchesDown?: TouchEventHandlerType;\n onTouchesMove?: TouchEventHandlerType;\n onTouchesUp?: TouchEventHandlerType;\n onTouchesCancelled?: TouchEventHandlerType;\n isWorklet: boolean[];\n};\n\nexport const CALLBACK_TYPE = {\n UNDEFINED: 0,\n BEGAN: 1,\n START: 2,\n UPDATE: 3,\n END: 4,\n TOUCHES_DOWN: 5,\n TOUCHES_MOVE: 6,\n TOUCHES_UP: 7,\n TOUCHES_CANCELLED: 8,\n} as const;\n\n// Allow using CALLBACK_TYPE as object and type\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport type CALLBACK_TYPE = typeof CALLBACK_TYPE[keyof typeof CALLBACK_TYPE];\n\nexport abstract class Gesture {\n /**\n * Return array of gestures, providing the same interface for creating and updating\n * handlers, no matter which object was used to create gesture instance.\n */\n abstract toGestureArray(): GestureType[];\n\n /**\n * Assign handlerTag to the gesture instance and set ref.current (if a ref is set)\n */\n abstract initialize(): void;\n\n /**\n * Make sure that values of properties defining relations are arrays. Do any necessary\n * preprocessing required to configure relations between handlers. Called just before\n * updating the handler on the native side.\n */\n abstract prepare(): void;\n}\n\nexport abstract class BaseGesture<\n EventPayloadT extends Record<string, unknown>\n> extends Gesture {\n public handlerTag = -1;\n public handlerName = '';\n public config: BaseGestureConfig = {};\n public handlers: HandlerCallbacks<EventPayloadT> = {\n handlerTag: -1,\n isWorklet: [false, false, false, false],\n };\n\n private addDependency(\n key: 'simultaneousWith' | 'requireToFail',\n gesture: Exclude<GestureRef, number>\n ) {\n const value = this.config[key];\n this.config[key] = value\n ? Array<GestureRef>().concat(value, gesture)\n : [gesture];\n }\n\n withRef(ref: React.MutableRefObject<GestureType | undefined>) {\n this.config.ref = ref;\n return this;\n }\n\n protected isWorklet(\n callback:\n | TouchEventHandlerType\n | ((event: GestureUpdateEvent<EventPayloadT>) => void)\n | ((event: GestureStateChangeEvent<EventPayloadT>) => void)\n ) {\n //@ts-ignore if callback is a worklet, the property will be available, if not then the check will return false\n return callback.__workletHash !== undefined;\n }\n\n onBegin(callback: (event: GestureStateChangeEvent<EventPayloadT>) => void) {\n this.handlers.onBegin = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.BEGAN] = this.isWorklet(callback);\n return this;\n }\n\n onStart(callback: (event: GestureStateChangeEvent<EventPayloadT>) => void) {\n this.handlers.onStart = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.START] = this.isWorklet(callback);\n return this;\n }\n\n onEnd(\n callback: (\n event: GestureStateChangeEvent<EventPayloadT>,\n success: boolean\n ) => void\n ) {\n this.handlers.onEnd = callback;\n //@ts-ignore if callback is a worklet, the property will be available, if not then the check will return false\n this.handlers.isWorklet[CALLBACK_TYPE.END] = this.isWorklet(callback);\n return this;\n }\n\n onTouchesDown(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesDown = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_DOWN] = this.isWorklet(\n callback\n );\n\n return this;\n }\n\n onTouchesMove(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesMove = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_MOVE] = this.isWorklet(\n callback\n );\n\n return this;\n }\n\n onTouchesUp(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesUp = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_UP] = this.isWorklet(\n callback\n );\n\n return this;\n }\n\n onTouchesCancelled(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesCancelled = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_CANCELLED] = this.isWorklet(\n callback\n );\n\n return this;\n }\n\n enabled(enabled: boolean) {\n this.config.enabled = enabled;\n return this;\n }\n\n shouldCancelWhenOutside(value: boolean) {\n this.config.shouldCancelWhenOutside = value;\n return this;\n }\n\n hitSlop(hitSlop: HitSlop) {\n this.config.hitSlop = hitSlop;\n return this;\n }\n\n simultaneousWithExternalGesture(...gestures: Exclude<GestureRef, number>[]) {\n for (const gesture of gestures) {\n this.addDependency('simultaneousWith', gesture);\n }\n return this;\n }\n\n requireExternalGestureToFail(...gestures: Exclude<GestureRef, number>[]) {\n for (const gesture of gestures) {\n this.addDependency('requireToFail', gesture);\n }\n return this;\n }\n\n initialize() {\n this.handlerTag = getNextHandlerTag();\n this.handlers = { ...this.handlers, handlerTag: this.handlerTag };\n\n if (this.config.ref) {\n this.config.ref.current = this as GestureType;\n }\n }\n\n toGestureArray(): GestureType[] {\n return [this as GestureType];\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n prepare() {}\n}\n\nexport abstract class ContinousBaseGesture<\n EventPayloadT extends Record<string, unknown>\n> extends BaseGesture<EventPayloadT> {\n onUpdate(callback: (event: GestureUpdateEvent<EventPayloadT>) => void) {\n this.handlers.onUpdate = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.UPDATE] = this.isWorklet(callback);\n return this;\n }\n\n manualActivation(manualActivation: boolean) {\n this.config.manualActivation = manualActivation;\n return this;\n }\n}\n"]}
|
1
|
+
{"version":3,"sources":["gesture.ts"],"names":["getNextHandlerTag","CALLBACK_TYPE","UNDEFINED","BEGAN","START","UPDATE","END","FINALIZE","TOUCHES_DOWN","TOUCHES_MOVE","TOUCHES_UP","TOUCHES_CANCELLED","Gesture","BaseGesture","handlerTag","isWorklet","addDependency","key","gesture","value","config","Array","concat","withRef","ref","callback","__workletHash","undefined","onBegin","handlers","onStart","onEnd","onFinalize","onTouchesDown","needsPointerData","onTouchesMove","onTouchesUp","onTouchesCancelled","enabled","shouldCancelWhenOutside","hitSlop","simultaneousWithExternalGesture","gestures","requireExternalGestureToFail","initialize","current","toGestureArray","prepare","ContinousBaseGesture","onUpdate","manualActivation"],"mappings":"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","sourcesContent":["import { FlingGestureHandlerEventPayload } from '../FlingGestureHandler';\nimport { ForceTouchGestureHandlerEventPayload } from '../ForceTouchGestureHandler';\nimport {\n HitSlop,\n CommonGestureConfig,\n GestureTouchEvent,\n GestureStateChangeEvent,\n GestureUpdateEvent,\n} from '../gestureHandlerCommon';\nimport { getNextHandlerTag } from '../handlersRegistry';\nimport { GestureStateManagerType } from './gestureStateManager';\nimport { LongPressGestureHandlerEventPayload } from '../LongPressGestureHandler';\nimport { PanGestureHandlerEventPayload } from '../PanGestureHandler';\nimport { PinchGestureHandlerEventPayload } from '../PinchGestureHandler';\nimport { RotationGestureHandlerEventPayload } from '../RotationGestureHandler';\nimport { TapGestureHandlerEventPayload } from '../TapGestureHandler';\nimport { NativeViewGestureHandlerPayload } from '../NativeViewGestureHandler';\n\nexport type GestureType =\n | BaseGesture<Record<string, unknown>>\n | BaseGesture<Record<string, never>>\n | BaseGesture<TapGestureHandlerEventPayload>\n | BaseGesture<PanGestureHandlerEventPayload>\n | BaseGesture<LongPressGestureHandlerEventPayload>\n | BaseGesture<RotationGestureHandlerEventPayload>\n | BaseGesture<PinchGestureHandlerEventPayload>\n | BaseGesture<FlingGestureHandlerEventPayload>\n | BaseGesture<ForceTouchGestureHandlerEventPayload>\n | BaseGesture<NativeViewGestureHandlerPayload>;\n\nexport type GestureRef =\n | number\n | GestureType\n | React.RefObject<GestureType | undefined>\n | React.RefObject<React.ComponentType | undefined>; // allow adding a ref to a gesture handler\nexport interface BaseGestureConfig\n extends CommonGestureConfig,\n Record<string, unknown> {\n ref?: React.MutableRefObject<GestureType | undefined>;\n requireToFail?: GestureRef[];\n simultaneousWith?: GestureRef[];\n needsPointerData?: boolean;\n manualActivation?: boolean;\n}\n\ntype TouchEventHandlerType = (\n event: GestureTouchEvent,\n stateManager: GestureStateManagerType\n) => void;\n\nexport type HandlerCallbacks<EventPayloadT extends Record<string, unknown>> = {\n handlerTag: number;\n onBegin?: (event: GestureStateChangeEvent<EventPayloadT>) => void;\n onStart?: (event: GestureStateChangeEvent<EventPayloadT>) => void;\n onEnd?: (\n event: GestureStateChangeEvent<EventPayloadT>,\n success: boolean\n ) => void;\n onFinalize?: (\n event: GestureStateChangeEvent<EventPayloadT>,\n success: boolean\n ) => void;\n onUpdate?: (event: GestureUpdateEvent<EventPayloadT>) => void;\n onTouchesDown?: TouchEventHandlerType;\n onTouchesMove?: TouchEventHandlerType;\n onTouchesUp?: TouchEventHandlerType;\n onTouchesCancelled?: TouchEventHandlerType;\n isWorklet: boolean[];\n};\n\nexport const CALLBACK_TYPE = {\n UNDEFINED: 0,\n BEGAN: 1,\n START: 2,\n UPDATE: 3,\n END: 4,\n FINALIZE: 5,\n TOUCHES_DOWN: 6,\n TOUCHES_MOVE: 7,\n TOUCHES_UP: 8,\n TOUCHES_CANCELLED: 9,\n} as const;\n\n// Allow using CALLBACK_TYPE as object and type\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport type CALLBACK_TYPE = typeof CALLBACK_TYPE[keyof typeof CALLBACK_TYPE];\n\nexport abstract class Gesture {\n /**\n * Return array of gestures, providing the same interface for creating and updating\n * handlers, no matter which object was used to create gesture instance.\n */\n abstract toGestureArray(): GestureType[];\n\n /**\n * Assign handlerTag to the gesture instance and set ref.current (if a ref is set)\n */\n abstract initialize(): void;\n\n /**\n * Make sure that values of properties defining relations are arrays. Do any necessary\n * preprocessing required to configure relations between handlers. Called just before\n * updating the handler on the native side.\n */\n abstract prepare(): void;\n}\n\nexport abstract class BaseGesture<\n EventPayloadT extends Record<string, unknown>\n> extends Gesture {\n public handlerTag = -1;\n public handlerName = '';\n public config: BaseGestureConfig = {};\n public handlers: HandlerCallbacks<EventPayloadT> = {\n handlerTag: -1,\n isWorklet: [false, false, false, false],\n };\n\n private addDependency(\n key: 'simultaneousWith' | 'requireToFail',\n gesture: Exclude<GestureRef, number>\n ) {\n const value = this.config[key];\n this.config[key] = value\n ? Array<GestureRef>().concat(value, gesture)\n : [gesture];\n }\n\n withRef(ref: React.MutableRefObject<GestureType | undefined>) {\n this.config.ref = ref;\n return this;\n }\n\n protected isWorklet(\n callback:\n | TouchEventHandlerType\n | ((event: GestureUpdateEvent<EventPayloadT>) => void)\n | ((event: GestureStateChangeEvent<EventPayloadT>) => void)\n ) {\n //@ts-ignore if callback is a worklet, the property will be available, if not then the check will return false\n return callback.__workletHash !== undefined;\n }\n\n onBegin(callback: (event: GestureStateChangeEvent<EventPayloadT>) => void) {\n this.handlers.onBegin = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.BEGAN] = this.isWorklet(callback);\n return this;\n }\n\n onStart(callback: (event: GestureStateChangeEvent<EventPayloadT>) => void) {\n this.handlers.onStart = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.START] = this.isWorklet(callback);\n return this;\n }\n\n onEnd(\n callback: (\n event: GestureStateChangeEvent<EventPayloadT>,\n success: boolean\n ) => void\n ) {\n this.handlers.onEnd = callback;\n //@ts-ignore if callback is a worklet, the property will be available, if not then the check will return false\n this.handlers.isWorklet[CALLBACK_TYPE.END] = this.isWorklet(callback);\n return this;\n }\n\n onFinalize(\n callback: (\n event: GestureStateChangeEvent<EventPayloadT>,\n success: boolean\n ) => void\n ) {\n this.handlers.onFinalize = callback;\n //@ts-ignore if callback is a worklet, the property will be available, if not then the check will return false\n this.handlers.isWorklet[CALLBACK_TYPE.FINALIZE] = this.isWorklet(callback);\n return this;\n }\n\n onTouchesDown(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesDown = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_DOWN] = this.isWorklet(\n callback\n );\n\n return this;\n }\n\n onTouchesMove(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesMove = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_MOVE] = this.isWorklet(\n callback\n );\n\n return this;\n }\n\n onTouchesUp(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesUp = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_UP] = this.isWorklet(\n callback\n );\n\n return this;\n }\n\n onTouchesCancelled(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesCancelled = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_CANCELLED] = this.isWorklet(\n callback\n );\n\n return this;\n }\n\n enabled(enabled: boolean) {\n this.config.enabled = enabled;\n return this;\n }\n\n shouldCancelWhenOutside(value: boolean) {\n this.config.shouldCancelWhenOutside = value;\n return this;\n }\n\n hitSlop(hitSlop: HitSlop) {\n this.config.hitSlop = hitSlop;\n return this;\n }\n\n simultaneousWithExternalGesture(...gestures: Exclude<GestureRef, number>[]) {\n for (const gesture of gestures) {\n this.addDependency('simultaneousWith', gesture);\n }\n return this;\n }\n\n requireExternalGestureToFail(...gestures: Exclude<GestureRef, number>[]) {\n for (const gesture of gestures) {\n this.addDependency('requireToFail', gesture);\n }\n return this;\n }\n\n initialize() {\n this.handlerTag = getNextHandlerTag();\n this.handlers = { ...this.handlers, handlerTag: this.handlerTag };\n\n if (this.config.ref) {\n this.config.ref.current = this as GestureType;\n }\n }\n\n toGestureArray(): GestureType[] {\n return [this as GestureType];\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n prepare() {}\n}\n\nexport abstract class ContinousBaseGesture<\n EventPayloadT extends Record<string, unknown>\n> extends BaseGesture<EventPayloadT> {\n onUpdate(callback: (event: GestureUpdateEvent<EventPayloadT>) => void) {\n this.handlers.onUpdate = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.UPDATE] = this.isWorklet(callback);\n return this;\n }\n\n manualActivation(manualActivation: boolean) {\n this.config.manualActivation = manualActivation;\n return this;\n }\n}\n"]}
|
@@ -23,6 +23,7 @@ export declare type HandlerCallbacks<EventPayloadT extends Record<string, unknow
|
|
23
23
|
onBegin?: (event: GestureStateChangeEvent<EventPayloadT>) => void;
|
24
24
|
onStart?: (event: GestureStateChangeEvent<EventPayloadT>) => void;
|
25
25
|
onEnd?: (event: GestureStateChangeEvent<EventPayloadT>, success: boolean) => void;
|
26
|
+
onFinalize?: (event: GestureStateChangeEvent<EventPayloadT>, success: boolean) => void;
|
26
27
|
onUpdate?: (event: GestureUpdateEvent<EventPayloadT>) => void;
|
27
28
|
onTouchesDown?: TouchEventHandlerType;
|
28
29
|
onTouchesMove?: TouchEventHandlerType;
|
@@ -36,10 +37,11 @@ export declare const CALLBACK_TYPE: {
|
|
36
37
|
readonly START: 2;
|
37
38
|
readonly UPDATE: 3;
|
38
39
|
readonly END: 4;
|
39
|
-
readonly
|
40
|
-
readonly
|
41
|
-
readonly
|
42
|
-
readonly
|
40
|
+
readonly FINALIZE: 5;
|
41
|
+
readonly TOUCHES_DOWN: 6;
|
42
|
+
readonly TOUCHES_MOVE: 7;
|
43
|
+
readonly TOUCHES_UP: 8;
|
44
|
+
readonly TOUCHES_CANCELLED: 9;
|
43
45
|
};
|
44
46
|
export declare type CALLBACK_TYPE = typeof CALLBACK_TYPE[keyof typeof CALLBACK_TYPE];
|
45
47
|
export declare abstract class Gesture {
|
@@ -70,6 +72,7 @@ export declare abstract class BaseGesture<EventPayloadT extends Record<string, u
|
|
70
72
|
onBegin(callback: (event: GestureStateChangeEvent<EventPayloadT>) => void): this;
|
71
73
|
onStart(callback: (event: GestureStateChangeEvent<EventPayloadT>) => void): this;
|
72
74
|
onEnd(callback: (event: GestureStateChangeEvent<EventPayloadT>, success: boolean) => void): this;
|
75
|
+
onFinalize(callback: (event: GestureStateChangeEvent<EventPayloadT>, success: boolean) => void): this;
|
73
76
|
onTouchesDown(callback: TouchEventHandlerType): this;
|
74
77
|
onTouchesMove(callback: TouchEventHandlerType): this;
|
75
78
|
onTouchesUp(callback: TouchEventHandlerType): this;
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "react-native-gesture-handler",
|
3
|
-
"version": "2.
|
3
|
+
"version": "2.1.0",
|
4
4
|
"description": "Experimental implementation of a new declarative API for gesture handling in react-native",
|
5
5
|
"scripts": {
|
6
6
|
"prepare": "bob build",
|
@@ -27,6 +27,7 @@
|
|
27
27
|
"android/src/main/java/",
|
28
28
|
"android/lib/build.gradle",
|
29
29
|
"android/lib/src/main/java/",
|
30
|
+
"android/common/src/main/java/",
|
30
31
|
"ios/",
|
31
32
|
"Swipeable/",
|
32
33
|
"DrawerLayout/",
|
@@ -258,6 +258,8 @@ function useAnimatedGesture(preparedGesture: GestureConfigReference) {
|
|
258
258
|
return gesture.onUpdate;
|
259
259
|
case CALLBACK_TYPE.END:
|
260
260
|
return gesture.onEnd;
|
261
|
+
case CALLBACK_TYPE.FINALIZE:
|
262
|
+
return gesture.onFinalize;
|
261
263
|
case CALLBACK_TYPE.TOUCHES_DOWN:
|
262
264
|
return gesture.onTouchesDown;
|
263
265
|
case CALLBACK_TYPE.TOUCHES_MOVE:
|
@@ -341,12 +343,18 @@ function useAnimatedGesture(preparedGesture: GestureConfigReference) {
|
|
341
343
|
event.oldState !== event.state &&
|
342
344
|
event.state === State.END
|
343
345
|
) {
|
344
|
-
|
346
|
+
if (event.oldState === State.ACTIVE) {
|
347
|
+
runWorklet(CALLBACK_TYPE.END, gesture, event, true);
|
348
|
+
}
|
349
|
+
runWorklet(CALLBACK_TYPE.FINALIZE, gesture, event, true);
|
345
350
|
} else if (
|
346
351
|
(event.state === State.FAILED || event.state === State.CANCELLED) &&
|
347
352
|
event.state !== event.oldState
|
348
353
|
) {
|
349
|
-
|
354
|
+
if (event.oldState === State.ACTIVE) {
|
355
|
+
runWorklet(CALLBACK_TYPE.END, gesture, event, false);
|
356
|
+
}
|
357
|
+
runWorklet(CALLBACK_TYPE.FINALIZE, gesture, event, false);
|
350
358
|
}
|
351
359
|
} else if (isTouchEvent(event)) {
|
352
360
|
if (!stateControllers[i]) {
|
@@ -70,12 +70,18 @@ function onGestureHandlerEvent(
|
|
70
70
|
) {
|
71
71
|
handler.handlers.onStart?.(event);
|
72
72
|
} else if (event.oldState !== event.state && event.state === State.END) {
|
73
|
-
|
73
|
+
if (event.oldState === State.ACTIVE) {
|
74
|
+
handler.handlers.onEnd?.(event, true);
|
75
|
+
}
|
76
|
+
handler.handlers.onFinalize?.(event, true);
|
74
77
|
} else if (
|
75
78
|
(event.state === State.FAILED || event.state === State.CANCELLED) &&
|
76
79
|
event.oldState !== event.state
|
77
80
|
) {
|
78
|
-
|
81
|
+
if (event.oldState === State.ACTIVE) {
|
82
|
+
handler.handlers.onEnd?.(event, false);
|
83
|
+
}
|
84
|
+
handler.handlers.onFinalize?.(event, false);
|
79
85
|
}
|
80
86
|
} else if (isTouchEvent(event)) {
|
81
87
|
switch (event.eventType) {
|
@@ -56,6 +56,10 @@ export type HandlerCallbacks<EventPayloadT extends Record<string, unknown>> = {
|
|
56
56
|
event: GestureStateChangeEvent<EventPayloadT>,
|
57
57
|
success: boolean
|
58
58
|
) => void;
|
59
|
+
onFinalize?: (
|
60
|
+
event: GestureStateChangeEvent<EventPayloadT>,
|
61
|
+
success: boolean
|
62
|
+
) => void;
|
59
63
|
onUpdate?: (event: GestureUpdateEvent<EventPayloadT>) => void;
|
60
64
|
onTouchesDown?: TouchEventHandlerType;
|
61
65
|
onTouchesMove?: TouchEventHandlerType;
|
@@ -70,10 +74,11 @@ export const CALLBACK_TYPE = {
|
|
70
74
|
START: 2,
|
71
75
|
UPDATE: 3,
|
72
76
|
END: 4,
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
+
FINALIZE: 5,
|
78
|
+
TOUCHES_DOWN: 6,
|
79
|
+
TOUCHES_MOVE: 7,
|
80
|
+
TOUCHES_UP: 8,
|
81
|
+
TOUCHES_CANCELLED: 9,
|
77
82
|
} as const;
|
78
83
|
|
79
84
|
// Allow using CALLBACK_TYPE as object and type
|
@@ -160,6 +165,18 @@ export abstract class BaseGesture<
|
|
160
165
|
return this;
|
161
166
|
}
|
162
167
|
|
168
|
+
onFinalize(
|
169
|
+
callback: (
|
170
|
+
event: GestureStateChangeEvent<EventPayloadT>,
|
171
|
+
success: boolean
|
172
|
+
) => void
|
173
|
+
) {
|
174
|
+
this.handlers.onFinalize = callback;
|
175
|
+
//@ts-ignore if callback is a worklet, the property will be available, if not then the check will return false
|
176
|
+
this.handlers.isWorklet[CALLBACK_TYPE.FINALIZE] = this.isWorklet(callback);
|
177
|
+
return this;
|
178
|
+
}
|
179
|
+
|
163
180
|
onTouchesDown(callback: TouchEventHandlerType) {
|
164
181
|
this.config.needsPointerData = true;
|
165
182
|
this.handlers.onTouchesDown = callback;
|
@@ -1,80 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<Scheme
|
3
|
-
LastUpgradeVersion = "0830"
|
4
|
-
version = "1.3">
|
5
|
-
<BuildAction
|
6
|
-
parallelizeBuildables = "YES"
|
7
|
-
buildImplicitDependencies = "YES">
|
8
|
-
<BuildActionEntries>
|
9
|
-
<BuildActionEntry
|
10
|
-
buildForTesting = "YES"
|
11
|
-
buildForRunning = "YES"
|
12
|
-
buildForProfiling = "YES"
|
13
|
-
buildForArchiving = "YES"
|
14
|
-
buildForAnalyzing = "YES">
|
15
|
-
<BuildableReference
|
16
|
-
BuildableIdentifier = "primary"
|
17
|
-
BlueprintIdentifier = "58B511DA1A9E6C8500147676"
|
18
|
-
BuildableName = "libRNGestureHandler.a"
|
19
|
-
BlueprintName = "RNGestureHandler"
|
20
|
-
ReferencedContainer = "container:RNGestureHandler.xcodeproj">
|
21
|
-
</BuildableReference>
|
22
|
-
</BuildActionEntry>
|
23
|
-
</BuildActionEntries>
|
24
|
-
</BuildAction>
|
25
|
-
<TestAction
|
26
|
-
buildConfiguration = "Debug"
|
27
|
-
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
28
|
-
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
29
|
-
shouldUseLaunchSchemeArgsEnv = "YES">
|
30
|
-
<Testables>
|
31
|
-
</Testables>
|
32
|
-
<AdditionalOptions>
|
33
|
-
</AdditionalOptions>
|
34
|
-
</TestAction>
|
35
|
-
<LaunchAction
|
36
|
-
buildConfiguration = "Debug"
|
37
|
-
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
38
|
-
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
39
|
-
launchStyle = "0"
|
40
|
-
useCustomWorkingDirectory = "NO"
|
41
|
-
ignoresPersistentStateOnLaunch = "NO"
|
42
|
-
debugDocumentVersioning = "YES"
|
43
|
-
debugServiceExtension = "internal"
|
44
|
-
allowLocationSimulation = "YES">
|
45
|
-
<MacroExpansion>
|
46
|
-
<BuildableReference
|
47
|
-
BuildableIdentifier = "primary"
|
48
|
-
BlueprintIdentifier = "58B511DA1A9E6C8500147676"
|
49
|
-
BuildableName = "libRNGestureHandler.a"
|
50
|
-
BlueprintName = "RNGestureHandler"
|
51
|
-
ReferencedContainer = "container:RNGestureHandler.xcodeproj">
|
52
|
-
</BuildableReference>
|
53
|
-
</MacroExpansion>
|
54
|
-
<AdditionalOptions>
|
55
|
-
</AdditionalOptions>
|
56
|
-
</LaunchAction>
|
57
|
-
<ProfileAction
|
58
|
-
buildConfiguration = "Release"
|
59
|
-
shouldUseLaunchSchemeArgsEnv = "YES"
|
60
|
-
savedToolIdentifier = ""
|
61
|
-
useCustomWorkingDirectory = "NO"
|
62
|
-
debugDocumentVersioning = "YES">
|
63
|
-
<MacroExpansion>
|
64
|
-
<BuildableReference
|
65
|
-
BuildableIdentifier = "primary"
|
66
|
-
BlueprintIdentifier = "58B511DA1A9E6C8500147676"
|
67
|
-
BuildableName = "libRNGestureHandler.a"
|
68
|
-
BlueprintName = "RNGestureHandler"
|
69
|
-
ReferencedContainer = "container:RNGestureHandler.xcodeproj">
|
70
|
-
</BuildableReference>
|
71
|
-
</MacroExpansion>
|
72
|
-
</ProfileAction>
|
73
|
-
<AnalyzeAction
|
74
|
-
buildConfiguration = "Debug">
|
75
|
-
</AnalyzeAction>
|
76
|
-
<ArchiveAction
|
77
|
-
buildConfiguration = "Release"
|
78
|
-
revealArchiveInOrganizer = "YES">
|
79
|
-
</ArchiveAction>
|
80
|
-
</Scheme>
|