[Flare] Move Press root event removal till click phase (#15854)

This commit is contained in:
Dominic Gannaway
2019-06-10 19:08:53 +01:00
committed by GitHub
parent f4cd7a38d2
commit c403ae4d35
+32 -35
View File
@@ -118,7 +118,6 @@ const DEFAULT_PRESS_RETENTION_OFFSET = {
};
const targetEventTypes = [
{name: 'click', passive: false},
{name: 'keydown', passive: false},
{name: 'contextmenu', passive: false},
// We need to preventDefault on pointerdown for mouse/pen events
@@ -126,6 +125,7 @@ const targetEventTypes = [
{name: 'pointerdown', passive: false},
];
const rootEventTypes = [
{name: 'click', passive: false},
'keyup',
'pointerup',
'pointermove',
@@ -422,11 +422,9 @@ function dispatchCancel(
): void {
if (state.isPressed) {
state.ignoreEmulatedMouseEvents = false;
removeRootEventTypes(context, state);
dispatchPressEndEvents(event, context, props, state);
} else if (state.allowPressReentry) {
removeRootEventTypes(context, state);
}
removeRootEventTypes(context, state);
}
function isValidKeyboardEvent(nativeEvent: Object): boolean {
@@ -609,7 +607,7 @@ const PressResponder = {
props: PressProps,
state: PressState,
): void {
const {target, type} = event;
const {type} = event;
if (props.disabled) {
removeRootEventTypes(context, state);
@@ -652,6 +650,7 @@ const PressResponder = {
context.isEventWithinTouchHitTarget(event)
) {
// We need to prevent the native event to block the focus
removeRootEventTypes(context, state);
nativeEvent.preventDefault();
return;
}
@@ -710,29 +709,6 @@ const PressResponder = {
}
break;
}
case 'click': {
if (context.isTargetWithinHostComponent(target, 'a', true)) {
const {
altKey,
ctrlKey,
metaKey,
shiftKey,
} = (nativeEvent: MouseEvent);
// Check "open in new window/tab" and "open context menu" key modifiers
const preventDefault = props.preventDefault;
if (
preventDefault !== false &&
!shiftKey &&
!metaKey &&
!ctrlKey &&
!altKey
) {
nativeEvent.preventDefault();
}
}
break;
}
}
},
onRootEvent(
@@ -807,9 +783,6 @@ const PressResponder = {
dispatchPressStartEvents(event, context, props, state);
}
} else {
if (!state.allowPressReentry) {
removeRootEventTypes(context, state);
}
dispatchPressEndEvents(event, context, props, state);
}
}
@@ -851,7 +824,6 @@ const PressResponder = {
}
const wasLongPressed = state.isLongPressed;
removeRootEventTypes(context, state);
dispatchPressEndEvents(event, context, props, state);
if (state.pressTarget !== null && props.onPress) {
@@ -874,10 +846,35 @@ const PressResponder = {
}
}
}
} else if (type === 'mouseup' && state.ignoreEmulatedMouseEvents) {
} else if (type === 'mouseup') {
state.ignoreEmulatedMouseEvents = false;
} else if (state.allowPressReentry) {
removeRootEventTypes(context, state);
}
break;
}
case 'click': {
removeRootEventTypes(context, state);
if (
context.isTargetWithinEventComponent(target) &&
context.isTargetWithinHostComponent(target, 'a', true)
) {
const {
altKey,
ctrlKey,
metaKey,
shiftKey,
} = (nativeEvent: MouseEvent);
// Check "open in new window/tab" and "open context menu" key modifiers
const preventDefault = props.preventDefault;
if (
preventDefault !== false &&
!shiftKey &&
!metaKey &&
!ctrlKey &&
!altKey
) {
nativeEvent.preventDefault();
}
}
break;
}