Remove trapBubbledEventsLocal (#10258)
* Inline trapBubbledEventsLocal * Revert "Inline trapBubbledEventsLocal" This reverts commit 0ee65ff491deeec70223c2e39d04ef0aeda95d73. * Merge remove-local-trap-bubbled-events branch
Jack Ford committed
Aug 1, 2017 at 03:37 UTC
04db3511fe874f61bc29a5f6c6309169fd5de7a2
1 file changed
+147
-68
src/renderers/dom/fiber/ReactDOMFiberComponent.js
+147
-68
@@ -191,54 +191,6 @@ function trapClickOnNonInteractiveElement(node: HTMLElement) {
191
node.onclick = emptyFunction;
192
}
193
194
-function trapBubbledEventsLocal(node: Element, tag: string) {
195
- // If a component renders to null or if another component fatals and causes
196
- // the state of the tree to be corrupted, `node` here can be null.
197
-
198
- // TODO: Make sure that we check isMounted before firing any of these events.
199
- // TODO: Inline these below since we're calling this from an equivalent
200
- // switch statement.
201
- switch (tag) {
202
- case 'iframe':
203
- case 'object':
204
- ReactBrowserEventEmitter.trapBubbledEvent('topLoad', 'load', node);
205
- break;
206
- case 'video':
207
- case 'audio':
208
- // Create listener for each media event
209
- for (var event in mediaEvents) {
210
- if (mediaEvents.hasOwnProperty(event)) {
211
- ReactBrowserEventEmitter.trapBubbledEvent(
212
- event,
213
- mediaEvents[event],
214
- node,
215
- );
216
- }
217
- }
218
- break;
219
- case 'source':
220
- ReactBrowserEventEmitter.trapBubbledEvent('topError', 'error', node);
221
- break;
222
- case 'img':
223
- case 'image':
224
- ReactBrowserEventEmitter.trapBubbledEvent('topError', 'error', node);
225
- ReactBrowserEventEmitter.trapBubbledEvent('topLoad', 'load', node);
226
- break;
227
- case 'form':
228
- ReactBrowserEventEmitter.trapBubbledEvent('topReset', 'reset', node);
229
- ReactBrowserEventEmitter.trapBubbledEvent('topSubmit', 'submit', node);
230
- break;
231
- case 'input':
232
- case 'select':
233
- case 'textarea':
234
- ReactBrowserEventEmitter.trapBubbledEvent('topInvalid', 'invalid', node);
235
- break;
236
- case 'details':
237
- ReactBrowserEventEmitter.trapBubbledEvent('topToggle', 'toggle', node);
238
- break;
239
- }
240
-}
241
-
194
function setInitialDOMProperties(
195
domElement: Element,
196
rootContainerElement: Element | Document,
@@ -463,25 +415,83 @@ var ReactDOMFiberComponent = {
415
}
416
}
417
418
+ // TODO: Make sure that we check isMounted before firing any of these events.
419
var props: Object;
420
switch (tag) {
468
- case 'audio':
469
- case 'form':
421
case 'iframe':
471
- case 'img':
472
- case 'image':
473
- case 'link':
422
case 'object':
475
- case 'source':
423
+ ReactBrowserEventEmitter.trapBubbledEvent(
424
+ 'topLoad',
425
+ 'load',
426
+ domElement,
427
+ );
428
+ props = rawProps;
429
+ break;
430
case 'video':
431
+ case 'audio':
432
+ // Create listener for each media event
433
+ for (var event in mediaEvents) {
434
+ if (mediaEvents.hasOwnProperty(event)) {
435
+ ReactBrowserEventEmitter.trapBubbledEvent(
436
+ event,
437
+ mediaEvents[event],
438
+ domElement,
439
+ );
440
+ }
441
+ }
442
+ props = rawProps;
443
+ break;
444
+ case 'source':
445
+ ReactBrowserEventEmitter.trapBubbledEvent(
446
+ 'topError',
447
+ 'error',
448
+ domElement,
449
+ );
450
+ props = rawProps;
451
+ break;
452
+ case 'img':
453
+ case 'image':
454
+ ReactBrowserEventEmitter.trapBubbledEvent(
455
+ 'topError',
456
+ 'error',
457
+ domElement,
458
+ );
459
+ ReactBrowserEventEmitter.trapBubbledEvent(
460
+ 'topLoad',
461
+ 'load',
462
+ domElement,
463
+ );
464
+ props = rawProps;
465
+ break;
466
+ case 'form':
467
+ ReactBrowserEventEmitter.trapBubbledEvent(
468
+ 'topReset',
469
+ 'reset',
470
+ domElement,
471
+ );
472
+ ReactBrowserEventEmitter.trapBubbledEvent(
473
+ 'topSubmit',
474
+ 'submit',
475
+ domElement,
476
+ );
477
+ props = rawProps;
478
+ break;
479
case 'details':
478
- trapBubbledEventsLocal(domElement, tag);
480
+ ReactBrowserEventEmitter.trapBubbledEvent(
481
+ 'topToggle',
482
+ 'toggle',
483
+ domElement,
484
+ );
485
props = rawProps;
486
break;
487
case 'input':
488
ReactDOMFiberInput.initWrapperState(domElement, rawProps);
489
props = ReactDOMFiberInput.getHostProps(domElement, rawProps);
484
- trapBubbledEventsLocal(domElement, tag);
490
+ ReactBrowserEventEmitter.trapBubbledEvent(
491
+ 'topInvalid',
492
+ 'invalid',
493
+ domElement,
494
+ );
495
// For controlled components we always need to ensure we're listening
496
// to onChange. Even if there is no listener.
497
ensureListeningTo(rootContainerElement, 'onChange');
@@ -493,7 +503,11 @@ var ReactDOMFiberComponent = {
503
case 'select':
504
ReactDOMFiberSelect.initWrapperState(domElement, rawProps);
505
props = ReactDOMFiberSelect.getHostProps(domElement, rawProps);
496
- trapBubbledEventsLocal(domElement, tag);
506
+ ReactBrowserEventEmitter.trapBubbledEvent(
507
+ 'topInvalid',
508
+ 'invalid',
509
+ domElement,
510
+ );
511
// For controlled components we always need to ensure we're listening
512
// to onChange. Even if there is no listener.
513
ensureListeningTo(rootContainerElement, 'onChange');
@@ -501,7 +515,11 @@ var ReactDOMFiberComponent = {
515
case 'textarea':
516
ReactDOMFiberTextarea.initWrapperState(domElement, rawProps);
517
props = ReactDOMFiberTextarea.getHostProps(domElement, rawProps);
504
- trapBubbledEventsLocal(domElement, tag);
518
+ ReactBrowserEventEmitter.trapBubbledEvent(
519
+ 'topInvalid',
520
+ 'invalid',
521
+ domElement,
522
+ );
523
// For controlled components we always need to ensure we're listening
524
// to onChange. Even if there is no listener.
525
ensureListeningTo(rootContainerElement, 'onChange');
@@ -804,22 +822,75 @@ var ReactDOMFiberComponent = {
822
}
823
}
824
825
+ // TODO: Make sure that we check isMounted before firing any of these events.
826
switch (tag) {
808
- case 'audio':
809
- case 'form':
827
case 'iframe':
811
- case 'img':
812
- case 'image':
813
- case 'link':
828
case 'object':
815
- case 'source':
829
+ ReactBrowserEventEmitter.trapBubbledEvent(
830
+ 'topLoad',
831
+ 'load',
832
+ domElement,
833
+ );
834
+ break;
835
case 'video':
836
+ case 'audio':
837
+ // Create listener for each media event
838
+ for (var event in mediaEvents) {
839
+ if (mediaEvents.hasOwnProperty(event)) {
840
+ ReactBrowserEventEmitter.trapBubbledEvent(
841
+ event,
842
+ mediaEvents[event],
843
+ domElement,
844
+ );
845
+ }
846
+ }
847
+ break;
848
+ case 'source':
849
+ ReactBrowserEventEmitter.trapBubbledEvent(
850
+ 'topError',
851
+ 'error',
852
+ domElement,
853
+ );
854
+ break;
855
+ case 'img':
856
+ case 'image':
857
+ ReactBrowserEventEmitter.trapBubbledEvent(
858
+ 'topError',
859
+ 'error',
860
+ domElement,
861
+ );
862
+ ReactBrowserEventEmitter.trapBubbledEvent(
863
+ 'topLoad',
864
+ 'load',
865
+ domElement,
866
+ );
867
+ break;
868
+ case 'form':
869
+ ReactBrowserEventEmitter.trapBubbledEvent(
870
+ 'topReset',
871
+ 'reset',
872
+ domElement,
873
+ );
874
+ ReactBrowserEventEmitter.trapBubbledEvent(
875
+ 'topSubmit',
876
+ 'submit',
877
+ domElement,
878
+ );
879
+ break;
880
case 'details':
818
- trapBubbledEventsLocal(domElement, tag);
881
+ ReactBrowserEventEmitter.trapBubbledEvent(
882
+ 'topToggle',
883
+ 'toggle',
884
+ domElement,
885
+ );
886
break;
887
case 'input':
888
ReactDOMFiberInput.initWrapperState(domElement, rawProps);
822
- trapBubbledEventsLocal(domElement, tag);
889
+ ReactBrowserEventEmitter.trapBubbledEvent(
890
+ 'topInvalid',
891
+ 'invalid',
892
+ domElement,
893
+ );
894
// For controlled components we always need to ensure we're listening
895
// to onChange. Even if there is no listener.
896
ensureListeningTo(rootContainerElement, 'onChange');
@@ -829,14 +900,22 @@ var ReactDOMFiberComponent = {
900
break;
901
case 'select':
902
ReactDOMFiberSelect.initWrapperState(domElement, rawProps);
832
- trapBubbledEventsLocal(domElement, tag);
903
+ ReactBrowserEventEmitter.trapBubbledEvent(
904
+ 'topInvalid',
905
+ 'invalid',
906
+ domElement,
907
+ );
908
// For controlled components we always need to ensure we're listening
909
// to onChange. Even if there is no listener.
910
ensureListeningTo(rootContainerElement, 'onChange');
911
break;
912
case 'textarea':
913
ReactDOMFiberTextarea.initWrapperState(domElement, rawProps);
839
- trapBubbledEventsLocal(domElement, tag);
914
+ ReactBrowserEventEmitter.trapBubbledEvent(
915
+ 'topInvalid',
916
+ 'invalid',
917
+ domElement,
918
+ );
919
// For controlled components we always need to ensure we're listening
920
// to onChange. Even if there is no listener.
921
ensureListeningTo(rootContainerElement, 'onChange');