[Flare] Move Press root event removal till click phase (#15854)
Dominic Gannaway committed
Jun 10, 2019 at 19:08 UTC
c403ae4d35391878dd61e2efbf342c5baac8efdb
1 file changed
+32
-35
packages/react-events/src/Press.js
+32
-35
@@ -118,7 +118,6 @@ const DEFAULT_PRESS_RETENTION_OFFSET = {
118
};
119
120
const targetEventTypes = [
121
- {name: 'click', passive: false},
121
{name: 'keydown', passive: false},
122
{name: 'contextmenu', passive: false},
123
// We need to preventDefault on pointerdown for mouse/pen events
@@ -126,6 +125,7 @@ const targetEventTypes = [
125
{name: 'pointerdown', passive: false},
126
];
127
const rootEventTypes = [
128
+ {name: 'click', passive: false},
129
'keyup',
130
'pointerup',
131
'pointermove',
@@ -422,11 +422,9 @@ function dispatchCancel(
422
): void {
423
if (state.isPressed) {
424
state.ignoreEmulatedMouseEvents = false;
425
- removeRootEventTypes(context, state);
425
dispatchPressEndEvents(event, context, props, state);
427
- } else if (state.allowPressReentry) {
428
- removeRootEventTypes(context, state);
426
}
427
+ removeRootEventTypes(context, state);
428
}
429
430
function isValidKeyboardEvent(nativeEvent: Object): boolean {
@@ -609,7 +607,7 @@ const PressResponder = {
607
props: PressProps,
608
state: PressState,
609
): void {
612
- const {target, type} = event;
610
+ const {type} = event;
611
612
if (props.disabled) {
613
removeRootEventTypes(context, state);
@@ -652,6 +650,7 @@ const PressResponder = {
650
context.isEventWithinTouchHitTarget(event)
651
) {
652
// We need to prevent the native event to block the focus
653
+ removeRootEventTypes(context, state);
654
nativeEvent.preventDefault();
655
return;
656
}
@@ -710,29 +709,6 @@ const PressResponder = {
709
}
710
break;
711
}
713
-
714
- case 'click': {
715
- if (context.isTargetWithinHostComponent(target, 'a', true)) {
716
- const {
717
- altKey,
718
- ctrlKey,
719
- metaKey,
720
- shiftKey,
721
- } = (nativeEvent: MouseEvent);
722
- // Check "open in new window/tab" and "open context menu" key modifiers
723
- const preventDefault = props.preventDefault;
724
- if (
725
- preventDefault !== false &&
726
- !shiftKey &&
727
- !metaKey &&
728
- !ctrlKey &&
729
- !altKey
730
- ) {
731
- nativeEvent.preventDefault();
732
- }
733
- }
734
- break;
735
- }
712
}
713
},
714
onRootEvent(
@@ -807,9 +783,6 @@ const PressResponder = {
783
dispatchPressStartEvents(event, context, props, state);
784
}
785
} else {
810
- if (!state.allowPressReentry) {
811
- removeRootEventTypes(context, state);
812
- }
786
dispatchPressEndEvents(event, context, props, state);
787
}
788
}
@@ -851,7 +824,6 @@ const PressResponder = {
824
}
825
826
const wasLongPressed = state.isLongPressed;
854
- removeRootEventTypes(context, state);
827
dispatchPressEndEvents(event, context, props, state);
828
829
if (state.pressTarget !== null && props.onPress) {
@@ -874,10 +846,35 @@ const PressResponder = {
846
}
847
}
848
}
877
- } else if (type === 'mouseup' && state.ignoreEmulatedMouseEvents) {
849
+ } else if (type === 'mouseup') {
850
state.ignoreEmulatedMouseEvents = false;
879
- } else if (state.allowPressReentry) {
880
- removeRootEventTypes(context, state);
851
+ }
852
+ break;
853
+ }
854
+
855
+ case 'click': {
856
+ removeRootEventTypes(context, state);
857
+ if (
858
+ context.isTargetWithinEventComponent(target) &&
859
+ context.isTargetWithinHostComponent(target, 'a', true)
860
+ ) {
861
+ const {
862
+ altKey,
863
+ ctrlKey,
864
+ metaKey,
865
+ shiftKey,
866
+ } = (nativeEvent: MouseEvent);
867
+ // Check "open in new window/tab" and "open context menu" key modifiers
868
+ const preventDefault = props.preventDefault;
869
+ if (
870
+ preventDefault !== false &&
871
+ !shiftKey &&
872
+ !metaKey &&
873
+ !ctrlKey &&
874
+ !altKey
875
+ ) {
876
+ nativeEvent.preventDefault();
877
+ }
878
}
879
break;
880
}