@@ -21,7 +21,6 @@ import getEventTarget from './getEventTarget';
2121import { getClosestInstanceFromNode } from '../client/ReactDOMComponentTree' ;
2222import SimpleEventPlugin from './SimpleEventPlugin' ;
2323import { getRawEventName } from './DOMTopLevelEventTypes' ;
24- import { unsafeCastStringToDOMTopLevelType } from 'events/TopLevelEventTypes' ;
2524
2625const { isInteractiveTopLevelEventType} = SimpleEventPlugin ;
2726
@@ -49,6 +48,7 @@ function findRootContainerNode(inst) {
4948
5049// Used to store ancestor hierarchy in top level callback
5150function getTopLevelCallbackBookKeeping (
51+ topLevelType ,
5252 nativeEvent ,
5353 targetInst ,
5454) : {
@@ -57,9 +57,6 @@ function getTopLevelCallbackBookKeeping(
5757 targetInst : Fiber | null ,
5858 ancestors : Array < Fiber > ,
5959} {
60- // This is safe because DOMTopLevelTypes are always native event type strings
61- const topLevelType = unsafeCastStringToDOMTopLevelType ( nativeEvent . type ) ;
62-
6360 if ( callbackBookkeepingPool . length ) {
6461 const instance = callbackBookkeepingPool . pop ( ) ;
6562 instance . topLevelType = topLevelType ;
@@ -144,13 +141,16 @@ export function trapBubbledEvent(
144141 if ( ! element ) {
145142 return null ;
146143 }
147-
148- // Check if interactive and wrap in interactiveUpdates
149144 const dispatch = isInteractiveTopLevelEventType ( topLevelType )
150145 ? dispatchInteractiveEvent
151146 : dispatchEvent ;
152147
153- addEventBubbleListener ( element , getRawEventName ( topLevelType ) , dispatch ) ;
148+ addEventBubbleListener (
149+ element ,
150+ getRawEventName ( topLevelType ) ,
151+ // Check if interactive and wrap in interactiveUpdates
152+ dispatch . bind ( null , topLevelType ) ,
153+ ) ;
154154}
155155
156156/**
@@ -169,20 +169,26 @@ export function trapCapturedEvent(
169169 if ( ! element ) {
170170 return null ;
171171 }
172-
173- // Check if interactive and wrap in interactiveUpdates
174172 const dispatch = isInteractiveTopLevelEventType ( topLevelType )
175173 ? dispatchInteractiveEvent
176174 : dispatchEvent ;
177175
178- addEventCaptureListener ( element , getRawEventName ( topLevelType ) , dispatch ) ;
176+ addEventCaptureListener (
177+ element ,
178+ getRawEventName ( topLevelType ) ,
179+ // Check if interactive and wrap in interactiveUpdates
180+ dispatch . bind ( null , topLevelType ) ,
181+ ) ;
179182}
180183
181- function dispatchInteractiveEvent ( nativeEvent ) {
182- interactiveUpdates ( dispatchEvent , nativeEvent ) ;
184+ function dispatchInteractiveEvent ( topLevelType , nativeEvent ) {
185+ interactiveUpdates ( dispatchEvent , topLevelType , nativeEvent ) ;
183186}
184187
185- export function dispatchEvent ( nativeEvent : AnyNativeEvent ) {
188+ export function dispatchEvent (
189+ topLevelType : DOMTopLevelEventType ,
190+ nativeEvent : AnyNativeEvent ,
191+ ) {
186192 if ( ! _enabled ) {
187193 return ;
188194 }
@@ -201,7 +207,11 @@ export function dispatchEvent(nativeEvent: AnyNativeEvent) {
201207 targetInst = null ;
202208 }
203209
204- const bookKeeping = getTopLevelCallbackBookKeeping ( nativeEvent , targetInst ) ;
210+ const bookKeeping = getTopLevelCallbackBookKeeping (
211+ topLevelType ,
212+ nativeEvent ,
213+ targetInst ,
214+ ) ;
205215
206216 try {
207217 // Event queue being processed in the same cycle allows
0 commit comments