@samitouri / QOS-React / commits / 7149a26eba

Allow EventListener to traverse up the tree until it hits the root

We use this to find the root node so that we can look for outer React subtrees if this is nested.

Sebastian Markbage committed Nov 20, 2016 at 17:45 UTC 7149a26eba71d9786d8ebc5322f9d501c3ad74c8
3 files changed +15 -7
scripts/fiber/tests-failing.txt
-3
@@ -64,14 +64,11 @@ src/renderers/dom/shared/__tests__/ReactEventIndependence-test.js
64
65 src/renderers/dom/shared/__tests__/ReactEventListener-test.js
66 * should batch between handlers from different roots
67 -* should not fire duplicate events for a React DOM tree
67
68 src/renderers/dom/shared/eventPlugins/__tests__/ChangeEventPlugin-test.js
69 * should not fire change when setting checked programmatically
70
71 src/renderers/dom/shared/eventPlugins/__tests__/SimpleEventPlugin-test.js
73 -* A non-interactive tags clicks bubble when disabled
74 -* triggers parent captured click events when target is a child of a disabled elements
72 * should forward clicks when it becomes not disabled
73 * should not forward clicks when it becomes disabled
74 * should work correctly if the listener is changed
scripts/fiber/tests-passing.txt
+3
@@ -631,6 +631,7 @@ src/renderers/dom/shared/__tests__/ReactEventListener-test.js
631 * should propagate events one level down
632 * should propagate events two levels down
633 * should not get confused by disappearing elements
634 +* should not fire duplicate events for a React DOM tree
635
636 src/renderers/dom/shared/__tests__/escapeTextContentForBrowser-test.js
637 * should escape boolean to string
@@ -696,8 +697,10 @@ src/renderers/dom/shared/eventPlugins/__tests__/SelectEventPlugin-test.js
697
698 src/renderers/dom/shared/eventPlugins/__tests__/SimpleEventPlugin-test.js
699 * A non-interactive tags click when disabled
700 +* A non-interactive tags clicks bubble when disabled
701 * does not register a click when clicking a child of a disabled element
702 * triggers click events for children of disabled elements
703 +* triggers parent captured click events when target is a child of a disabled elements
704 * triggers captured click events for children of disabled elements
705 * should forward clicks when it starts out not disabled
706 * should not forward clicks when it starts out disabled
src/renderers/dom/shared/ReactEventListener.js
+12 -4
@@ -29,11 +29,19 @@ function findParent(inst) {
29 // TODO: It may be a good idea to cache this to prevent unnecessary DOM
30 // traversal, but caching is difficult to do correctly without using a
31 // mutation observer to listen for all DOM changes.
32 - while (inst._hostParent) {
33 - inst = inst._hostParent;
32 + var container;
33 + if (typeof inst.tag === 'number') {
34 + while (inst.return) {
35 + inst = inst.return;
36 + }
37 + container = inst.stateNode.containerInfo;
38 + } else {
39 + while (inst._hostParent) {
40 + inst = inst._hostParent;
41 + }
42 + var rootNode = ReactDOMComponentTree.getNodeFromInstance(inst);
43 + container = rootNode.parentNode;
44 }
35 - var rootNode = ReactDOMComponentTree.getNodeFromInstance(inst);
36 - var container = rootNode.parentNode;
45 return ReactDOMComponentTree.getClosestInstanceFromNode(container);
46 }
47