react-native-gesture-handler 2.2.0 → 2.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +1 @@
1
- {"version":3,"sources":["eventReceiver.ts"],"names":["DeviceEventEmitter","State","EventType","findHandler","gestureHandlerEventSubscription","gestureHandlerStateChangeEventSubscription","dummyStateManager","begin","console","warn","activate","end","fail","lastUpdateEvent","isStateChangeEvent","event","oldState","isTouchEvent","eventType","onGestureHandlerEvent","handler","handlerTag","UNDETERMINED","state","BEGAN","handlers","onBegin","ACTIVE","onStart","END","onEnd","onFinalize","undefined","FAILED","CANCELLED","TOUCHES_DOWN","onTouchesDown","TOUCHES_MOVE","onTouchesMove","TOUCHES_UP","onTouchesUp","TOUCHES_CANCELLED","onTouchesCancelled","onUpdate","onChange","changeEventCalculator","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\nconst lastUpdateEvent: (GestureUpdateEvent | undefined)[] = [];\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 lastUpdateEvent[handler.handlers.handlerTag] = 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 lastUpdateEvent[handler.handlers.handlerTag] = undefined;\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 lastUpdateEvent[handler.handlers.handlerTag] = undefined;\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 if (handler.handlers.onChange && handler.handlers.changeEventCalculator) {\n handler.handlers.onChange?.(\n handler.handlers.changeEventCalculator?.(\n event,\n lastUpdateEvent[handler.handlers.handlerTag]\n )\n );\n\n lastUpdateEvent[handler.handlers.handlerTag] = event;\n }\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"]}
1
+ {"version":3,"sources":["eventReceiver.ts"],"names":["DeviceEventEmitter","State","EventType","findHandler","gestureHandlerEventSubscription","gestureHandlerStateChangeEventSubscription","dummyStateManager","begin","console","warn","activate","end","fail","lastUpdateEvent","isStateChangeEvent","event","oldState","isTouchEvent","eventType","onGestureHandlerEvent","handler","handlerTag","UNDETERMINED","state","BEGAN","handlers","onBegin","ACTIVE","onStart","END","onEnd","onFinalize","undefined","FAILED","CANCELLED","TOUCHES_DOWN","onTouchesDown","TOUCHES_MOVE","onTouchesMove","TOUCHES_UP","onTouchesUp","TOUCHES_CANCELLED","onTouchesCancelled","onUpdate","onChange","changeEventCalculator","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\nconst lastUpdateEvent: (GestureUpdateEvent | undefined)[] = [];\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\nexport function 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 lastUpdateEvent[handler.handlers.handlerTag] = 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 lastUpdateEvent[handler.handlers.handlerTag] = undefined;\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 lastUpdateEvent[handler.handlers.handlerTag] = undefined;\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 if (handler.handlers.onChange && handler.handlers.changeEventCalculator) {\n handler.handlers.onChange?.(\n handler.handlers.changeEventCalculator?.(\n event,\n lastUpdateEvent[handler.handlers.handlerTag]\n )\n );\n\n lastUpdateEvent[handler.handlers.handlerTag] = event;\n }\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"]}
@@ -272,7 +272,10 @@ class GestureHandler {
272
272
  // onHandlerStateChange only
273
273
  handlerTag: this.handlerTag,
274
274
  target: this.ref,
275
- oldState: this.oldState
275
+ // send oldState only when the state was changed, or is different than ACTIVE
276
+ // GestureDetector relies on the presence of `oldState` to differentiate between
277
+ // update events and state change events
278
+ oldState: state !== this.previousState || state != 4 ? this.oldState : undefined
276
279
  },
277
280
  timeStamp: Date.now()
