@@ -14,7 +14,7 @@ import type {
14
14
ElementListenerMapEntry ,
15
15
} from '../events/DOMEventListenerMap' ;
16
16
import type { EventSystemFlags } from 'legacy-events/EventSystemFlags' ;
17
- import type { EventPriority , ReactScopeMethods } from 'shared/ReactTypes' ;
17
+ import type { EventPriority } from 'shared/ReactTypes' ;
18
18
import type { Fiber } from 'react-reconciler/src/ReactFiber' ;
19
19
import type { PluginModule } from 'legacy-events/PluginModuleType' ;
20
20
import type {
@@ -142,11 +142,8 @@ const emptyDispatchConfigForCustomEvents: CustomDispatchConfig = {
142
142
143
143
const isArray = Array . isArray ;
144
144
145
- // TODO: we should remove the FlowFixMes and the casting to figure out how to make
146
- // these patterns work properly.
147
- // $FlowFixMe: Flow struggles with this pattern, so we also have to cast it.
148
- const PossiblyWeakMap = ( ( typeof WeakMap === 'function' ? WeakMap : Map ) : any ) ;
149
-
145
+ // $FlowFixMe: Flow struggles with this pattern
146
+ const PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map ;
150
147
// $FlowFixMe: Flow cannot handle polymorphic WeakMaps
151
148
export const eventTargetEventListenerStore : WeakMap <
152
149
EventTarget ,
@@ -156,15 +153,6 @@ export const eventTargetEventListenerStore: WeakMap<
156
153
> ,
157
154
> = new PossiblyWeakMap ( ) ;
158
155
159
- // $FlowFixMe: Flow cannot handle polymorphic WeakMaps
160
- export const reactScopeListenerStore : WeakMap <
161
- ReactScopeMethods ,
162
- Map <
163
- DOMTopLevelEventType ,
164
- { bubbled : Set < ReactDOMListener > , captured : Set < ReactDOMListener > } ,
165
- > ,
166
- > = new PossiblyWeakMap ( ) ;
167
-
168
156
function dispatchEventsForPlugins (
169
157
topLevelType : DOMTopLevelEventType ,
170
158
eventSystemFlags : EventSystemFlags ,
@@ -318,20 +306,12 @@ function isMatchingRootContainer(
318
306
) ;
319
307
}
320
308
321
- export function isManagedDOMElement (
322
- target : EventTarget | ReactScopeMethods ,
323
- ) : boolean {
309
+ export function isManagedDOMElement ( target : EventTarget ) : boolean {
324
310
return getClosestInstanceFromNode ( ( ( target : any ) : Node ) ) !== null ;
325
311
}
326
312
327
- export function isValidEventTarget (
328
- target : EventTarget | ReactScopeMethods ,
329
- ) : boolean {
330
- return typeof ( target : Object ) . addEventListener === 'function' ;
331
- }
332
-
333
- export function isReactScope ( target : EventTarget | ReactScopeMethods ) : boolean {
334
- return typeof ( target : Object ) . getChildContextValues === 'function' ;
313
+ export function isValidEventTarget ( target : EventTarget ) : boolean {
314
+ return typeof target . addEventListener === 'function' ;
335
315
}
336
316
337
317
export function dispatchEventForPluginEventSystem (
@@ -466,16 +446,18 @@ function addEventTypeToDispatchConfig(type: DOMTopLevelEventType): void {
466
446
}
467
447
}
468
448
469
- export function attachListenerToManagedDOMElement (
449
+ export function attachListenerFromManagedDOMElement (
470
450
listener : ReactDOMListener ,
471
451
) : void {
472
452
const { event , target } = listener ;
473
453
const { passive , priority , type } = event ;
474
-
475
- const managedTargetElement = ( ( target : any ) : Element ) ;
476
- const containerEventTarget = getNearestRootOrPortalContainer (
477
- managedTargetElement ,
478
- ) ;
454
+ const possibleManagedTarget = ( ( target : any ) : Element ) ;
455
+ let containerEventTarget = target ;
456
+ if ( getClosestInstanceFromNode ( possibleManagedTarget ) ) {
457
+ containerEventTarget = getNearestRootOrPortalContainer (
458
+ possibleManagedTarget ,
459
+ ) ;
460
+ }
479
461
const listenerMap = getListenerMapForElement ( containerEventTarget ) ;
480
462
// Add the event listener to the target container (falling back to
481
463
// the target if we didn't find one).
@@ -487,11 +469,11 @@ export function attachListenerToManagedDOMElement(
487
469
priority ,
488
470
) ;
489
471
// Get the internal listeners Set from the target instance.
490
- let listeners = getListenersFromTarget ( managedTargetElement ) ;
472
+ let listeners = getListenersFromTarget ( target ) ;
491
473
// If we don't have any listeners, then we need to init them.
492
474
if ( listeners === null ) {
493
475
listeners = new Set ( ) ;
494
- initListenersSet ( managedTargetElement , listeners ) ;
476
+ initListenersSet ( target , listeners ) ;
495
477
}
496
478
// Add our listener to the listeners Set.
497
479
listeners . add ( listener ) ;
@@ -503,9 +485,8 @@ export function detachListenerFromManagedDOMElement(
503
485
listener : ReactDOMListener ,
504
486
) : void {
505
487
const { target } = listener ;
506
- const managedTargetElement = ( ( target : any ) : Element ) ;
507
488
// Get the internal listeners Set from the target instance.
508
- const listeners = getListenersFromTarget ( managedTargetElement ) ;
489
+ const listeners = getListenersFromTarget ( target ) ;
509
490
if ( listeners !== null ) {
510
491
// Remove out listener from the listeners Set.
511
492
listeners . delete ( listener ) ;
@@ -515,21 +496,13 @@ export function detachListenerFromManagedDOMElement(
515
496
export function attachTargetEventListener ( listener : ReactDOMListener ) : void {
516
497
const { event , target } = listener ;
517
498
const { capture , passive , priority , type } = event ;
518
- const eventTarget = ( ( target : any ) : EventTarget ) ;
519
- const listenerMap = getListenerMapForElement ( eventTarget ) ;
499
+ const listenerMap = getListenerMapForElement ( target ) ;
520
500
// Add the event listener to the TargetEvent object.
521
- listenToTopLevelEvent (
522
- type ,
523
- eventTarget ,
524
- listenerMap ,
525
- passive ,
526
- priority ,
527
- capture ,
528
- ) ;
529
- let eventTypeMap = eventTargetEventListenerStore . get ( eventTarget ) ;
501
+ listenToTopLevelEvent ( type , target , listenerMap , passive , priority , capture ) ;
502
+ let eventTypeMap = eventTargetEventListenerStore . get ( target ) ;
530
503
if ( eventTypeMap === undefined ) {
531
504
eventTypeMap = new Map ( ) ;
532
- eventTargetEventListenerStore . set ( eventTarget , eventTypeMap ) ;
505
+ eventTargetEventListenerStore . set ( target , eventTypeMap ) ;
533
506
}
534
507
// Get the listeners by the event type
535
508
let listeners = eventTypeMap . get ( type ) ;
@@ -550,51 +523,7 @@ export function attachTargetEventListener(listener: ReactDOMListener): void {
550
523
export function detachTargetEventListener ( listener : ReactDOMListener ) : void {
551
524
const { event , target } = listener ;
552
525
const { capture , type } = event ;
553
- const validEventTarget = ( ( target : any ) : EventTarget ) ;
554
- const eventTypeMap = eventTargetEventListenerStore . get ( validEventTarget ) ;
555
- if ( eventTypeMap !== undefined ) {
556
- const listeners = eventTypeMap . get ( type ) ;
557
- if ( listeners !== undefined ) {
558
- // Remove out listener from the listeners Set.
559
- if ( capture ) {
560
- listeners . captured . delete ( listener ) ;
561
- } else {
562
- listeners . bubbled . delete ( listener ) ;
563
- }
564
- }
565
- }
566
- }
567
-
568
- export function attachListenerToReactScope ( listener : ReactDOMListener ) : void {
569
- const { event , target } = listener ;
570
- const { capture , type } = event ;
571
- const reactScope = ( ( target : any ) : ReactScopeMethods ) ;
572
- let eventTypeMap = reactScopeListenerStore . get ( reactScope ) ;
573
- if ( eventTypeMap === undefined ) {
574
- eventTypeMap = new Map ( ) ;
575
- reactScopeListenerStore . set ( reactScope , eventTypeMap ) ;
576
- }
577
- // Get the listeners by the event type
578
- let listeners = eventTypeMap . get ( type ) ;
579
- if ( listeners === undefined ) {
580
- listeners = { captured : new Set ( ) , bubbled : new Set ( ) } ;
581
- eventTypeMap . set ( type , listeners ) ;
582
- }
583
- // Add our listener to the listeners Set.
584
- if ( capture ) {
585
- listeners . captured . add ( listener ) ;
586
- } else {
587
- listeners . bubbled . add ( listener ) ;
588
- }
589
- // Finally, add the event to our known event types list.
590
- addEventTypeToDispatchConfig ( type ) ;
591
- }
592
-
593
- export function detachListenerFromReactScope ( listener : ReactDOMListener ) : void {
594
- const { event , target } = listener ;
595
- const { capture , type } = event ;
596
- const reactScope = ( ( target : any ) : ReactScopeMethods ) ;
597
- const eventTypeMap = reactScopeListenerStore . get ( reactScope ) ;
526
+ const eventTypeMap = eventTargetEventListenerStore . get ( target ) ;
598
527
if ( eventTypeMap !== undefined ) {
599
528
const listeners = eventTypeMap . get ( type ) ;
600
529
if ( listeners !== undefined ) {
0 commit comments