From 3ee51c081782df23ade3331f20162a63ebacc076 Mon Sep 17 00:00:00 2001 From: Vincent Riemer Date: Thu, 4 Jul 2019 22:25:27 -0700 Subject: [PATCH] [Flare] Clear pressStart timeout on pointercancel --- packages/react-events/src/dom/Press.js | 4 ++++ .../src/dom/__tests__/Press-test.internal.js | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/packages/react-events/src/dom/Press.js b/packages/react-events/src/dom/Press.js index 20be59f10c6f..aaf40444a326 100644 --- a/packages/react-events/src/dom/Press.js +++ b/packages/react-events/src/dom/Press.js @@ -434,6 +434,10 @@ function dispatchCancel( state: PressState, ): void { state.touchEvent = null; + if (state.pressStartTimeout !== null) { + context.clearTimeout(state.pressStartTimeout); + state.pressStartTimeout = null; + } if (state.isPressed) { state.ignoreEmulatedMouseEvents = false; dispatchPressEndEvents(event, context, props, state); diff --git a/packages/react-events/src/dom/__tests__/Press-test.internal.js b/packages/react-events/src/dom/__tests__/Press-test.internal.js index bbee5b5cae53..39037185fe65 100644 --- a/packages/react-events/src/dom/__tests__/Press-test.internal.js +++ b/packages/react-events/src/dom/__tests__/Press-test.internal.js @@ -257,6 +257,22 @@ describe('Event responder: Press', () => { ref.current.dispatchEvent(createEvent('pointerdown')); expect(onPressStart).toHaveBeenCalledTimes(1); }); + + it('onPressStart should not be called if pointerCancel is fired before delayPressStart is finished', () => { + const element = ( + +
+ + ); + ReactDOM.render(element, container); + + ref.current.dispatchEvent(createEvent('pointerdown')); + jest.advanceTimersByTime(499); + expect(onPressStart).toHaveBeenCalledTimes(0); + ref.current.dispatchEvent(createEvent('pointercancel')); + jest.runAllTimers(); + expect(onPressStart).toHaveBeenCalledTimes(0); + }); }); describe('delayPressEnd', () => {