278
281
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["GestureHandler.ts"],"names":["Hammer","findNodeHandle","State","EventMap","NodeManager","gestureInstances","GestureHandler","id","name","gestureInstance","isDiscrete","shouldEnableGestureOnSetup","Error","constructor","UNDETERMINED","Array","isArray","config","waitFor","gesture","removePendingGesture","clearSelfAsPending","hammer","stop","destroy","x","y","rect","view","getBoundingClientRect","pointerInside","left","right","top","bottom","nativeEvent","onGestureHandlerEvent","onGestureHandlerStateChange","propsRef","current","event","transformEventData","invokeNullableMethod","lastSentState","state","get","enable","recognizer","inputData","enabled","isGestureRunning","hasGestureFailed","options","maxPointers","_stillWaiting","_getPendingGestures","length","hasCustomActivationCriteria","deltaRotation","initialRotation","rotation","success","failed","isGestureEnabledForEvent","getConfig","simulateCancelEvent","params","getHammerConfig","set","onWaitingEnded","_gesture","pendingGestures","addPendingGesture","_config","_recognizer","_event","NativeGestureClass","updateHasCustomActivationCriteria","updateGestureConfig","props","ensureConfig","sync","getState","type","eventType","numberOfPointers","changedTouch","changedPointers","isPointInView","clientX","clientY","previousState","oldState","transformNativeEvent","handlerTag","target","ref","timeStamp","Date","now","cancelPendingGestures","Object","values","cancelEvent","notifyPendingGestures","onGestureEnded","forceInvalidate","sendEvent","INPUT_CANCEL","isFinal","onRawEvent","isFirst","setView","Manager","add","on","ev","setTimeout","setupEvents","onStart","onGestureActivated","deltaX","deltaY","__initialX","__initialY","onSuccess","stillWaiting","filter","pointers","minPointers","_inputData","method","__getHandler","handler","argMapping","__nodeConfig","index","key","value","entries","nativeValue","setValue","minDist","minDistSq","minVelocity","minVelocitySq","maxDist","maxDistSq","asArray","map","getHandler","v","configProps","forEach","prop","Number","NaN"],"mappings":"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","sourcesContent":["/* eslint-disable eslint-comments/no-unlimited-disable */\n/* eslint-disable */\nimport Hammer from '@egjs/hammerjs';\nimport { findNodeHandle } from 'react-native';\n\nimport { State } from '../State';\nimport { EventMap } from './constants';\nimport * as NodeManager from './NodeManager';\n\n// TODO(TS) Replace with HammerInput if https://github.com/DefinitelyTyped/DefinitelyTyped/pull/50438/files is merged\nexport type HammerInputExt = Omit<HammerInput, 'destroy' | 'handler' | 'init'>;\n\nexport type Config = Partial<{\n enabled: boolean;\n minPointers: number;\n maxPointers: number;\n minDist: number;\n minDistSq: number;\n minVelocity: number;\n minVelocitySq: number;\n maxDist: number;\n maxDistSq: number;\n failOffsetXStart: number;\n failOffsetYStart: number;\n failOffsetXEnd: number;\n failOffsetYEnd: number;\n activeOffsetXStart: number;\n activeOffsetXEnd: number;\n activeOffsetYStart: number;\n activeOffsetYEnd: number;\n waitFor: any[] | null;\n}>;\n\ntype NativeEvent = ReturnType<GestureHandler['transformEventData']>;\n\nlet gestureInstances = 0;\n\nabstract class GestureHandler {\n public handlerTag: any;\n public isGestureRunning = false;\n public view: number | null = null;\n protected hasCustomActivationCriteria: boolean;\n protected hasGestureFailed = false;\n protected hammer: HammerManager | null = null;\n protected initialRotation: number | null = null;\n protected __initialX: any;\n protected __initialY: any;\n protected config: Config = {};\n protected previousState: State = State.UNDETERMINED;\n private pendingGestures: Record<string, this> = {};\n private oldState: State = State.UNDETERMINED;\n private lastSentState: State | null = null;\n private gestureInstance: number;\n private _stillWaiting: any;\n private propsRef: any;\n private ref: any;\n\n abstract get name(): string;\n\n get id() {\n return `${this.name}${this.gestureInstance}`;\n }\n\n get isDiscrete() {\n return false;\n }\n\n get shouldEnableGestureOnSetup(): boolean {\n throw new Error('Must override GestureHandler.shouldEnableGestureOnSetup');\n }\n\n constructor() {\n this.gestureInstance = gestureInstances++;\n this.hasCustomActivationCriteria = false;\n }\n\n getConfig() {\n return this.config;\n }\n\n onWaitingEnded(_gesture: this) {}\n\n removePendingGesture(id: string) {\n delete this.pendingGestures[id];\n }\n\n addPendingGesture(gesture: this) {\n this.pendingGestures[gesture.id] = gesture;\n }\n\n isGestureEnabledForEvent(\n _config: any,\n _recognizer: any,\n _event: any\n ): { failed?: boolean; success?: boolean } {\n return { success: true };\n }\n\n get NativeGestureClass(): RecognizerStatic {\n throw new Error('Must override GestureHandler.NativeGestureClass');\n }\n\n updateHasCustomActivationCriteria(_config: Config) {\n return true;\n }\n\n clearSelfAsPending = () => {\n if (Array.isArray(this.config.waitFor)) {\n for (const gesture of this.config.waitFor) {\n gesture.removePendingGesture(this.id);\n }\n }\n };\n\n updateGestureConfig({ enabled = true, ...props }) {\n this.clearSelfAsPending();\n\n this.config = ensureConfig({ enabled, ...props });\n this.hasCustomActivationCriteria = this.updateHasCustomActivationCriteria(\n this.config\n );\n if (Array.isArray(this.config.waitFor)) {\n for (const gesture of this.config.waitFor) {\n gesture.addPendingGesture(this);\n }\n }\n\n if (this.hammer) {\n this.sync();\n }\n return this.config;\n }\n\n destroy = () => {\n this.clearSelfAsPending();\n\n if (this.hammer) {\n this.hammer.stop(false);\n this.hammer.destroy();\n }\n this.hammer = null;\n };\n\n isPointInView = ({ x, y }: { x: number; y: number }) => {\n // @ts-ignore FIXME(TS)\n const rect = this.view!.getBoundingClientRect();\n const pointerInside =\n x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;\n return pointerInside;\n };\n\n getState(type: keyof typeof EventMap): State {\n // @ts-ignore TODO(TS) check if this is needed\n if (type == 0) {\n return 0;\n }\n return EventMap[type];\n }\n\n transformEventData(event: HammerInputExt) {\n const { eventType, maxPointers: numberOfPointers } = event;\n // const direction = DirectionMap[ev.direction];\n const changedTouch = event.changedPointers[0];\n const pointerInside = this.isPointInView({\n x: changedTouch.clientX,\n y: changedTouch.clientY,\n });\n\n // TODO(TS) Remove cast after https://github.com/DefinitelyTyped/DefinitelyTyped/pull/50966 is merged.\n const state = this.getState(eventType as 1 | 2 | 4 | 8);\n if (state !== this.previousState) {\n this.oldState = this.previousState;\n this.previousState = state;\n }\n\n return {\n nativeEvent: {\n numberOfPointers,\n state,\n pointerInside,\n ...this.transformNativeEvent(event),\n // onHandlerStateChange only\n handlerTag: this.handlerTag,\n target: this.ref,\n oldState: this.oldState,\n },\n timeStamp: Date.now(),\n };\n }\n\n transformNativeEvent(_event: HammerInputExt) {\n return {};\n }\n\n sendEvent = (nativeEvent: HammerInputExt) => {\n const {\n onGestureHandlerEvent,\n onGestureHandlerStateChange,\n } = this.propsRef.current;\n\n const event = this.transformEventData(nativeEvent);\n\n invokeNullableMethod(onGestureHandlerEvent, event);\n if (this.lastSentState !== event.nativeEvent.state) {\n this.lastSentState = event.nativeEvent.state as State;\n invokeNullableMethod(onGestureHandlerStateChange, event);\n }\n };\n\n cancelPendingGestures(event: HammerInputExt) {\n for (const gesture of Object.values(this.pendingGestures)) {\n if (gesture && gesture.isGestureRunning) {\n gesture.hasGestureFailed = true;\n gesture.cancelEvent(event);\n }\n }\n }\n\n notifyPendingGestures() {\n for (const gesture of Object.values(this.pendingGestures)) {\n if (gesture) {\n gesture.onWaitingEnded(this);\n }\n }\n }\n\n // FIXME event is undefined in runtime when firstly invoked (see Draggable example), check other functions taking event as input\n onGestureEnded(event: HammerInputExt) {\n this.isGestureRunning = false;\n this.cancelPendingGestures(event);\n }\n\n forceInvalidate(event: HammerInputExt) {\n if (this.isGestureRunning) {\n this.hasGestureFailed = true;\n this.cancelEvent(event);\n }\n }\n\n cancelEvent(event: HammerInputExt) {\n this.notifyPendingGestures();\n this.sendEvent({\n ...event,\n eventType: Hammer.INPUT_CANCEL,\n isFinal: true,\n });\n this.onGestureEnded(event);\n }\n\n onRawEvent({ isFirst }: HammerInputExt) {\n if (isFirst) {\n this.hasGestureFailed = false;\n }\n }\n\n setView(ref: Parameters<typeof findNodeHandle>['0'], propsRef: any) {\n if (ref == null) {\n this.destroy();\n this.view = null;\n return;\n }\n\n this.propsRef = propsRef;\n this.ref = ref;\n\n this.view = findNodeHandle(ref);\n this.hammer = new Hammer.Manager(this.view as any);\n\n this.oldState = State.UNDETERMINED;\n this.previousState = State.UNDETERMINED;\n this.lastSentState = null;\n\n const { NativeGestureClass } = this;\n // @ts-ignore TODO(TS)\n const gesture = new NativeGestureClass(this.getHammerConfig());\n this.hammer.add(gesture);\n\n this.hammer.on('hammer.input', (ev: HammerInput) => {\n if (!this.config.enabled) {\n this.hasGestureFailed = false;\n this.isGestureRunning = false;\n return;\n }\n\n this.onRawEvent((ev as unknown) as HammerInputExt);\n\n // TODO: Bacon: Check against something other than null\n // The isFirst value is not called when the first rotation is calculated.\n if (this.initialRotation === null && ev.rotation !== 0) {\n this.initialRotation = ev.rotation;\n }\n if (ev.isFinal) {\n // in favor of a willFail otherwise the last frame of the gesture will be captured.\n setTimeout(() => {\n this.initialRotation = null;\n this.hasGestureFailed = false;\n });\n }\n });\n\n this.setupEvents();\n this.sync();\n }\n\n setupEvents() {\n // TODO(TS) Hammer types aren't exactly that what we get in runtime\n if (!this.isDiscrete) {\n this.hammer!.on(`${this.name}start`, (event: HammerInput) =>\n this.onStart((event as unknown) as HammerInputExt)\n );\n this.hammer!.on(\n `${this.name}end ${this.name}cancel`,\n (event: HammerInput) => {\n this.onGestureEnded((event as unknown) as HammerInputExt);\n }\n );\n }\n this.hammer!.on(this.name, (ev: HammerInput) =>\n this.onGestureActivated((ev as unknown) as HammerInputExt)\n ); // TODO(TS) remove cast after https://github.com/DefinitelyTyped/DefinitelyTyped/pull/50438 is merged\n }\n\n onStart({ deltaX, deltaY, rotation }: HammerInputExt) {\n // Reset the state for the next gesture\n this.oldState = State.UNDETERMINED;\n this.previousState = State.UNDETERMINED;\n this.lastSentState = null;\n\n this.isGestureRunning = true;\n this.__initialX = deltaX;\n this.__initialY = deltaY;\n this.initialRotation = rotation;\n }\n\n onGestureActivated(ev: HammerInputExt) {\n this.sendEvent(ev);\n }\n\n onSuccess() {}\n\n _getPendingGestures() {\n if (Array.isArray(this.config.waitFor) && this.config.waitFor.length) {\n // Get the list of gestures that this gesture is still waiting for.\n // Use `=== false` in case a ref that isn't a gesture handler is used.\n const stillWaiting = this.config.waitFor.filter(\n ({ hasGestureFailed }) => hasGestureFailed === false\n );\n return stillWaiting;\n }\n return [];\n }\n\n getHammerConfig() {\n const pointers =\n this.config.minPointers === this.config.maxPointers\n ? this.config.minPointers\n : 0;\n return {\n pointers,\n };\n }\n\n sync = () => {\n const gesture = this.hammer!.get(this.name);\n if (!gesture) return;\n\n const enable = (recognizer: any, inputData: any) => {\n if (!this.config.enabled) {\n this.isGestureRunning = false;\n this.hasGestureFailed = false;\n return false;\n }\n\n // Prevent events before the system is ready.\n if (\n !inputData ||\n !recognizer.options ||\n typeof inputData.maxPointers === 'undefined'\n ) {\n return this.shouldEnableGestureOnSetup;\n }\n\n if (this.hasGestureFailed) {\n return false;\n }\n\n if (!this.isDiscrete) {\n if (this.isGestureRunning) {\n return true;\n }\n // The built-in hammer.js \"waitFor\" doesn't work across multiple views.\n // Only process if there are views to wait for.\n this._stillWaiting = this._getPendingGestures();\n // This gesture should continue waiting.\n if (this._stillWaiting.length) {\n // Check to see if one of the gestures you're waiting for has started.\n // If it has then the gesture should fail.\n for (const gesture of this._stillWaiting) {\n // When the target gesture has started, this gesture must force fail.\n if (!gesture.isDiscrete && gesture.isGestureRunning) {\n this.hasGestureFailed = true;\n this.isGestureRunning = false;\n return false;\n }\n }\n // This gesture shouldn't start until the others have finished.\n return false;\n }\n }\n\n // Use default behaviour\n if (!this.hasCustomActivationCriteria) {\n return true;\n }\n\n const deltaRotation =\n this.initialRotation == null\n ? 0\n : inputData.rotation - this.initialRotation;\n // @ts-ignore FIXME(TS)\n const { success, failed } = this.isGestureEnabledForEvent(\n this.getConfig(),\n recognizer,\n {\n ...inputData,\n deltaRotation,\n }\n );\n\n if (failed) {\n this.simulateCancelEvent(inputData);\n this.hasGestureFailed = true;\n }\n return success;\n };\n\n const params = this.getHammerConfig();\n // @ts-ignore FIXME(TS)\n gesture.set({ ...params, enable });\n };\n\n simulateCancelEvent(_inputData: any) {}\n}\n\n// TODO(TS) investigate this method\n// Used for sending data to a callback or AnimatedEvent\nfunction invokeNullableMethod(\n method:\n | ((event: NativeEvent) => void)\n | { __getHandler: () => (event: NativeEvent) => void }\n | { __nodeConfig: { argMapping: any } },\n event: NativeEvent\n) {\n if (method) {\n if (typeof method === 'function') {\n method(event);\n } else {\n // For use with reanimated's AnimatedEvent\n if (\n '__getHandler' in method &&\n typeof method.__getHandler === 'function'\n ) {\n const handler = method.__getHandler();\n invokeNullableMethod(handler, event);\n } else {\n if ('__nodeConfig' in method) {\n const { argMapping } = method.__nodeConfig;\n if (Array.isArray(argMapping)) {\n for (const [index, [key, value]] of argMapping.entries()) {\n if (key in event.nativeEvent) {\n // @ts-ignore fix method type\n const nativeValue = event.nativeEvent[key];\n if (value && value.setValue) {\n // Reanimated API\n value.setValue(nativeValue);\n } else {\n // RN Animated API\n method.__nodeConfig.argMapping[index] = [key, nativeValue];\n }\n }\n }\n }\n }\n }\n }\n }\n}\n\n// Validate the props\nfunction ensureConfig(config: Config): Required<Config> {\n const props = { ...config };\n\n // TODO(TS) We use ! to assert that if property is present then value is not empty (null, undefined)\n if ('minDist' in config) {\n props.minDist = config.minDist;\n props.minDistSq = props.minDist! * props.minDist!;\n }\n if ('minVelocity' in config) {\n props.minVelocity = config.minVelocity;\n props.minVelocitySq = props.minVelocity! * props.minVelocity!;\n }\n if ('maxDist' in config) {\n props.maxDist = config.maxDist;\n props.maxDistSq = config.maxDist! * config.maxDist!;\n }\n if ('waitFor' in config) {\n props.waitFor = asArray(config.waitFor)\n .map(({ handlerTag }: { handlerTag: number }) =>\n NodeManager.getHandler(handlerTag)\n )\n .filter((v) => v);\n } else {\n props.waitFor = null;\n }\n\n const configProps = [\n 'minPointers',\n 'maxPointers',\n 'minDist',\n 'maxDist',\n 'maxDistSq',\n 'minVelocitySq',\n 'minDistSq',\n 'minVelocity',\n 'failOffsetXStart',\n 'failOffsetYStart',\n 'failOffsetXEnd',\n 'failOffsetYEnd',\n 'activeOffsetXStart',\n 'activeOffsetXEnd',\n 'activeOffsetYStart',\n 'activeOffsetYEnd',\n ] as const;\n configProps.forEach((prop: typeof configProps[number]) => {\n if (typeof props[prop] === 'undefined') {\n props[prop] = Number.NaN;\n }\n });\n return props as Required<Config>; // TODO(TS) how to convince TS that props are filled?\n}\n\nfunction asArray<T>(value: T | T[]) {\n // TODO(TS) use config.waitFor type\n return value == null ? [] : Array.isArray(value) ? value : [value];\n}\n\nexport default GestureHandler;\n"]}
1
+ {"version":3,"sources":["GestureHandler.ts"],"names":["Hammer","findNodeHandle","State","EventMap","NodeManager","gestureInstances","GestureHandler","id","name","gestureInstance","isDiscrete","shouldEnableGestureOnSetup","Error","constructor","UNDETERMINED","Array","isArray","config","waitFor","gesture","removePendingGesture","clearSelfAsPending","hammer","stop","destroy","x","y","rect","view","getBoundingClientRect","pointerInside","left","right","top","bottom","nativeEvent","onGestureHandlerEvent","onGestureHandlerStateChange","propsRef","current","event","transformEventData","invokeNullableMethod","lastSentState","state","get","enable","recognizer","inputData","enabled","isGestureRunning","hasGestureFailed","options","maxPointers","_stillWaiting","_getPendingGestures","length","hasCustomActivationCriteria","deltaRotation","initialRotation","rotation","success","failed","isGestureEnabledForEvent","getConfig","simulateCancelEvent","params","getHammerConfig","set","onWaitingEnded","_gesture","pendingGestures","addPendingGesture","_config","_recognizer","_event","NativeGestureClass","updateHasCustomActivationCriteria","updateGestureConfig","props","ensureConfig","sync","getState","type","eventType","numberOfPointers","changedTouch","changedPointers","isPointInView","clientX","clientY","previousState","oldState","transformNativeEvent","handlerTag","target","ref","undefined","timeStamp","Date","now","cancelPendingGestures","Object","values","cancelEvent","notifyPendingGestures","onGestureEnded","forceInvalidate","sendEvent","INPUT_CANCEL","isFinal","onRawEvent","isFirst","setView","Manager","add","on","ev","setTimeout","setupEvents","onStart","onGestureActivated","deltaX","deltaY","__initialX","__initialY","onSuccess","stillWaiting","filter","pointers","minPointers","_inputData","method","__getHandler","handler","argMapping","__nodeConfig","index","key","value","entries","nativeValue","setValue","minDist","minDistSq","minVelocity","minVelocitySq","maxDist","maxDistSq","asArray","map","getHandler","v","configProps","forEach","prop","Number","NaN"],"mappings":"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","sourcesContent":["/* eslint-disable eslint-comments/no-unlimited-disable */\n/* eslint-disable */\nimport Hammer from '@egjs/hammerjs';\nimport { findNodeHandle } from 'react-native';\n\nimport { State } from '../State';\nimport { EventMap } from './constants';\nimport * as NodeManager from './NodeManager';\n\n// TODO(TS) Replace with HammerInput if https://github.com/DefinitelyTyped/DefinitelyTyped/pull/50438/files is merged\nexport type HammerInputExt = Omit<HammerInput, 'destroy' | 'handler' | 'init'>;\n\nexport type Config = Partial<{\n enabled: boolean;\n minPointers: number;\n maxPointers: number;\n minDist: number;\n minDistSq: number;\n minVelocity: number;\n minVelocitySq: number;\n maxDist: number;\n maxDistSq: number;\n failOffsetXStart: number;\n failOffsetYStart: number;\n failOffsetXEnd: number;\n failOffsetYEnd: number;\n activeOffsetXStart: number;\n activeOffsetXEnd: number;\n activeOffsetYStart: number;\n activeOffsetYEnd: number;\n waitFor: any[] | null;\n}>;\n\ntype NativeEvent = ReturnType<GestureHandler['transformEventData']>;\n\nlet gestureInstances = 0;\n\nabstract class GestureHandler {\n public handlerTag: any;\n public isGestureRunning = false;\n public view: number | null = null;\n protected hasCustomActivationCriteria: boolean;\n protected hasGestureFailed = false;\n protected hammer: HammerManager | null = null;\n protected initialRotation: number | null = null;\n protected __initialX: any;\n protected __initialY: any;\n protected config: Config = {};\n protected previousState: State = State.UNDETERMINED;\n private pendingGestures: Record<string, this> = {};\n private oldState: State = State.UNDETERMINED;\n private lastSentState: State | null = null;\n private gestureInstance: number;\n private _stillWaiting: any;\n private propsRef: any;\n private ref: any;\n\n abstract get name(): string;\n\n get id() {\n return `${this.name}${this.gestureInstance}`;\n }\n\n get isDiscrete() {\n return false;\n }\n\n get shouldEnableGestureOnSetup(): boolean {\n throw new Error('Must override GestureHandler.shouldEnableGestureOnSetup');\n }\n\n constructor() {\n this.gestureInstance = gestureInstances++;\n this.hasCustomActivationCriteria = false;\n }\n\n getConfig() {\n return this.config;\n }\n\n onWaitingEnded(_gesture: this) {}\n\n removePendingGesture(id: string) {\n delete this.pendingGestures[id];\n }\n\n addPendingGesture(gesture: this) {\n this.pendingGestures[gesture.id] = gesture;\n }\n\n isGestureEnabledForEvent(\n _config: any,\n _recognizer: any,\n _event: any\n ): { failed?: boolean; success?: boolean } {\n return { success: true };\n }\n\n get NativeGestureClass(): RecognizerStatic {\n throw new Error('Must override GestureHandler.NativeGestureClass');\n }\n\n updateHasCustomActivationCriteria(_config: Config) {\n return true;\n }\n\n clearSelfAsPending = () => {\n if (Array.isArray(this.config.waitFor)) {\n for (const gesture of this.config.waitFor) {\n gesture.removePendingGesture(this.id);\n }\n }\n };\n\n updateGestureConfig({ enabled = true, ...props }) {\n this.clearSelfAsPending();\n\n this.config = ensureConfig({ enabled, ...props });\n this.hasCustomActivationCriteria = this.updateHasCustomActivationCriteria(\n this.config\n );\n if (Array.isArray(this.config.waitFor)) {\n for (const gesture of this.config.waitFor) {\n gesture.addPendingGesture(this);\n }\n }\n\n if (this.hammer) {\n this.sync();\n }\n return this.config;\n }\n\n destroy = () => {\n this.clearSelfAsPending();\n\n if (this.hammer) {\n this.hammer.stop(false);\n this.hammer.destroy();\n }\n this.hammer = null;\n };\n\n isPointInView = ({ x, y }: { x: number; y: number }) => {\n // @ts-ignore FIXME(TS)\n const rect = this.view!.getBoundingClientRect();\n const pointerInside =\n x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;\n return pointerInside;\n };\n\n getState(type: keyof typeof EventMap): State {\n // @ts-ignore TODO(TS) check if this is needed\n if (type == 0) {\n return 0;\n }\n return EventMap[type];\n }\n\n transformEventData(event: HammerInputExt) {\n const { eventType, maxPointers: numberOfPointers } = event;\n // const direction = DirectionMap[ev.direction];\n const changedTouch = event.changedPointers[0];\n const pointerInside = this.isPointInView({\n x: changedTouch.clientX,\n y: changedTouch.clientY,\n });\n\n // TODO(TS) Remove cast after https://github.com/DefinitelyTyped/DefinitelyTyped/pull/50966 is merged.\n const state = this.getState(eventType as 1 | 2 | 4 | 8);\n if (state !== this.previousState) {\n this.oldState = this.previousState;\n this.previousState = state;\n }\n\n return {\n nativeEvent: {\n numberOfPointers,\n state,\n pointerInside,\n ...this.transformNativeEvent(event),\n // onHandlerStateChange only\n handlerTag: this.handlerTag,\n target: this.ref,\n // send oldState only when the state was changed, or is different than ACTIVE\n // GestureDetector relies on the presence of `oldState` to differentiate between\n // update events and state change events\n oldState:\n state !== this.previousState || state != 4\n ? this.oldState\n : undefined,\n },\n timeStamp: Date.now(),\n };\n }\n\n transformNativeEvent(_event: HammerInputExt) {\n return {};\n }\n\n sendEvent = (nativeEvent: HammerInputExt) => {\n const {\n onGestureHandlerEvent,\n onGestureHandlerStateChange,\n } = this.propsRef.current;\n\n const event = this.transformEventData(nativeEvent);\n\n invokeNullableMethod(onGestureHandlerEvent, event);\n if (this.lastSentState !== event.nativeEvent.state) {\n this.lastSentState = event.nativeEvent.state as State;\n invokeNullableMethod(onGestureHandlerStateChange, event);\n }\n };\n\n cancelPendingGestures(event: HammerInputExt) {\n for (const gesture of Object.values(this.pendingGestures)) {\n if (gesture && gesture.isGestureRunning) {\n gesture.hasGestureFailed = true;\n gesture.cancelEvent(event);\n }\n }\n }\n\n notifyPendingGestures() {\n for (const gesture of Object.values(this.pendingGestures)) {\n if (gesture) {\n gesture.onWaitingEnded(this);\n }\n }\n }\n\n // FIXME event is undefined in runtime when firstly invoked (see Draggable example), check other functions taking event as input\n onGestureEnded(event: HammerInputExt) {\n this.isGestureRunning = false;\n this.cancelPendingGestures(event);\n }\n\n forceInvalidate(event: HammerInputExt) {\n if (this.isGestureRunning) {\n this.hasGestureFailed = true;\n this.cancelEvent(event);\n }\n }\n\n cancelEvent(event: HammerInputExt) {\n this.notifyPendingGestures();\n this.sendEvent({\n ...event,\n eventType: Hammer.INPUT_CANCEL,\n isFinal: true,\n });\n this.onGestureEnded(event);\n }\n\n onRawEvent({ isFirst }: HammerInputExt) {\n if (isFirst) {\n this.hasGestureFailed = false;\n }\n }\n\n setView(ref: Parameters<typeof findNodeHandle>['0'], propsRef: any) {\n if (ref == null) {\n this.destroy();\n this.view = null;\n return;\n }\n\n this.propsRef = propsRef;\n this.ref = ref;\n\n this.view = findNodeHandle(ref);\n this.hammer = new Hammer.Manager(this.view as any);\n\n this.oldState = State.UNDETERMINED;\n this.previousState = State.UNDETERMINED;\n this.lastSentState = null;\n\n const { NativeGestureClass } = this;\n // @ts-ignore TODO(TS)\n const gesture = new NativeGestureClass(this.getHammerConfig());\n this.hammer.add(gesture);\n\n this.hammer.on('hammer.input', (ev: HammerInput) => {\n if (!this.config.enabled) {\n this.hasGestureFailed = false;\n this.isGestureRunning = false;\n return;\n }\n\n this.onRawEvent((ev as unknown) as HammerInputExt);\n\n // TODO: Bacon: Check against something other than null\n // The isFirst value is not called when the first rotation is calculated.\n if (this.initialRotation === null && ev.rotation !== 0) {\n this.initialRotation = ev.rotation;\n }\n if (ev.isFinal) {\n // in favor of a willFail otherwise the last frame of the gesture will be captured.\n setTimeout(() => {\n this.initialRotation = null;\n this.hasGestureFailed = false;\n });\n }\n });\n\n this.setupEvents();\n this.sync();\n }\n\n setupEvents() {\n // TODO(TS) Hammer types aren't exactly that what we get in runtime\n if (!this.isDiscrete) {\n this.hammer!.on(`${this.name}start`, (event: HammerInput) =>\n this.onStart((event as unknown) as HammerInputExt)\n );\n this.hammer!.on(\n `${this.name}end ${this.name}cancel`,\n (event: HammerInput) => {\n this.onGestureEnded((event as unknown) as HammerInputExt);\n }\n );\n }\n this.hammer!.on(this.name, (ev: HammerInput) =>\n this.onGestureActivated((ev as unknown) as HammerInputExt)\n ); // TODO(TS) remove cast after https://github.com/DefinitelyTyped/DefinitelyTyped/pull/50438 is merged\n }\n\n onStart({ deltaX, deltaY, rotation }: HammerInputExt) {\n // Reset the state for the next gesture\n this.oldState = State.UNDETERMINED;\n this.previousState = State.UNDETERMINED;\n this.lastSentState = null;\n\n this.isGestureRunning = true;\n this.__initialX = deltaX;\n this.__initialY = deltaY;\n this.initialRotation = rotation;\n }\n\n onGestureActivated(ev: HammerInputExt) {\n this.sendEvent(ev);\n }\n\n onSuccess() {}\n\n _getPendingGestures() {\n if (Array.isArray(this.config.waitFor) && this.config.waitFor.length) {\n // Get the list of gestures that this gesture is still waiting for.\n // Use `=== false` in case a ref that isn't a gesture handler is used.\n const stillWaiting = this.config.waitFor.filter(\n ({ hasGestureFailed }) => hasGestureFailed === false\n );\n return stillWaiting;\n }\n return [];\n }\n\n getHammerConfig() {\n const pointers =\n this.config.minPointers === this.config.maxPointers\n ? this.config.minPointers\n : 0;\n return {\n pointers,\n };\n }\n\n sync = () => {\n const gesture = this.hammer!.get(this.name);\n if (!gesture) return;\n\n const enable = (recognizer: any, inputData: any) => {\n if (!this.config.enabled) {\n this.isGestureRunning = false;\n this.hasGestureFailed = false;\n return false;\n }\n\n // Prevent events before the system is ready.\n if (\n !inputData ||\n !recognizer.options ||\n typeof inputData.maxPointers === 'undefined'\n ) {\n return this.shouldEnableGestureOnSetup;\n }\n\n if (this.hasGestureFailed) {\n return false;\n }\n\n if (!this.isDiscrete) {\n if (this.isGestureRunning) {\n return true;\n }\n // The built-in hammer.js \"waitFor\" doesn't work across multiple views.\n // Only process if there are views to wait for.\n this._stillWaiting = this._getPendingGestures();\n // This gesture should continue waiting.\n if (this._stillWaiting.length) {\n // Check to see if one of the gestures you're waiting for has started.\n // If it has then the gesture should fail.\n for (const gesture of this._stillWaiting) {\n // When the target gesture has started, this gesture must force fail.\n if (!gesture.isDiscrete && gesture.isGestureRunning) {\n this.hasGestureFailed = true;\n this.isGestureRunning = false;\n return false;\n }\n }\n // This gesture shouldn't start until the others have finished.\n return false;\n }\n }\n\n // Use default behaviour\n if (!this.hasCustomActivationCriteria) {\n return true;\n }\n\n const deltaRotation =\n this.initialRotation == null\n ? 0\n : inputData.rotation - this.initialRotation;\n // @ts-ignore FIXME(TS)\n const { success, failed } = this.isGestureEnabledForEvent(\n this.getConfig(),\n recognizer,\n {\n ...inputData,\n deltaRotation,\n }\n );\n\n if (failed) {\n this.simulateCancelEvent(inputData);\n this.hasGestureFailed = true;\n }\n return success;\n };\n\n const params = this.getHammerConfig();\n // @ts-ignore FIXME(TS)\n gesture.set({ ...params, enable });\n };\n\n simulateCancelEvent(_inputData: any) {}\n}\n\n// TODO(TS) investigate this method\n// Used for sending data to a callback or AnimatedEvent\nfunction invokeNullableMethod(\n method:\n | ((event: NativeEvent) => void)\n | { __getHandler: () => (event: NativeEvent) => void }\n | { __nodeConfig: { argMapping: any } },\n event: NativeEvent\n) {\n if (method) {\n if (typeof method === 'function') {\n method(event);\n } else {\n // For use with reanimated's AnimatedEvent\n if (\n '__getHandler' in method &&\n typeof method.__getHandler === 'function'\n ) {\n const handler = method.__getHandler();\n invokeNullableMethod(handler, event);\n } else {\n if ('__nodeConfig' in method) {\n const { argMapping } = method.__nodeConfig;\n if (Array.isArray(argMapping)) {\n for (const [index, [key, value]] of argMapping.entries()) {\n if (key in event.nativeEvent) {\n // @ts-ignore fix method type\n const nativeValue = event.nativeEvent[key];\n if (value && value.setValue) {\n // Reanimated API\n value.setValue(nativeValue);\n } else {\n // RN Animated API\n method.__nodeConfig.argMapping[index] = [key, nativeValue];\n }\n }\n }\n }\n }\n }\n }\n }\n}\n\n// Validate the props\nfunction ensureConfig(config: Config): Required<Config> {\n const props = { ...config };\n\n // TODO(TS) We use ! to assert that if property is present then value is not empty (null, undefined)\n if ('minDist' in config) {\n props.minDist = config.minDist;\n props.minDistSq = props.minDist! * props.minDist!;\n }\n if ('minVelocity' in config) {\n props.minVelocity = config.minVelocity;\n props.minVelocitySq = props.minVelocity! * props.minVelocity!;\n }\n if ('maxDist' in config) {\n props.maxDist = config.maxDist;\n props.maxDistSq = config.maxDist! * config.maxDist!;\n }\n if ('waitFor' in config) {\n props.waitFor = asArray(config.waitFor)\n .map(({ handlerTag }: { handlerTag: number }) =>\n NodeManager.getHandler(handlerTag)\n )\n .filter((v) => v);\n } else {\n props.waitFor = null;\n }\n\n const configProps = [\n 'minPointers',\n 'maxPointers',\n 'minDist',\n 'maxDist',\n 'maxDistSq',\n 'minVelocitySq',\n 'minDistSq',\n 'minVelocity',\n 'failOffsetXStart',\n 'failOffsetYStart',\n 'failOffsetXEnd',\n 'failOffsetYEnd',\n 'activeOffsetXStart',\n 'activeOffsetXEnd',\n 'activeOffsetYStart',\n 'activeOffsetYEnd',\n ] as const;\n configProps.forEach((prop: typeof configProps[number]) => {\n if (typeof props[prop] === 'undefined') {\n props[prop] = Number.NaN;\n }\n });\n return props as Required<Config>; // TODO(TS) how to convince TS that props are filled?\n}\n\nfunction asArray<T>(value: T | T[]) {\n // TODO(TS) use config.waitFor type\n return value == null ? [] : Array.isArray(value) ? value : [value];\n}\n\nexport default GestureHandler;\n"]}
@@ -1,2 +1,4 @@
1
+ import { GestureTouchEvent, GestureUpdateEvent, GestureStateChangeEvent } from '../gestureHandlerCommon';
2
+ export declare function onGestureHandlerEvent(event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent): void;
1
3
  export declare function startListening(): void;
