From e61c9e0a2618acde0c6000ef59b0ca3694587e44 Mon Sep 17 00:00:00 2001 From: Dominic Gannaway Date: Thu, 20 Jun 2019 13:01:56 +0100 Subject: [PATCH] [Flare] Fix Press retention state regression (#15936) --- packages/react-events/src/Press.js | 4 +- .../src/__tests__/Press-test.internal.js | 49 +++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/packages/react-events/src/Press.js b/packages/react-events/src/Press.js index 69007c03fd..d762c8ac41 100644 --- a/packages/react-events/src/Press.js +++ b/packages/react-events/src/Press.js @@ -576,6 +576,7 @@ function updateIsPressWithinResponderRegion( props: PressProps, state: PressState, ): void { + let isPressWithinResponderRegion = true; if ( state.pressTarget != null && !context.isTargetWithinElement(target, state.pressTarget) @@ -607,7 +608,7 @@ function updateIsPressWithinResponderRegion( } const {clientX: x, clientY: y} = (nativeEventOrTouchEvent: any); - state.isPressWithinResponderRegion = + isPressWithinResponderRegion = left != null && right != null && top != null && @@ -616,6 +617,7 @@ function updateIsPressWithinResponderRegion( y !== null && (x >= left && x <= right && y >= top && y <= bottom); } + state.isPressWithinResponderRegion = isPressWithinResponderRegion; } const PressResponder = { diff --git a/packages/react-events/src/__tests__/Press-test.internal.js b/packages/react-events/src/__tests__/Press-test.internal.js index 42510a2458..deaa330378 100644 --- a/packages/react-events/src/__tests__/Press-test.internal.js +++ b/packages/react-events/src/__tests__/Press-test.internal.js @@ -1049,6 +1049,55 @@ describe('Event responder: Press', () => { ]); }); + it('no delay and "onPress*" events are correctly called with target change', () => { + let events = []; + const outerRef = React.createRef(); + const innerRef = React.createRef(); + const createEventHandler = msg => () => { + events.push(msg); + }; + + const element = ( +
+ +
+ +
+ ); + + ReactDOM.render(element, container); + + innerRef.current.getBoundingClientRect = getBoundingClientRectMock; + innerRef.current.dispatchEvent(createEvent('pointerdown')); + outerRef.current.dispatchEvent( + createEvent('pointermove', coordinatesOutside), + ); + innerRef.current.dispatchEvent( + createEvent('pointermove', coordinatesInside), + ); + innerRef.current.dispatchEvent( + createEvent('pointerup', coordinatesInside), + ); + jest.runAllTimers(); + + expect(events).toEqual([ + 'onPressStart', + 'onPressChange', + 'onPressEnd', + 'onPressChange', + 'onPressStart', + 'onPressChange', + 'onPressEnd', + 'onPressChange', + 'onPress', + ]); + }); + it('delay and "onPressMove" is called before "onPress*" events', () => { let events = []; const ref = React.createRef();