From dff97a6915ef3a3897f85e3e47ffa55d4714ae72 Mon Sep 17 00:00:00 2001 From: Dan Abramov Date: Wed, 29 Jul 2020 21:54:48 +0100 Subject: [PATCH] Fix onGot/LostPointerCapture events (#19487) --- .../src/__tests__/ReactDOMEventPropagation-test.js | 6 ++---- packages/react-dom/src/events/DOMPluginEventSystem.js | 11 +++++++++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/react-dom/src/__tests__/ReactDOMEventPropagation-test.js b/packages/react-dom/src/__tests__/ReactDOMEventPropagation-test.js index 6dfbc7f697..4b0d885457 100644 --- a/packages/react-dom/src/__tests__/ReactDOMEventPropagation-test.js +++ b/packages/react-dom/src/__tests__/ReactDOMEventPropagation-test.js @@ -347,8 +347,7 @@ describe('ReactDOMEventListener', () => { }); }); - // TODO: this has regressed. Fix me. - it.skip('onGotPointerCapture', () => { + it('onGotPointerCapture', () => { testNativeBubblingEvent({ type: 'div', reactEvent: 'onGotPointerCapture', @@ -413,8 +412,7 @@ describe('ReactDOMEventListener', () => { }); }); - // TODO: this has regressed. Fix me. - it.skip('onLostPointerCapture', () => { + it('onLostPointerCapture', () => { testNativeBubblingEvent({ type: 'div', reactEvent: 'onLostPointerCapture', diff --git a/packages/react-dom/src/events/DOMPluginEventSystem.js b/packages/react-dom/src/events/DOMPluginEventSystem.js index f75f32b8a3..687ac8033b 100644 --- a/packages/react-dom/src/events/DOMPluginEventSystem.js +++ b/packages/react-dom/src/events/DOMPluginEventSystem.js @@ -470,8 +470,15 @@ export function listenToReactEvent( } } } else { - // Check if the react event ends in "Capture" - const isCapturePhaseListener = reactEvent.substr(-7) === 'Capture'; + const isCapturePhaseListener = + reactEvent.substr(-7) === 'Capture' && + // Edge case: onGotPointerCapture and onLostPointerCapture + // end with "Capture" but that's part of their event names. + // The Capture versions would end with CaptureCapture. + // So we have to check against that. + // This check works because none of the events we support + // end with "Pointer". + reactEvent.substr(-14, 7) !== 'Pointer'; listenToNativeEvent( dependencies[0], isCapturePhaseListener,