diff --git a/packages/react-native-web/src/modules/injectResponderEventPlugin/index.js b/packages/react-native-web/src/modules/injectResponderEventPlugin/index.js index bb93e3a3..72435bc0 100644 --- a/packages/react-native-web/src/modules/injectResponderEventPlugin/index.js +++ b/packages/react-native-web/src/modules/injectResponderEventPlugin/index.js @@ -39,16 +39,26 @@ ResponderEventPlugin.eventTypes.selectionChangeShouldSetResponder.dependencies = ResponderEventPlugin.eventTypes.scrollShouldSetResponder.dependencies = [topScroll]; ResponderEventPlugin.eventTypes.startShouldSetResponder.dependencies = startDependencies; -const originalRecordTouchTrack = ResponderTouchHistoryStore.recordTouchTrack; - -ResponderTouchHistoryStore.recordTouchTrack = (topLevelType, nativeEvent) => { - // Filter out mouse-move events when the mouse button is not down - if (topLevelType === topMouseMove && !ResponderTouchHistoryStore.touchHistory.touchBank.length) { +const originalExtractEvents = ResponderEventPlugin.extractEvents; +ResponderEventPlugin.extractEvents = (topLevelType, targetInst, nativeEvent, nativeEventTarget) => { + const hasActiveTouches = ResponderTouchHistoryStore.touchHistory.numberActiveTouches > 0; + if ( + // Filter out mousemove events when there hasn't been a touch yet + (topLevelType === topMouseMove && !hasActiveTouches) || + // Filter out events from wheel/middle and right click. + (nativeEvent.button === 1 || nativeEvent.button === 2) + ) { return; } const normalizedEvent = normalizeNativeEvent(nativeEvent); - originalRecordTouchTrack.call(ResponderTouchHistoryStore, topLevelType, normalizedEvent); + return originalExtractEvents.call( + ResponderEventPlugin, + topLevelType, + targetInst, + normalizedEvent, + nativeEventTarget + ); }; EventPluginHub.injection.injectEventPluginsByName({