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

[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 }