@@ -6,20 +6,27 @@ import {
6
6
PropsRef ,
7
7
ResultEvent ,
8
8
PointerData ,
9
- ResultTouchEvent ,
10
- TouchEventType ,
11
9
EventTypes ,
10
+ GestureHandlerNativeEvent ,
12
11
} from '../interfaces' ;
13
12
import EventManager from '../tools/EventManager' ;
14
13
import GestureHandlerOrchestrator from '../tools/GestureHandlerOrchestrator' ;
15
14
import InteractionManager from '../tools/InteractionManager' ;
16
15
import PointerTracker , { TrackerElement } from '../tools/PointerTracker' ;
17
16
import IGestureHandler from './IGestureHandler' ;
18
- import { MouseButton } from '../../handlers/gestureHandlerCommon' ;
17
+ import {
18
+ GestureTouchEvent ,
19
+ MouseButton ,
20
+ } from '../../handlers/gestureHandlerCommon' ;
19
21
import { PointerType } from '../../PointerType' ;
20
22
import { GestureHandlerDelegate } from '../tools/GestureHandlerDelegate' ;
21
23
import { ActionType } from '../../ActionType' ;
22
24
import { tagMessage } from '../../utils' ;
25
+ import {
26
+ GestureStateChangeEventWithData ,
27
+ GestureUpdateEventWithData ,
28
+ } from '../../v3/types' ;
29
+ import { TouchEventType } from '../../TouchEventType' ;
23
30
24
31
export default abstract class GestureHandler implements IGestureHandler {
25
32
private lastSentState : State | null = null ;
@@ -369,7 +376,7 @@ export default abstract class GestureHandler implements IGestureHandler {
369
376
const { onGestureHandlerEvent, onGestureHandlerTouchEvent } : PropsRef =
370
377
this . propsRef ! . current ;
371
378
372
- const touchEvent : ResultTouchEvent | undefined =
379
+ const touchEvent : ResultEvent < GestureTouchEvent > | undefined =
373
380
this . transformTouchEvent ( event ) ;
374
381
375
382
if ( touchEvent ) {
@@ -389,18 +396,19 @@ export default abstract class GestureHandler implements IGestureHandler {
389
396
//
390
397
391
398
public sendEvent = ( newState : State , oldState : State ) : void => {
392
- this . ensurePropsRef ( ) ;
393
399
const {
394
400
onGestureHandlerEvent,
395
401
onGestureHandlerStateChange,
396
402
onGestureHandlerAnimatedEvent,
397
403
} : PropsRef = this . propsRef ! . current ;
398
- const resultEvent : ResultEvent = this . transformEventData (
399
- newState ,
400
- oldState
401
- ) ;
402
-
403
- // In the new API oldState field has to be undefined, unless we send event state changed
404
+ const resultEvent : ResultEvent =
405
+ this . actionType !== ActionType . NATIVE_DETECTOR
406
+ ? this . transformEventData ( newState , oldState )
407
+ : this . lastSentState !== newState
408
+ ? this . transformStateChangeEvent ( newState , oldState )
409
+ : this . transformUpdateEvent ( newState ) ;
410
+
411
+ // In the v2 API oldState field has to be undefined, unless we send event state changed
404
412
// Here the order is flipped to avoid workarounds such as making backup of the state and setting it to undefined first, then changing it back
405
413
// Flipping order with setting oldState to undefined solves issue, when events were being sent twice instead of once
406
414
// However, this may cause trouble in the future (but for now we don't know that)
@@ -410,18 +418,22 @@ export default abstract class GestureHandler implements IGestureHandler {
410
418
invokeNullableMethod ( onGestureHandlerStateChange , resultEvent ) ;
411
419
}
412
420
if ( this . state === State . ACTIVE ) {
413
- resultEvent . nativeEvent . oldState = undefined ;
421
+ if ( this . actionType !== ActionType . NATIVE_DETECTOR ) {
422
+ ( resultEvent . nativeEvent as GestureHandlerNativeEvent ) . oldState =
423
+ undefined ;
424
+ }
414
425
if ( onGestureHandlerAnimatedEvent && this . forAnimated ) {
415
426
invokeNullableMethod ( onGestureHandlerAnimatedEvent , resultEvent ) ;
416
427
}
417
428
invokeNullableMethod ( onGestureHandlerEvent , resultEvent ) ;
418
429
}
419
430
} ;
420
431
421
- private transformEventData ( newState : State , oldState : State ) : ResultEvent {
422
- if ( ! this . viewRef ) {
423
- throw new Error ( tagMessage ( 'Cannot handle event when target is null' ) ) ;
424
- }
432
+ private transformEventData (
433
+ newState : State ,
434
+ oldState : State
435
+ ) : ResultEvent < GestureHandlerNativeEvent > {
436
+ this . ensureViewRef ( this . viewRef ) ;
425
437
return {
426
438
nativeEvent : {
427
439
numberOfPointers : this . tracker . trackedPointersCount ,
@@ -439,9 +451,55 @@ export default abstract class GestureHandler implements IGestureHandler {
439
451
} ;
440
452
}
441
453
454
+ private transformStateChangeEvent (
455
+ newState : State ,
456
+ oldState : State
457
+ ) : ResultEvent < GestureStateChangeEventWithData < unknown > > {
458
+ this . ensureViewRef ( this . viewRef ) ;
459
+ return {
460
+ nativeEvent : {
461
+ state : newState ,
462
+ handlerTag : this . handlerTag ,
463
+ pointerType : this . pointerType ,
464
+ oldState : oldState ,
465
+ numberOfPointers : this . tracker . trackedPointersCount ,
466
+ handlerData : {
467
+ pointerInside : this . delegate . isPointerInBounds (
468
+ this . tracker . getAbsoluteCoordsAverage ( )
469
+ ) ,
470
+ ...this . transformNativeEvent ( ) ,
471
+ target : this . viewRef ,
472
+ } ,
473
+ } ,
474
+ timeStamp : Date . now ( ) ,
475
+ } ;
476
+ }
477
+
478
+ private transformUpdateEvent (
479
+ newState : State
480
+ ) : ResultEvent < GestureUpdateEventWithData < unknown > > {
481
+ this . ensureViewRef ( this . viewRef ) ;
482
+ return {
483
+ nativeEvent : {
484
+ state : newState ,
485
+ handlerTag : this . handlerTag ,
486
+ pointerType : this . pointerType ,
487
+ numberOfPointers : this . tracker . trackedPointersCount ,
488
+ handlerData : {
489
+ pointerInside : this . delegate . isPointerInBounds (
490
+ this . tracker . getAbsoluteCoordsAverage ( )
491
+ ) ,
492
+ ...this . transformNativeEvent ( ) ,
493
+ target : this . viewRef ,
494
+ } ,
495
+ } ,
496
+ timeStamp : Date . now ( ) ,
497
+ } ;
498
+ }
499
+
442
500
private transformTouchEvent (
443
501
event : AdaptedEvent
444
- ) : ResultTouchEvent | undefined {
502
+ ) : ResultEvent < GestureTouchEvent > | undefined {
445
503
const rect = this . delegate . measureView ( ) ;
446
504
447
505
const all : PointerData [ ] = [ ] ;
@@ -498,17 +556,17 @@ export default abstract class GestureHandler implements IGestureHandler {
498
556
switch ( event . eventType ) {
499
557
case EventTypes . DOWN :
500
558
case EventTypes . ADDITIONAL_POINTER_DOWN :
501
- eventType = TouchEventType . DOWN ;
559
+ eventType = TouchEventType . TOUCHES_DOWN ;
502
560
break ;
503
561
case EventTypes . UP :
504
562
case EventTypes . ADDITIONAL_POINTER_UP :
505
- eventType = TouchEventType . UP ;
563
+ eventType = TouchEventType . TOUCHES_UP ;
506
564
break ;
507
565
case EventTypes . MOVE :
508
- eventType = TouchEventType . MOVE ;
566
+ eventType = TouchEventType . TOUCHES_MOVE ;
509
567
break ;
510
568
case EventTypes . CANCEL :
511
- eventType = TouchEventType . CANCELLED ;
569
+ eventType = TouchEventType . TOUCHES_CANCELLED ;
512
570
break ;
513
571
}
514
572
@@ -571,11 +629,11 @@ export default abstract class GestureHandler implements IGestureHandler {
571
629
} ) ;
572
630
} ) ;
573
631
574
- const cancelEvent : ResultTouchEvent = {
632
+ const cancelEvent : ResultEvent < GestureTouchEvent > = {
575
633
nativeEvent : {
576
634
handlerTag : this . handlerTag ,
577
635
state : this . state ,
578
- eventType : TouchEventType . CANCELLED ,
636
+ eventType : TouchEventType . TOUCHES_CANCELLED ,
579
637
changedTouches : changed ,
580
638
allTouches : all ,
581
639
numberOfTouches : all . length ,
@@ -597,6 +655,12 @@ export default abstract class GestureHandler implements IGestureHandler {
597
655
}
598
656
}
599
657
658
+ private ensureViewRef ( viewRef : any ) : asserts viewRef is number {
659
+ if ( ! viewRef ) {
660
+ throw new Error ( tagMessage ( 'Cannot handle event when target is null' ) ) ;
661
+ }
662
+ }
663
+
600
664
protected transformNativeEvent ( ) : Record < string , unknown > {
601
665
// Those properties are shared by most handlers and if not this method will be overriden
602
666
const lastCoords = this . tracker . getAbsoluteCoordsAverage ( ) ;
@@ -888,10 +952,10 @@ export default abstract class GestureHandler implements IGestureHandler {
888
952
889
953
function invokeNullableMethod (
890
954
method :
891
- | ( ( event : ResultEvent | ResultTouchEvent ) => void )
892
- | { __getHandler : ( ) => ( event : ResultEvent | ResultTouchEvent ) => void }
955
+ | ( ( event : ResultEvent ) => void )
956
+ | { __getHandler : ( ) => ( event : ResultEvent ) => void }
893
957
| { __nodeConfig : { argMapping : unknown [ ] } } ,
894
- event : ResultEvent | ResultTouchEvent
958
+ event : ResultEvent
895
959
) : void {
896
960
if ( ! method ) {
897
961
return ;
@@ -923,7 +987,7 @@ function invokeNullableMethod(
923
987
}
924
988
925
989
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
926
- const nativeValue = event . nativeEvent [ key ] ;
990
+ const nativeValue = ( event . nativeEvent as any ) [ key ] ;
927
991
928
992
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
929
993
if ( value ?. setValue ) {
0 commit comments