From f4625f51823dd7faa02bba95ae731249ce07246c Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Fri, 29 Mar 2019 11:58:29 -0700 Subject: [PATCH] Fix on(Long)PressChange events in experimental press event API (#15256) Make sure that `onPressChange` is only called if `longPressCancelsPress` is `false`. And make sure that `onLongPressChange` is called when a long press ends. --- packages/react-events/src/Press.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/packages/react-events/src/Press.js b/packages/react-events/src/Press.js index 99becac03aef7..3f0340038d3b2 100644 --- a/packages/react-events/src/Press.js +++ b/packages/react-events/src/Press.js @@ -80,7 +80,7 @@ function dispatchPressInEvents( true, ); } - if (props.onLongPress) { + if (props.onLongPress && !props.longPressCancelsPress) { const longPressEventListener = e => { props.onLongPress(e); if (e.nativeEvent.defaultPrevented) { @@ -110,7 +110,7 @@ function dispatchPressOutEvents( true, ); } - if (props.onPressChange) { + if (props.onPressChange && !props.longPressCancelsPress) { const pressChangeEventListener = () => { props.onPressChange(false); }; @@ -121,6 +121,17 @@ function dispatchPressOutEvents( true, ); } + if (state.isLongPressed && props.onLongPressChange) { + const longPressChangeEventListener = () => { + props.onLongPressChange(false); + }; + context.dispatchEvent( + 'longpresschange', + longPressChangeEventListener, + state.pressTarget, + true, + ); + } } function isAnchorTagElement(eventTarget: EventTarget): boolean {