@samitouri / QOS-React / commits / 04db3511fe

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');