From bd070eb2c489a1f758e4a55b193820af7346fa15 Mon Sep 17 00:00:00 2001 From: Joshua Gross Date: Wed, 5 May 2021 21:09:04 -0700 Subject: [PATCH] Enable setJSResponder/setIsJSResponder for React Native Fabric (#21439) * Enable setJSResponder/setIsJSResponder for React Native * yarn prettier * add types to react-native-host-hooks * yarn prettier * mock setIsJSResponder --- .../src/ReactFabricGlobalResponderHandler.js | 18 +++++++++++++++++- .../InitializeNativeFabricUIManager.js | 1 + scripts/flow/react-native-host-hooks.js | 5 +++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/packages/react-native-renderer/src/ReactFabricGlobalResponderHandler.js b/packages/react-native-renderer/src/ReactFabricGlobalResponderHandler.js index e9aae2e4fd265..e6d1a68465e4e 100644 --- a/packages/react-native-renderer/src/ReactFabricGlobalResponderHandler.js +++ b/packages/react-native-renderer/src/ReactFabricGlobalResponderHandler.js @@ -19,7 +19,23 @@ const ReactFabricGlobalResponderHandler = { ); if (isFabric) { - // Noop for now until setJSResponder/clearJSResponder are supported in Fabric + if (from) { + // equivalent to clearJSResponder + nativeFabricUIManager.setIsJSResponder( + from.stateNode.node, + false, + blockNativeResponder || false, + ); + } + + if (to) { + // equivalent to setJSResponder + nativeFabricUIManager.setIsJSResponder( + to.stateNode.node, + true, + blockNativeResponder || false, + ); + } } else { if (to !== null) { const tag = to.stateNode.canonical._nativeTag; diff --git a/packages/react-native-renderer/src/__mocks__/react-native/Libraries/ReactPrivate/InitializeNativeFabricUIManager.js b/packages/react-native-renderer/src/__mocks__/react-native/Libraries/ReactPrivate/InitializeNativeFabricUIManager.js index 686dc72702de9..ee3c7df98508d 100644 --- a/packages/react-native-renderer/src/__mocks__/react-native/Libraries/ReactPrivate/InitializeNativeFabricUIManager.js +++ b/packages/react-native-renderer/src/__mocks__/react-native/Libraries/ReactPrivate/InitializeNativeFabricUIManager.js @@ -176,6 +176,7 @@ const RCTFabricUIManager = { ); success(1, 1, 100, 100); }), + setIsJSResponder: jest.fn(), }; global.nativeFabricUIManager = RCTFabricUIManager; diff --git a/scripts/flow/react-native-host-hooks.js b/scripts/flow/react-native-host-hooks.js index 17cc6fe9c952e..92f766dfad415 100644 --- a/scripts/flow/react-native-host-hooks.js +++ b/scripts/flow/react-native-host-hooks.js @@ -179,6 +179,11 @@ declare var nativeFabricUIManager: { locationY: number, callback: (Fiber) => void, ) => void, + setIsJSResponder: ( + node: Node, + isJsResponder: boolean, + blockNativeResponder: boolean, + ) => void, ... };