@samitouri / QOS-React-2 / commits / 812277dab6

Fix onMouseEnter is fired on disabled buttons (#17675)

Alfredo Granja committed Feb 4, 2020 at 08:56 UTC 812277dab6b449596288825d59184dfc1acdf370
2 files changed +16
packages/legacy-events/EventPluginHub.js
+1
@@ -45,6 +45,7 @@ function shouldPreventMouseEvent(name, type, props) {
45 case 'onMouseMoveCapture':
46 case 'onMouseUp':
47 case 'onMouseUpCapture':
48 + case 'onMouseEnter':
49 return !!(props.disabled && isInteractive(type));
50 default:
51 return false;
packages/react-dom/src/__tests__/ReactBrowserEventEmitter-test.internal.js
+15
@@ -37,6 +37,7 @@ const ON_MOUSE_ENTER_KEY = 'onMouseEnter';
37 let GRANDPARENT;
38 let PARENT;
39 let CHILD;
40 +let BUTTON;
41
42 let getListener;
43 let putListener;
@@ -71,6 +72,7 @@ describe('ReactBrowserEventEmitter', () => {
72 let GRANDPARENT_PROPS = {};
73 let PARENT_PROPS = {};
74 let CHILD_PROPS = {};
75 + let BUTTON_PROPS = {};
76
77 function Child(props) {
78 return <div ref={c => (CHILD = c)} {...props} />;
@@ -87,6 +89,7 @@ describe('ReactBrowserEventEmitter', () => {
89 <div ref={c => (GRANDPARENT = c)} {...GRANDPARENT_PROPS}>
90 <div ref={c => (PARENT = c)} {...PARENT_PROPS}>
91 <ChildWrapper {...CHILD_PROPS} />
92 + <button disabled={true} ref={c => (BUTTON = c)} {...BUTTON_PROPS} />
93 </div>
94 </div>,
95 container,
@@ -110,6 +113,9 @@ describe('ReactBrowserEventEmitter', () => {
113 case GRANDPARENT:
114 GRANDPARENT_PROPS[eventName] = listener;
115 break;
116 + case BUTTON:
117 + BUTTON_PROPS[eventName] = listener;
118 + break;
119 }
120 // Rerender with new event listeners
121 renderTree();
@@ -125,6 +131,9 @@ describe('ReactBrowserEventEmitter', () => {
131 case GRANDPARENT:
132 GRANDPARENT_PROPS = {};
133 break;
134 + case BUTTON:
135 + BUTTON_PROPS = {};
136 + break;
137 }
138 renderTree();
139 };
@@ -149,6 +158,12 @@ describe('ReactBrowserEventEmitter', () => {
158 expect(listener).toEqual(LISTENER);
159 });
160
161 + it('should not retrieve listeners on a disabled interactive element', () => {
162 + putListener(BUTTON, ON_MOUSE_ENTER_KEY, recordID.bind(null, BUTTON));
163 + const listener = getListener(BUTTON, ON_MOUSE_ENTER_KEY);
164 + expect(listener).toBe(null);
165 + });
166 +
167 it('should clear all handlers when asked to', () => {
168 registerSimpleTestHandler();
169 deleteAllListeners(CHILD);