mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
[Flare] Move Press root event removal till click phase (#15854)
This commit is contained in:
Vendored
+32
-35
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user