@@ -21,7 +21,6 @@ import type {EventPriority} from 'shared/ReactTypes';
21
21
import type {
22
22
ReactDOMEventResponder ,
23
23
ReactDOMEventComponentInstance ,
24
- ReactDOMEventResponderEventType ,
25
24
ReactDOMResponderContext ,
26
25
ReactDOMResponderEvent ,
27
26
} from 'shared/ReactDOMTypes' ;
@@ -95,10 +94,6 @@ const rootEventTypesToEventComponentInstances: Map<
95
94
DOMTopLevelEventType | string ,
96
95
Set < ReactDOMEventComponentInstance > ,
97
96
> = new Map ( ) ;
98
- const targetEventTypeCached : Map <
99
- Array < ReactDOMEventResponderEventType > ,
100
- Set< string > ,
101
- > = new Map ( ) ;
102
97
const ownershipChangeListeners : Set < ReactDOMEventComponentInstance > = new Set();
103
98
const PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;
104
99
const eventListeners:
@@ -248,9 +243,7 @@ const eventResponderContext: ReactDOMResponderContext = {
248
243
}
249
244
return false ;
250
245
} ,
251
- addRootEventTypes (
252
- rootEventTypes : Array < ReactDOMEventResponderEventType > ,
253
- ) : void {
246
+ addRootEventTypes ( rootEventTypes : Array < string > ) : void {
254
247
validateResponderContext ( ) ;
255
248
const activeDocument = getActiveDocument ( ) ;
256
249
listenToResponderEventTypesImpl ( rootEventTypes , activeDocument ) ;
@@ -260,37 +253,17 @@ const eventResponderContext: ReactDOMResponderContext = {
260
253
registerRootEventType ( rootEventType , eventComponentInstance ) ;
261
254
}
262
255
} ,
263
- removeRootEventTypes (
264
- rootEventTypes : Array < ReactDOMEventResponderEventType > ,
265
- ) : void {
256
+ removeRootEventTypes ( rootEventTypes : Array < string > ) : void {
266
257
validateResponderContext ( ) ;
267
258
for ( let i = 0 ; i < rootEventTypes . length ; i ++ ) {
268
259
const rootEventType = rootEventTypes [ i ] ;
269
- let name = rootEventType ;
270
- let passive = true ;
271
-
272
- if ( typeof rootEventType !== 'string' ) {
273
- const targetEventConfigObject = ( ( rootEventType : any ) : {
274
- name : string ,
275
- passive ?: boolean ,
276
- } ) ;
277
- name = targetEventConfigObject . name ;
278
- if ( targetEventConfigObject . passive !== undefined ) {
279
- passive = targetEventConfigObject . passive ;
280
- }
281
- }
282
-
283
- const listeningName = generateListeningKey (
284
- ( ( name : any ) : string ) ,
285
- passive ,
286
- ) ;
287
260
let rootEventComponents = rootEventTypesToEventComponentInstances . get (
288
- listeningName ,
261
+ rootEventType ,
289
262
) ;
290
263
let rootEventTypesSet = ( ( currentInstance : any ) : ReactDOMEventComponentInstance )
291
264
. rootEventTypes ;
292
265
if ( rootEventTypesSet !== null ) {
293
- rootEventTypesSet . delete ( listeningName ) ;
266
+ rootEventTypesSet . delete ( rootEventType ) ;
294
267
}
295
268
if ( rootEventComponents !== undefined ) {
296
269
rootEventComponents . delete (
@@ -595,41 +568,20 @@ function processEventQueue(): void {
595
568
}
596
569
}
597
570
598
- function getDOMTargetEventTypesSet (
599
- eventTypes : Array < ReactDOMEventResponderEventType > ,
600
- ) : Set < string > {
601
- let cachedSet = targetEventTypeCached . get ( eventTypes ) ;
602
-
603
- if ( cachedSet === undefined ) {
604
- cachedSet = new Set ( ) ;
605
- for ( let i = 0 ; i < eventTypes . length ; i ++ ) {
606
- const eventType = eventTypes [ i ] ;
607
- let name = eventType ;
608
- let passive = true ;
609
-
610
- if ( typeof eventType !== 'string' ) {
611
- const targetEventConfigObject = ( ( eventType : any ) : {
612
- name : string ,
613
- passive ?: boolean ,
614
- } ) ;
615
- name = targetEventConfigObject . name ;
616
- if ( targetEventConfigObject . passive !== undefined ) {
617
- passive = targetEventConfigObject . passive ;
618
- }
619
- }
620
- const listeningName = generateListeningKey (
621
- ( ( name : any ) : string ) ,
622
- passive ,
623
- ) ;
624
- cachedSet . add ( listeningName ) ;
571
+ function responderEventTypesContainType (
572
+ eventTypes : Array < string > ,
573
+ type : string ,
574
+ ) : boolean {
575
+ for ( let i = 0 , len = eventTypes . length ; i < len ; i ++ ) {
576
+ if ( eventTypes [ i ] === type ) {
577
+ return true ;
625
578
}
626
- targetEventTypeCached . set ( eventTypes , cachedSet ) ;
627
579
}
628
- return cachedSet ;
580
+ return false ;
629
581
}
630
582
631
583
function handleTargetEventResponderInstance (
632
- listeningName : string ,
584
+ eventType : string ,
633
585
responderEvent : ReactDOMResponderEvent ,
634
586
eventComponentInstance : ReactDOMEventComponentInstance ,
635
587
hookComponentResponderValidation : null | Set < ReactDOMEventResponder > ,
@@ -639,8 +591,7 @@ function handleTargetEventResponderInstance(
639
591
const targetEventTypes = responder . targetEventTypes ;
640
592
// Validate the target event type exists on the responder
641
593
if ( targetEventTypes !== undefined ) {
642
- const targetEventTypesSet = getDOMTargetEventTypesSet ( targetEventTypes ) ;
643
- if ( targetEventTypesSet . has ( listeningName ) ) {
594
+ if ( responderEventTypesContainType ( targetEventTypes , eventType ) ) {
644
595
if ( hookComponentResponderValidation !== null ) {
645
596
hookComponentResponderValidation . add ( responder ) ;
646
597
}
@@ -700,25 +651,23 @@ function checkForLocalPropagationContinuation(
700
651
}
701
652
702
653
function traverseAndHandleEventResponderInstances (
703
- topLevelType : DOMTopLevelEventType ,
654
+ topLevelType : string ,
704
655
targetFiber : null | Fiber ,
705
656
nativeEvent : AnyNativeEvent ,
706
657
nativeEventTarget : EventTarget ,
707
658
eventSystemFlags : EventSystemFlags ,
708
659
) : void {
709
660
const isPassiveEvent = ( eventSystemFlags & IS_PASSIVE ) !== 0 ;
710
661
const isPassiveSupported = ( eventSystemFlags & PASSIVE_NOT_SUPPORTED ) === 0 ;
711
- const listeningName = generateListeningKey (
712
- ( ( topLevelType : any ) : string ) ,
713
- isPassiveEvent || ! isPassiveSupported ,
714
- ) ;
662
+ const isPassive = isPassiveEvent || ! isPassiveSupported ;
663
+ const eventType = isPassive ? topLevelType : topLevelType + '_active' ;
715
664
716
665
// Trigger event responders in this order:
717
666
// - Bubble target phase
718
667
// - Root phase
719
668
720
669
const responderEvent = createDOMResponderEvent (
721
- ( ( topLevelType : any ) : string ) ,
670
+ topLevelType ,
722
671
nativeEvent ,
723
672
( ( nativeEventTarget : any ) : Element | Document ) ,
724
673
isPassiveEvent ,
@@ -743,7 +692,7 @@ function traverseAndHandleEventResponderInstances(
743
692
// Switch to the current fiber tree
744
693
node = eventComponentInstance . currentFiber ;
745
694
handleTargetEventResponderInstance (
746
- listeningName ,
695
+ eventType ,
747
696
responderEvent ,
748
697
eventComponentInstance ,
749
698
hookComponentResponderValidation ,
@@ -760,7 +709,7 @@ function traverseAndHandleEventResponderInstances(
760
709
)
761
710
) {
762
711
handleTargetEventResponderInstance (
763
- listeningName ,
712
+ eventType ,
764
713
responderEvent ,
765
714
eventComponentInstance ,
766
715
null ,
@@ -776,7 +725,7 @@ function traverseAndHandleEventResponderInstances(
776
725
responderEvent . currentTarget = null ;
777
726
// Root phase
778
727
const rootEventInstances = rootEventTypesToEventComponentInstances . get (
779
- listeningName ,
728
+ eventType ,
780
729
) ;
781
730
if ( rootEventInstances !== undefined ) {
782
731
const rootEventComponentInstances = Array . from ( rootEventInstances ) ;
@@ -906,7 +855,7 @@ function validateResponderContext(): void {
906
855
}
907
856
908
857
export function dispatchEventForResponderEventSystem (
909
- topLevelType : DOMTopLevelEventType ,
858
+ topLevelType : string ,
910
859
targetFiber : null | Fiber ,
911
860
nativeEvent : AnyNativeEvent ,
912
861
nativeEventTarget : EventTarget ,
@@ -950,7 +899,7 @@ export function dispatchEventForResponderEventSystem(
950
899
951
900
export function addRootEventTypesForComponentInstance (
952
901
eventComponentInstance : ReactDOMEventComponentInstance ,
953
- rootEventTypes : Array < ReactDOMEventResponderEventType > ,
902
+ rootEventTypes : Array < string > ,
954
903
) : void {
955
904
for ( let i = 0 ; i < rootEventTypes . length ; i ++ ) {
956
905
const rootEventType = rootEventTypes [ i ] ;
@@ -959,31 +908,16 @@ export function addRootEventTypesForComponentInstance(
959
908
}
960
909
961
910
function registerRootEventType (
962
- rootEventType : ReactDOMEventResponderEventType ,
911
+ rootEventType : string ,
963
912
eventComponentInstance : ReactDOMEventComponentInstance ,
964
913
) : void {
965
- let name = rootEventType ;
966
- let passive = true ;
967
-
968
- if ( typeof rootEventType !== 'string' ) {
969
- const targetEventConfigObject = ( ( rootEventType : any ) : {
970
- name : string ,
971
- passive ?: boolean ,
972
- } ) ;
973
- name = targetEventConfigObject . name ;
974
- if ( targetEventConfigObject . passive !== undefined ) {
975
- passive = targetEventConfigObject . passive ;
976
- }
977
- }
978
-
979
- const listeningName = generateListeningKey ( ( ( name : any ) : string ) , passive ) ;
980
914
let rootEventComponentInstances = rootEventTypesToEventComponentInstances . get (
981
- listeningName ,
915
+ rootEventType ,
982
916
) ;
983
917
if ( rootEventComponentInstances === undefined ) {
984
918
rootEventComponentInstances = new Set ( ) ;
985
919
rootEventTypesToEventComponentInstances . set (
986
- listeningName ,
920
+ rootEventType ,
987
921
rootEventComponentInstances ,
988
922
) ;
989
923
}
@@ -992,23 +926,12 @@ function registerRootEventType(
992
926
rootEventTypesSet = eventComponentInstance . rootEventTypes = new Set ( ) ;
993
927
}
994
928
invariant (
995
- ! rootEventTypesSet . has ( listeningName ) ,
929
+ ! rootEventTypesSet . has ( rootEventType ) ,
996
930
'addRootEventTypes() found a duplicate root event ' +
997
931
'type of "%s". This might be because the event type exists in the event responder "rootEventTypes" ' +
998
932
'array or because of a previous addRootEventTypes() using this root event type.' ,
999
- name ,
933
+ rootEventType ,
1000
934
) ;
1001
- rootEventTypesSet . add ( listeningName ) ;
935
+ rootEventTypesSet . add ( rootEventType ) ;
1002
936
rootEventComponentInstances . add ( eventComponentInstance ) ;
1003
937
}
1004
-
1005
- export function generateListeningKey (
1006
- topLevelType : string ,
1007
- passive : boolean ,
1008
- ) : string {
1009
- // Create a unique name for this event, plus its properties. We'll
1010
- // use this to ensure we don't listen to the same event with the same
1011
- // properties again.
1012
- const passiveKey = passive ? '_passive' : '_active' ;
1013
- return `${ topLevelType } ${ passiveKey } ` ;
1014
- }
0 commit comments