2
4
  export declare function stopListening(): void;
@@ -109,7 +109,7 @@ declare abstract class GestureHandler {
109
109
  nativeEvent: {
110
110
  handlerTag: any;
111
111
  target: any;
112
- oldState: State;
112
+ oldState: 0 | 1 | 2 | 4 | 3 | 5 | undefined;
113
113
  numberOfPointers: number;
114
114
  state: State;
115
115
  pointerInside: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-gesture-handler",
3
- "version": "2.2.0",
3
+ "version": "2.2.1",
4
4
  "description": "Experimental implementation of a new declarative API for gesture handling in react-native",
5
5
  "scripts": {
6
6
  "prepare": "bob build",
@@ -122,16 +122,6 @@ type InternalEventHandlers = {
122
122
  onGestureHandlerStateChange?: (event: any) => void;
123
123
  };
124
124
 
125
- let showedRngh2Notice = false;
126
- function showRngh2NoticeIfNeeded() {
127
- if (!showedRngh2Notice) {
128
- console.warn(
129
- "[react-native-gesture-handler] Seems like you're using an old API with gesture components, check out new Gestures system!"
130
- );
131
- showedRngh2Notice = true;
132
- }
133
- }
134
-
135
125
  // TODO(TS) - make sure that BaseGestureHandlerProps doesn't need other generic parameter to work with custom properties.
136
126
  export default function createHandler<
137
127
  T extends BaseGestureHandlerProps<U>,
@@ -172,9 +162,6 @@ export default function createHandler<
172
162
  }
173
163
  handlerIDToTag[props.id] = this.handlerTag;
174
164
  }
175
- if (__DEV__) {
176
- showRngh2NoticeIfNeeded();
177
- }
178
165
  }
