Skip to content

Commit d14e443

Browse files
authored
Resume onSelect tracking after dragend (facebook#13422)
1 parent 146c9fb commit d14e443

2 files changed

Lines changed: 38 additions & 0 deletions

File tree

packages/react-dom/src/events/SelectEventPlugin.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import shallowEqual from 'shared/shallowEqual';
1414
import {
1515
TOP_BLUR,
1616
TOP_CONTEXT_MENU,
17+
TOP_DRAG_END,
1718
TOP_FOCUS,
1819
TOP_KEY_DOWN,
1920
TOP_KEY_UP,
@@ -39,6 +40,7 @@ const eventTypes = {
3940
dependencies: [
4041
TOP_BLUR,
4142
TOP_CONTEXT_MENU,
43+
TOP_DRAG_END,
4244
TOP_FOCUS,
4345
TOP_KEY_DOWN,
4446
TOP_KEY_UP,
@@ -200,6 +202,7 @@ const SelectEventPlugin = {
200202
break;
201203
case TOP_CONTEXT_MENU:
202204
case TOP_MOUSE_UP:
205+
case TOP_DRAG_END:
203206
mouseDown = false;
204207
return constructSelectEvent(nativeEvent, nativeEventTarget);
205208
// Chrome and IE fire non-standard event when selection is changed (and

packages/react-dom/src/events/__tests__/SelectEventPlugin-test.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,4 +108,39 @@ describe('SelectEventPlugin', () => {
108108
node.dispatchEvent(nativeEvent);
109109
expect(select).toHaveBeenCalledTimes(1);
110110
});
111+
112+
// Regression test for https://github.com/facebook/react/issues/11379
113+
it('should not wait for `mouseup` after receiving `dragend`', () => {
114+
const select = jest.fn();
115+
const onSelect = event => {
116+
expect(typeof event).toBe('object');
117+
expect(event.type).toBe('select');
118+
expect(event.target).toBe(node);
119+
select(event.currentTarget);
120+
};
121+
122+
const node = ReactDOM.render(
123+
<input type="text" onSelect={onSelect} />,
124+
container,
125+
);
126+
node.focus();
127+
128+
let nativeEvent = new MouseEvent('focus', {
129+
bubbles: true,
130+
cancelable: true,
131+
});
132+
node.dispatchEvent(nativeEvent);
133+
expect(select).toHaveBeenCalledTimes(0);
134+
135+
nativeEvent = new MouseEvent('mousedown', {
136+
bubbles: true,
137+
cancelable: true,
138+
});
139+
node.dispatchEvent(nativeEvent);
140+
expect(select).toHaveBeenCalledTimes(0);
141+
142+
nativeEvent = new MouseEvent('dragend', {bubbles: true, cancelable: true});
143+
node.dispatchEvent(nativeEvent);
144+
expect(select).toHaveBeenCalledTimes(1);
145+
});
111146
});

0 commit comments

Comments
 (0)