Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 32 additions & 35 deletions packages/react-events/src/Press.js
Original file line number Diff line number Diff line change
Expand Up @@ -118,14 +118,14 @@ 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
// that are in hit target area but not the element area.
{name: 'pointerdown', passive: false},
];
const rootEventTypes = [
{name: 'click', passive: false},
'keyup',
'pointerup',
'pointermove',
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -609,7 +607,7 @@ const PressResponder = {
props: PressProps,
state: PressState,
): void {
const {target, type} = event;
const {type} = event;

if (props.disabled) {
removeRootEventTypes(context, state);
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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(
Expand Down Expand Up @@ -807,9 +783,6 @@ const PressResponder = {
dispatchPressStartEvents(event, context, props, state);
}
} else {
if (!state.allowPressReentry) {
removeRootEventTypes(context, state);
}
dispatchPressEndEvents(event, context, props, state);
}
}
Expand Down Expand Up @@ -851,7 +824,6 @@ const PressResponder = {
}

const wasLongPressed = state.isLongPressed;
removeRootEventTypes(context, state);
dispatchPressEndEvents(event, context, props, state);

if (state.pressTarget !== null && props.onPress) {
Expand All @@ -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;
}
Expand Down