179
166
 
180
167
  componentDidMount() {
@@ -16,6 +16,7 @@ import {
16
16
  GestureTouchEvent,
17
17
  GestureUpdateEvent,
18
18
  GestureStateChangeEvent,
19
+ HandlerStateChangeEvent,
19
20
  } from '../gestureHandlerCommon';
20
21
  import {
21
22
  GestureStateManager,
@@ -32,6 +33,9 @@ import { tapGestureHandlerProps } from '../TapGestureHandler';
32
33
  import { State } from '../../State';
33
34
  import { EventType } from '../../EventType';
34
35
  import { ComposedGesture } from './gestureComposition';
36
+ import { Platform } from 'react-native';
37
+ import type RNGestureHandlerModuleWeb from '../../RNGestureHandlerModule.web';
38
+ import { onGestureHandlerEvent } from './eventReceiver';
35
39
 
36
40
  const ALLOWED_PROPS = [
37
41
  ...baseGestureHandlerWithMonitorProps,
@@ -79,12 +83,17 @@ function dropHandlers(preparedGesture: GestureConfigReference) {
79
83
  }
80
84
  }
81
85
 
86
+ interface WebEventHandler {
87
+ onGestureHandlerEvent: (event: HandlerStateChangeEvent<unknown>) => void;
88
+ }
89
+
82
90
  interface AttachHandlersConfig {
83
91
  preparedGesture: GestureConfigReference;
84
92
  gestureConfig: ComposedGesture | GestureType | undefined;
85
93
  gesture: GestureType[];
86
94
  viewTag: number;
87
95
  useAnimated: boolean;
96
+ webEventHandlersRef: React.RefObject<WebEventHandler>;
88
97
  }
89
98
 
90
99
  function attachHandlers({
@@ -93,6 +102,7 @@ function attachHandlers({
93
102
  gesture,
94
103
  viewTag,
95
104
  useAnimated,
105
+ webEventHandlersRef,
96
106
  }: AttachHandlersConfig) {
97
107
  if (!preparedGesture.firstExecution) {
98
108
  gestureConfig?.initialize();
@@ -142,11 +152,20 @@ function attachHandlers({
142
152
  preparedGesture.config = gesture;
143
153
 
144
154
  for (const gesture of preparedGesture.config) {
145
- RNGestureHandlerModule.attachGestureHandler(
146
- gesture.handlerTag,
147
- viewTag,
148
- !useAnimated // send direct events when using animatedGesture, device events otherwise
149
- );
155
+ if (Platform.OS === 'web') {
156
+ (RNGestureHandlerModule.attachGestureHandler as typeof RNGestureHandlerModuleWeb.attachGestureHandler)(
157
+ gesture.handlerTag,
158
+ viewTag,
159
+ !useAnimated, // send direct events when using animatedGesture, device events otherwise
160
+ webEventHandlersRef
161
+ );
162
+ } else {
163
+ RNGestureHandlerModule.attachGestureHandler(
164
+ gesture.handlerTag,
165
+ viewTag,
166
+ !useAnimated // send direct events when using animatedGesture, device events otherwise
167
+ );
168
+ }
150
169
  }
151
170
 
152
171
  if (preparedGesture.animatedHandlers) {
@@ -166,8 +185,12 @@ function updateHandlers(
166
185
  for (let i = 0; i < gesture.length; i++) {
167
186
  const handler = preparedGesture.config[i];
168
187
 
169
- gesture[i].handlerTag = handler.handlerTag;
170
- gesture[i].handlers.handlerTag = handler.handlerTag;
188
+ // only update handlerTag when it's actually different, it may be the same
189
+ // if gesture config object is wrapped with useMemo
190
+ if (gesture[i].handlerTag !== handler.handlerTag) {
191
+ gesture[i].handlerTag = handler.handlerTag;
192
+ gesture[i].handlers.handlerTag = handler.handlerTag;
193
+ }
171
194
  }
172
195
 
173
196
  // use setImmediate to extract handlerTags, because when it's ran, all refs should be updated
@@ -179,7 +202,6 @@ function updateHandlers(
179
202
 
180
203
  handler.config = gesture[i].config;
181
204
  handler.handlers = gesture[i].handlers;
182
- handler.handlers.handlerTag = handler.handlerTag;
183
205
 
184
206
  const requireToFail = extractValidHandlerTags(
185
207
  handler.config.requireToFail
@@ -224,7 +246,10 @@ function needsToReattach(
224
246
  return false;
225
247
  }
226
248
 
227
- function useAnimatedGesture(preparedGesture: GestureConfigReference) {
249
+ function useAnimatedGesture(
250
+ preparedGesture: GestureConfigReference,
251
+ needsRebuild: boolean
252
+ ) {
228
253
  if (!Reanimated) {
229
254
  return;
230
255
  }
@@ -401,7 +426,7 @@ function useAnimatedGesture(preparedGesture: GestureConfigReference) {
401
426
  const event = Reanimated.useEvent(
402
427
  callback,
403
428
  ['onGestureHandlerStateChange', 'onGestureHandlerEvent'],
404
- true
429
+ needsRebuild
405
430
  );
406
431
 
407
432
  preparedGesture.animatedEventHandler = event;
@@ -422,6 +447,11 @@ export const GestureDetector: React.FunctionComponent<GestureDetectorProps> = (
422
447
  ) != null;
423
448
  const viewRef = useRef(null);
424
449
  const firstRenderRef = useRef(true);
450
+ const webEventHandlersRef = useRef<WebEventHandler>({
451
+ onGestureHandlerEvent: (e: HandlerStateChangeEvent<unknown>) => {
452
+ onGestureHandlerEvent(e.nativeEvent);
453
+ },
454
+ });
425
455
 
426
456
  const preparedGesture = React.useRef<GestureConfigReference>({
427
457
  config: gesture,
@@ -437,6 +467,11 @@ export const GestureDetector: React.FunctionComponent<GestureDetectorProps> = (
437
467
  );
438
468
  }
439
469
 
470
+ // Reanimated event should be rebuilt only when gestures are reattached, otherwise
471
+ // config update will be enough as all necessary items are stored in shared values anyway
472
+ const needsToRebuildReanimatedEvent =
473
+ preparedGesture.firstExecution || needsToReattach(preparedGesture, gesture);
474
+
440
475
  if (preparedGesture.firstExecution) {
441
476
  gestureConfig?.initialize?.();
442
477
  }
@@ -445,7 +480,7 @@ export const GestureDetector: React.FunctionComponent<GestureDetectorProps> = (
445
480
  // Whether animatedGesture or gesture is used shouldn't change
446
481
  // during while an app is running
447
482
  // eslint-disable-next-line react-hooks/rules-of-hooks
448
- useAnimatedGesture(preparedGesture);
483
+ useAnimatedGesture(preparedGesture, needsToRebuildReanimatedEvent);
449
484
  }
450
485
 
451
486
  useEffect(() => {
@@ -457,6 +492,7 @@ export const GestureDetector: React.FunctionComponent<GestureDetectorProps> = (
457
492
  gesture,
458
493
  viewTag,
459
494
  useAnimated,
495
+ webEventHandlersRef,
460
496
  });
461
497
 
462
498
  return () => {
@@ -476,6 +512,7 @@ export const GestureDetector: React.FunctionComponent<GestureDetectorProps> = (
476
512
  gesture,
477
513
  viewTag,
478
514
  useAnimated,
515
+ webEventHandlersRef,
479
516
  });
480
517
  } else {
481
518
  updateHandlers(preparedGesture, gestureConfig, gesture);
@@ -51,7 +51,7 @@ function isTouchEvent(
51
51
  return event.eventType != null;
52
52
  }
53
53
 
54
- function onGestureHandlerEvent(
54
+ export function onGestureHandlerEvent(
55
55
  event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent
56
56
  ) {
57
57
  const handler = findHandler(event.handlerTag) as BaseGesture<
@@ -182,7 +182,13 @@ abstract class GestureHandler {
182
182
  // onHandlerStateChange only
183
183
  handlerTag: this.handlerTag,
184
184
  target: this.ref,
185
- oldState: this.oldState,
185
+ // send oldState only when the state was changed, or is different than ACTIVE
186
+ // GestureDetector relies on the presence of `oldState` to differentiate between
187
+ // update events and state change events
188
+ oldState:
189
+ state !== this.previousState || state != 4
190
+ ? this.oldState
191
+ : undefined,
186
192
  },
187
193
  timeStamp: Date.now(),
188
194
  };