@samitouri / QOS-React-2 / commits / c9841001b0

Experimental Event API: preventDefault handling for anchors (#15383)

Dominic Gannaway committed Apr 11, 2019 at 12:04 UTC c9841001b07200660de21a3275afd1cd7d9554a8
1 file changed +10 -21
packages/react-events/src/Press.js
+10 -21
@@ -32,10 +32,10 @@ type PressProps = {
32 bottom: number,
33 left: number,
34 },
35 + preventDefault: boolean,
36 };
37
38 type PressState = {
38 - defaultPrevented: boolean,
39 isActivePressed: boolean,
40 isActivePressStart: boolean,
41 isAnchorTouched: boolean,
@@ -206,14 +206,7 @@ function dispatchPressStartEvents(
206 state.isLongPressed = true;
207 state.longPressTimeout = null;
208 if (props.onLongPress) {
209 - const listener = e => {
210 - props.onLongPress(e);
211 - // TODO address this again at some point
212 - // if (e.nativeEvent.defaultPrevented) {
213 - // state.defaultPrevented = true;
214 - // }
215 - };
216 - dispatchEvent(context, state, 'longpress', listener);
209 + dispatchEvent(context, state, 'longpress', props.onLongPress);
210 }
211 if (props.onLongPressChange) {
212 dispatchLongPressChangeEvent(context, props, state);
@@ -363,7 +356,6 @@ const PressResponder = {
356 targetEventTypes,
357 createInitialState(): PressState {
358 return {
366 - defaultPrevented: false,
359 isActivePressed: false,
360 isActivePressStart: false,
361 isAnchorTouched: false,
@@ -477,14 +469,7 @@ const PressResponder = {
469 props.onLongPressShouldCancelPress()
470 )
471 ) {
480 - const listener = e => {
481 - props.onPress(e);
482 - // TODO address this again at some point
483 - // if (e.nativeEvent.defaultPrevented) {
484 - // state.defaultPrevented = true;
485 - // }
486 - };
487 - dispatchEvent(context, state, 'press', listener);
472 + dispatchEvent(context, state, 'press', props.onPress);
473 }
474 }
475 }
@@ -607,9 +592,13 @@ const PressResponder = {
592 }
593
594 case 'click': {
610 - if (state.defaultPrevented) {
611 - (nativeEvent: any).preventDefault();
612 - state.defaultPrevented = false;
595 + if (isAnchorTagElement(target)) {
596 + const {ctrlKey, metaKey, shiftKey} = ((nativeEvent: any): MouseEvent);
597 + const preventDefault = props.preventDefault;
598 + // Check "open in new window/tab" key modifiers
599 + if (preventDefault !== false && !shiftKey && !ctrlKey && !metaKey) {
600 + (nativeEvent: any).preventDefault();
601 + }
602 }
603 }
604 }