@@ -374,12 +374,14 @@ function eventListener(domEvent: any) {
374
374
// Start
375
375
if ( isStartEvent ) {
376
376
if ( onResponderStart != null ) {
377
+ responderEvent . dispatchConfig . registrationName = 'onResponderStart' ;
377
378
onResponderStart ( responderEvent ) ;
378
379
}
379
380
}
380
381
// Move
381
382
else if ( isMoveEvent ) {
382
383
if ( onResponderMove != null ) {
384
+ responderEvent . dispatchConfig . registrationName = 'onResponderMove' ;
383
385
onResponderMove ( responderEvent ) ;
384
386
}
385
387
} else {
@@ -404,12 +406,14 @@ function eventListener(domEvent: any) {
404
406
// End
405
407
if ( isEndEvent ) {
406
408
if ( onResponderEnd != null ) {
409
+ responderEvent . dispatchConfig . registrationName = 'onResponderEnd' ;
407
410
onResponderEnd ( responderEvent ) ;
408
411
}
409
412
}
410
413
// Release
411
414
if ( isReleaseEvent ) {
412
415
if ( onResponderRelease != null ) {
416
+ responderEvent . dispatchConfig . registrationName = 'onResponderRelease' ;
413
417
onResponderRelease ( responderEvent ) ;
414
418
}
415
419
changeCurrentResponder ( emptyResponder ) ;
@@ -424,18 +428,20 @@ function eventListener(domEvent: any) {
424
428
eventType === 'scroll' ||
425
429
eventType === 'selectionchange'
426
430
) {
427
- if (
428
- wasNegotiated ||
429
- // Only call this function is it wasn't already called during negotiation.
430
- ( onResponderTerminationRequest != null &&
431
- onResponderTerminationRequest ( responderEvent ) === false )
432
- ) {
431
+ // Only call this function is it wasn't already called during negotiation.
432
+ if ( wasNegotiated ) {
433
433
shouldTerminate = false ;
434
+ } else if ( onResponderTerminationRequest != null ) {
435
+ responderEvent . dispatchConfig . registrationName = 'onResponderTerminationRequest' ;
436
+ if ( onResponderTerminationRequest ( responderEvent ) === false ) {
437
+ shouldTerminate = false ;
438
+ }
434
439
}
435
440
}
436
441
437
442
if ( shouldTerminate ) {
438
443
if ( onResponderTerminate != null ) {
444
+ responderEvent . dispatchConfig . registrationName = 'onResponderTerminate' ;
439
445
onResponderTerminate ( responderEvent ) ;
440
446
}
441
447
changeCurrentResponder ( emptyResponder ) ;
@@ -466,8 +472,11 @@ function findWantsResponder(eventPaths, domEvent, responderEvent) {
466
472
const config = getResponderConfig ( id ) ;
467
473
const shouldSetCallback = config [ callbackName ] ;
468
474
if ( shouldSetCallback != null ) {
475
+ responderEvent . currentTarget = node ;
469
476
if ( shouldSetCallback ( responderEvent ) === true ) {
470
- return { id , node , idPath } ;
477
+ // Start the path from the potential responder
478
+ const prunedIdPath = idPath . slice ( idPath . indexOf ( id ) ) ;
479
+ return { id , node , idPath : prunedIdPath } ;
471
480
}
472
481
}
473
482
} ;
@@ -521,6 +530,7 @@ function attemptTransfer(responderEvent: ResponderEvent, wantsResponder: ActiveR
521
530
responderEvent . bubbles = false ;
522
531
responderEvent . cancelable = false ;
523
532
responderEvent . currentTarget = node ;
533
+
524
534
// Set responder
525
535
if ( currentId == null ) {
526
536
if ( onResponderGrant != null ) {
@@ -533,22 +543,35 @@ function attemptTransfer(responderEvent: ResponderEvent, wantsResponder: ActiveR
533
543
// Negotiate with current responder
534
544
else {
535
545
const { onResponderTerminate , onResponderTerminationRequest } = getResponderConfig ( currentId ) ;
536
- const allowTransfer =
537
- onResponderTerminationRequest != null && onResponderTerminationRequest ( responderEvent ) ;
546
+
547
+ let allowTransfer = true ;
548
+ if ( onResponderTerminationRequest != null ) {
549
+ responderEvent . currentTarget = currentNode ;
550
+ responderEvent . dispatchConfig . registrationName = 'onResponderTerminationRequest' ;
551
+ if ( onResponderTerminationRequest ( responderEvent ) === false ) {
552
+ allowTransfer = false ;
553
+ }
554
+ }
555
+
538
556
if ( allowTransfer ) {
539
557
// Terminate existing responder
540
558
if ( onResponderTerminate != null ) {
541
559
responderEvent . currentTarget = currentNode ;
560
+ responderEvent . dispatchConfig . registrationName = 'onResponderTerminate' ;
542
561
onResponderTerminate ( responderEvent ) ;
543
562
}
544
563
// Grant next responder
545
564
if ( onResponderGrant != null ) {
565
+ responderEvent . currentTarget = node ;
566
+ responderEvent . dispatchConfig . registrationName = 'onResponderGrant' ;
546
567
onResponderGrant ( responderEvent ) ;
547
568
}
548
569
changeCurrentResponder ( wantsResponder ) ;
549
570
} else {
550
571
// Reject responder request
551
572
if ( onResponderReject != null ) {
573
+ responderEvent . currentTarget = node ;
574
+ responderEvent . dispatchConfig . registrationName = 'onResponderReject' ;
552
575
onResponderReject ( responderEvent ) ;
553
576
}
554
577
}
0 commit comments