From bd72b04939beccac393d2894eb22028a217fd7f3 Mon Sep 17 00:00:00 2001 From: Vincent Riemer Date: Fri, 5 Jul 2019 03:45:33 -0700 Subject: [PATCH] [Flare] Clear pressStart timeout on pointercancel (#16067) --- 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 bdfab6dea8..0636fdd3e0 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 bbee5b5cae..39037185fe 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', () => {