diff --git a/packages/react-native/Libraries/ReactNative/BridgelessUIManager.js b/packages/react-native/Libraries/ReactNative/BridgelessUIManager.js index b36d937e38c..d1c2bf719e9 100644 --- a/packages/react-native/Libraries/ReactNative/BridgelessUIManager.js +++ b/packages/react-native/Libraries/ReactNative/BridgelessUIManager.js @@ -14,6 +14,7 @@ import type {RootTag} from '../Types/RootTagTypes'; import type {UIManagerJSInterface} from '../Types/UIManagerJSInterface'; import {unstable_hasComponent} from '../NativeComponent/NativeComponentRegistryUnstable'; +import defineLazyObjectProperty from '../Utilities/defineLazyObjectProperty'; import Platform from '../Utilities/Platform'; import {getFabricUIManager} from './FabricUIManager'; import nullthrows from 'nullthrows'; @@ -28,10 +29,10 @@ function raiseSoftError(methodName: string, details?: string): void { const getUIManagerConstants: ?() => {[viewManagerName: string]: Object} = global.RN$LegacyInterop_UIManager_getConstants; -const getUIManagerConstantsCache = (function () { +const getUIManagerConstantsCached = (function () { let wasCalledOnce = false; let result = {}; - return () => { + return (): {[viewManagerName: string]: Object} => { if (!wasCalledOnce) { result = nullthrows(getUIManagerConstants)(); wasCalledOnce = true; @@ -40,6 +41,24 @@ const getUIManagerConstantsCache = (function () { }; })(); +const getConstantsForViewManager: ?(viewManagerName: string) => Object = + global.RN$LegacyInterop_UIManager_getConstantsForViewManager; + +const getDefaultEventTypes: ?() => Object = + global.RN$LegacyInterop_UIManager_getDefaultEventTypes; + +const getDefaultEventTypesCached = (function () { + let wasCalledOnce = false; + let result = null; + return (): Object => { + if (!wasCalledOnce) { + result = nullthrows(getDefaultEventTypes)(); + wasCalledOnce = true; + } + return result; + }; +})(); + /** * UIManager.js overrides these APIs. * Pull them out from the BridgelessUIManager implementation. So, we can ignore them. @@ -133,10 +152,18 @@ const UIManagerJSUnusedAPIs = { const UIManagerJSPlatformAPIs = Platform.select({ android: { getConstantsForViewManager: (viewManagerName: string): Object => { + if (getConstantsForViewManager) { + return getConstantsForViewManager(viewManagerName); + } + raiseSoftError('getConstantsForViewManager'); return {}; }, getDefaultEventTypes: (): Array => { + if (getDefaultEventTypes) { + return getDefaultEventTypesCached(); + } + raiseSoftError('getDefaultEventTypes'); return []; }, @@ -259,7 +286,15 @@ const UIManagerJS: UIManagerJSInterface & {[string]: any} = { ...UIManagerJSUnusedAPIs, getViewManagerConfig: (viewManagerName: string): mixed => { if (getUIManagerConstants) { - return getUIManagerConstantsCache()[viewManagerName]; + const constants = getUIManagerConstantsCached(); + if ( + !constants[viewManagerName] && + UIManagerJS.getConstantsForViewManager + ) { + constants[viewManagerName] = + UIManagerJS.getConstantsForViewManager(viewManagerName); + } + return constants[viewManagerName]; } else { raiseSoftError( `getViewManagerConfig('${viewManagerName}')`, @@ -273,7 +308,7 @@ const UIManagerJS: UIManagerJSInterface & {[string]: any} = { }, getConstants: (): Object => { if (getUIManagerConstants) { - return getUIManagerConstantsCache(); + return getUIManagerConstantsCached(); } else { raiseSoftError('getConstants'); return null; @@ -320,9 +355,18 @@ const UIManagerJS: UIManagerJSInterface & {[string]: any} = { }; if (getUIManagerConstants) { - Object.keys(getUIManagerConstantsCache()).forEach(viewConfigName => { - UIManagerJS[viewConfigName] = getUIManagerConstantsCache()[viewConfigName]; + Object.keys(getUIManagerConstantsCached()).forEach(viewConfigName => { + UIManagerJS[viewConfigName] = getUIManagerConstantsCached()[viewConfigName]; }); + + if (UIManagerJS.getConstants().ViewManagerNames) { + UIManagerJS.getConstants().ViewManagerNames.forEach(viewManagerName => { + defineLazyObjectProperty(UIManagerJS, viewManagerName, { + get: () => + nullthrows(UIManagerJS.getConstantsForViewManager)(viewManagerName), + }); + }); + } } module.exports = UIManagerJS; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.java index 1acc471a18c..be0a7f39eb6 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.java @@ -22,6 +22,7 @@ import com.facebook.react.bridge.JSBundleLoader; import com.facebook.react.bridge.JSBundleLoaderDelegate; import com.facebook.react.bridge.LifecycleEventListener; import com.facebook.react.bridge.NativeArray; +import com.facebook.react.bridge.NativeMap; import com.facebook.react.bridge.NativeModule; import com.facebook.react.bridge.ReactNoCrashSoftException; import com.facebook.react.bridge.ReactSoftExceptionLogger; @@ -54,9 +55,9 @@ import com.facebook.react.uimanager.ComponentNameResolver; import com.facebook.react.uimanager.ComponentNameResolverManager; import com.facebook.react.uimanager.DisplayMetricsHolder; import com.facebook.react.uimanager.IllegalViewOperationException; -import com.facebook.react.uimanager.UIConstantsProvider; import com.facebook.react.uimanager.UIConstantsProviderManager; import com.facebook.react.uimanager.UIManagerModule; +import com.facebook.react.uimanager.UIManagerModuleConstantsHelper; import com.facebook.react.uimanager.ViewManager; import com.facebook.react.uimanager.ViewManagerRegistry; import com.facebook.react.uimanager.ViewManagerResolver; @@ -245,6 +246,8 @@ final class ReactInstance { // initialized. // This happens inside getTurboModuleManagerDelegate getter. if (ReactFeatureFlags.useNativeViewConfigsInBridgelessMode) { + Map customDirectEvents = new HashMap<>(); + mUIConstantsProviderManager = new UIConstantsProviderManager( // Use unbuffered RuntimeExecutor to install binding @@ -255,21 +258,36 @@ final class ReactInstance { // 2. genericBubblingEventTypes. // 3. genericDirectEventTypes. // We want to match this beahavior. - (UIConstantsProvider) - () -> { - List viewManagers = new ArrayList(); + () -> { + return (NativeMap) + Arguments.makeNativeMap( + UIManagerModuleConstantsHelper.getDefaultExportableEventTypes()); + }, + (String viewManagerName) -> { + ViewManager viewManager = mViewManagerResolver.getViewManager(viewManagerName); + if (viewManager == null) { + return null; + } + return (NativeMap) + UIManagerModule.getConstantsForViewManager(viewManager, customDirectEvents); + }, + () -> { + List viewManagers = + new ArrayList( + mViewManagerResolver.getEagerViewManagerMap().values()); - synchronized (mViewManagerResolver) { - for (String viewManagerName : mViewManagerResolver.getViewManagerNames()) { - viewManagers.add(mViewManagerResolver.getViewManager(viewManagerName)); - } - } + Map constants = + UIManagerModule.createConstants(viewManagers, null, customDirectEvents); - Map constants = - UIManagerModule.createConstants( - viewManagers, new HashMap<>(), new HashMap<>()); - return Arguments.makeNativeMap(constants); - }); + Collection lazyViewManagers = + mViewManagerResolver.getLazyViewManagerNames(); + if (lazyViewManagers.size() > 0) { + constants.put("ViewManagerNames", new ArrayList<>(lazyViewManagers)); + constants.put("LazyViewManagersEnabled", true); + } + + return Arguments.makeNativeMap(constants); + }); } EventBeatManager eventBeatManager = new EventBeatManager(); @@ -528,7 +546,7 @@ final class ReactInstance { return allViewManagerNames; } - private Map getEagerViewManagerMap() { + public synchronized Map getEagerViewManagerMap() { if (mEagerViewManagerMap != null) { return mEagerViewManagerMap; } @@ -574,7 +592,7 @@ final class ReactInstance { return null; } - private Collection getLazyViewManagerNames() { + public synchronized Collection getLazyViewManagerNames() { Set uniqueNames = new HashSet<>(); for (ReactPackage reactPackage : mReactPackages) { if (reactPackage instanceof ViewManagerOnDemandReactPackage) { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIConstantsProvider.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIConstantsProvider.java deleted file mode 100644 index 77b95520c5c..00000000000 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIConstantsProvider.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -package com.facebook.react.uimanager; - -import com.facebook.proguard.annotations.DoNotStripAny; -import com.facebook.react.bridge.NativeMap; - -@DoNotStripAny -public interface UIConstantsProvider { - - /* Returns UIManager's constants. */ - NativeMap getConstants(); -} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIConstantsProviderManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIConstantsProviderManager.java index 6479a0c1562..06af0447224 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIConstantsProviderManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIConstantsProviderManager.java @@ -10,8 +10,10 @@ package com.facebook.react.uimanager; import com.facebook.jni.HybridData; import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.proguard.annotations.DoNotStripAny; +import com.facebook.react.bridge.NativeMap; import com.facebook.react.bridge.RuntimeExecutor; import com.facebook.soloader.SoLoader; +import javax.annotation.Nullable; @DoNotStripAny public class UIConstantsProviderManager { @@ -25,17 +27,47 @@ public class UIConstantsProviderManager { private final HybridData mHybridData; public UIConstantsProviderManager( - RuntimeExecutor runtimeExecutor, Object uiConstantsProviderManager) { - mHybridData = initHybrid(runtimeExecutor, uiConstantsProviderManager); + RuntimeExecutor runtimeExecutor, + DefaultEventTypesProvider defaultEventTypesProvider, + ConstantsForViewManagerProvider viewManagerConstantsProvider, + ConstantsProvider constantsProvider) { + mHybridData = + initHybrid( + runtimeExecutor, + defaultEventTypesProvider, + viewManagerConstantsProvider, + constantsProvider); installJSIBindings(); } private native HybridData initHybrid( - RuntimeExecutor runtimeExecutor, Object uiConstantsProviderManager); + RuntimeExecutor runtimeExecutor, + DefaultEventTypesProvider defaultEventTypesProvider, + ConstantsForViewManagerProvider viewManagerConstantsProvider, + ConstantsProvider constantsProvider); private native void installJSIBindings(); private static void staticInit() { SoLoader.loadLibrary("uimanagerjni"); } + + @DoNotStripAny + public static interface DefaultEventTypesProvider { + /* Returns UIManager's constants. */ + NativeMap getDefaultEventTypes(); + } + + @DoNotStripAny + public static interface ConstantsForViewManagerProvider { + /* Returns UIManager's constants. */ + @Nullable + NativeMap getConstantsForViewManager(String viewManagerName); + } + + @DoNotStripAny + public static interface ConstantsProvider { + /* Returns UIManager's constants. */ + NativeMap getConstants(); + } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java index 1f5f023eb26..717e5184a12 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java @@ -254,15 +254,20 @@ public class UIManagerModule extends ReactContextBaseJavaModule return null; } + return getConstantsForViewManager(targetView, mCustomDirectEvents); + } + + public static @Nullable WritableMap getConstantsForViewManager( + ViewManager viewManager, Map customDirectEvents) { SystraceMessage.beginSection( Systrace.TRACE_TAG_REACT_JAVA_BRIDGE, "UIManagerModule.getConstantsForViewManager") - .arg("ViewManager", targetView.getName()) + .arg("ViewManager", viewManager.getName()) .arg("Lazy", true) .flush(); try { Map viewManagerConstants = UIManagerModuleConstantsHelper.createConstantsForViewManager( - targetView, null, null, null, mCustomDirectEvents); + viewManager, null, null, null, customDirectEvents); if (viewManagerConstants != null) { return Arguments.makeNativeMap(viewManagerConstants); } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModuleConstantsHelper.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModuleConstantsHelper.java index 76ae277be99..88d5576a77d 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModuleConstantsHelper.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModuleConstantsHelper.java @@ -24,7 +24,7 @@ import java.util.Set; * Helps generate constants map for {@link UIManagerModule} by collecting and merging constants from * registered view managers. */ -/* package */ class UIManagerModuleConstantsHelper { +public class UIManagerModuleConstantsHelper { private static final String TAG = "UIManagerModuleConstantsHelper"; private static final String BUBBLING_EVENTS_KEY = "bubblingEventTypes"; private static final String DIRECT_EVENTS_KEY = "directEventTypes"; @@ -43,7 +43,7 @@ import java.util.Set; return constants; } - /* package */ static Map getDefaultExportableEventTypes() { + public static Map getDefaultExportableEventTypes() { return MapBuilder.of( BUBBLING_EVENTS_KEY, UIManagerModuleConstants.getBubblingEventTypeConstants(), DIRECT_EVENTS_KEY, UIManagerModuleConstants.getDirectEventTypeConstants()); diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/uimanager/UIConstantsProviderManager.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/uimanager/UIConstantsProviderManager.cpp index 174b6bb4e54..8e988060f61 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/uimanager/UIConstantsProviderManager.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/uimanager/UIConstantsProviderManager.cpp @@ -22,18 +22,34 @@ using namespace facebook::jni; UIConstantsProviderManager::UIConstantsProviderManager( jni::alias_ref jThis, RuntimeExecutor runtimeExecutor, - jni::alias_ref uiConstantsProvider) + jni::alias_ref + defaultExportableEventTypesProvider, + jni::alias_ref + constantsForViewManagerProvider, + jni::alias_ref constantsProvider) : javaPart_(jni::make_global(jThis)), runtimeExecutor_(runtimeExecutor), - uiConstantsProvider_(jni::make_global(uiConstantsProvider)) {} + defaultExportableEventTypesProvider_( + jni::make_global(defaultExportableEventTypesProvider)), + constantsForViewManagerProvider_( + jni::make_global(constantsForViewManagerProvider)), + constantsProvider_(jni::make_global(constantsProvider)) {} jni::local_ref UIConstantsProviderManager::initHybrid( jni::alias_ref jThis, jni::alias_ref runtimeExecutor, - jni::alias_ref uiConstantsProvider) { + jni::alias_ref + defaultExportableEventTypesProvider, + jni::alias_ref + constantsForViewManagerProvider, + jni::alias_ref constantsProvider) { return makeCxxInstance( - jThis, runtimeExecutor->cthis()->get(), uiConstantsProvider); + jThis, + runtimeExecutor->cthis()->get(), + defaultExportableEventTypesProvider, + constantsForViewManagerProvider, + constantsProvider); } void UIConstantsProviderManager::registerNatives() { @@ -46,18 +62,33 @@ void UIConstantsProviderManager::registerNatives() { void UIConstantsProviderManager::installJSIBindings() { runtimeExecutor_([thizz = this](jsi::Runtime& runtime) { - auto uiConstantsProvider = [thizz, &runtime]() -> jsi::Value { - static auto getConstants = - jni::findClassStatic( - UIConstantsProviderManager::UIConstantsProviderJavaDescriptor) - ->getMethod()>( - "getConstants"); - auto constants = getConstants(thizz->uiConstantsProvider_.get()); - return jsi::valueFromDynamic(runtime, constants->cthis()->consume()); + auto jsiDefaultEventTypesProvider = [thizz, &runtime]() -> jsi::Value { + return thizz->defaultExportableEventTypesProvider_->getDefaultEventTypes( + runtime); + }; + + auto jsiConstantsForViewManagerProvider = + [thizz, &runtime](std::string viewManagerName) -> jsi::Value { + return thizz->constantsForViewManagerProvider_ + ->getConstantsForViewManager(runtime, viewManagerName); + }; + + auto jsiConstantsProvider = [thizz, &runtime]() -> jsi::Value { + return thizz->constantsProvider_->getConstants(runtime); }; LegacyUIManagerConstantsProviderBinding::install( - runtime, std::move(uiConstantsProvider)); + runtime, + "getDefaultEventTypes", + std::move(jsiDefaultEventTypesProvider)); + + LegacyUIManagerConstantsProviderBinding::install( + runtime, + "getConstantsForViewManager", + std::move(jsiConstantsForViewManagerProvider)); + + LegacyUIManagerConstantsProviderBinding::install( + runtime, "getConstants", std::move(jsiConstantsProvider)); }); } diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/uimanager/UIConstantsProviderManager.h b/packages/react-native/ReactAndroid/src/main/jni/react/uimanager/UIConstantsProviderManager.h index ba537da6eb8..c2996a50f4c 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/uimanager/UIConstantsProviderManager.h +++ b/packages/react-native/ReactAndroid/src/main/jni/react/uimanager/UIConstantsProviderManager.h @@ -9,23 +9,80 @@ #include #include +#include +#include #include +#include namespace facebook::react { +class DefaultEventTypesProvider + : public jni::JavaClass { + public: + static constexpr const char* kJavaDescriptor = + "Lcom/facebook/react/uimanager/UIConstantsProviderManager$DefaultEventTypesProvider;"; + + jsi::Value getDefaultEventTypes(jsi::Runtime& runtime) { + static auto method = + javaClassStatic() + ->getMethod()>( + "getDefaultEventTypes"); + auto result = method(self()); + return jsi::valueFromDynamic(runtime, result->cthis()->consume()); + } +}; + +class ConstantsForViewManagerProvider + : public jni::JavaClass { + public: + static constexpr const char* kJavaDescriptor = + "Lcom/facebook/react/uimanager/UIConstantsProviderManager$ConstantsForViewManagerProvider;"; + + jsi::Value getConstantsForViewManager( + jsi::Runtime& runtime, + std::string viewManagerName) { + static auto method = + javaClassStatic() + ->getMethod(std::string)>( + "getConstantsForViewManager"); + auto result = method(self(), viewManagerName); + if (result == nullptr) { + return jsi::Value::null(); + } + return jsi::valueFromDynamic(runtime, result->cthis()->consume()); + } +}; + +class ConstantsProvider : public jni::JavaClass { + public: + static constexpr const char* kJavaDescriptor = + "Lcom/facebook/react/uimanager/UIConstantsProviderManager$ConstantsProvider;"; + + jsi::Value getConstants(jsi::Runtime& runtime) { + static auto method = + javaClassStatic() + ->getMethod()>( + "getConstants"); + auto result = method(self()); + return jsi::valueFromDynamic(runtime, result->cthis()->consume()); + } +}; + class UIConstantsProviderManager : public facebook::jni::HybridClass { public: static auto constexpr kJavaDescriptor = "Lcom/facebook/react/uimanager/UIConstantsProviderManager;"; - constexpr static auto UIConstantsProviderJavaDescriptor = - "com/facebook/react/uimanager/UIConstantsProvider"; - static facebook::jni::local_ref initHybrid( facebook::jni::alias_ref jThis, facebook::jni::alias_ref runtimeExecutor, - facebook::jni::alias_ref uiConstantsProviderManager); + facebook::jni::alias_ref + defaultExportableEventTypesProvider, + facebook::jni::alias_ref + constantsForViewManagerProvider, + facebook::jni::alias_ref + constantsProvider); static void registerNatives(); @@ -34,14 +91,23 @@ class UIConstantsProviderManager facebook::jni::global_ref javaPart_; RuntimeExecutor runtimeExecutor_; - facebook::jni::global_ref uiConstantsProvider_; + facebook::jni::global_ref + defaultExportableEventTypesProvider_; + facebook::jni::global_ref + constantsForViewManagerProvider_; + facebook::jni::global_ref constantsProvider_; void installJSIBindings(); explicit UIConstantsProviderManager( facebook::jni::alias_ref jThis, RuntimeExecutor runtimeExecutor, - facebook::jni::alias_ref uiConstantsProviderManager); + facebook::jni::alias_ref + defaultExportableEventTypesProvider, + facebook::jni::alias_ref + constantsForViewManagerProvider, + facebook::jni::alias_ref + constantsProvider); }; } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/runtime/nativeviewconfig/LegacyUIManagerConstantsProviderBinding.cpp b/packages/react-native/ReactCommon/react/runtime/nativeviewconfig/LegacyUIManagerConstantsProviderBinding.cpp index 692b5b7e74b..ae10b3f32ff 100644 --- a/packages/react-native/ReactCommon/react/runtime/nativeviewconfig/LegacyUIManagerConstantsProviderBinding.cpp +++ b/packages/react-native/ReactCommon/react/runtime/nativeviewconfig/LegacyUIManagerConstantsProviderBinding.cpp @@ -9,8 +9,11 @@ namespace facebook::react::LegacyUIManagerConstantsProviderBinding { -void install(jsi::Runtime& runtime, ProviderType&& provider) { - auto name = "RN$LegacyInterop_UIManager_getConstants"; +void install( + jsi::Runtime& runtime, + const std::string& name, + std::function&& provider) { + auto methodName = "RN$LegacyInterop_UIManager_" + name; auto hostFunction = [provider = std::move(provider)]( jsi::Runtime& runtime, const jsi::Value& /*thisValue*/, @@ -25,6 +28,34 @@ void install(jsi::Runtime& runtime, ProviderType&& provider) { auto jsiFunction = jsi::Function::createFromHostFunction( runtime, jsi::PropNameID::forAscii(runtime, name), 2, hostFunction); - runtime.global().setProperty(runtime, name, jsiFunction); + runtime.global().setProperty(runtime, methodName.c_str(), jsiFunction); } + +void install( + jsi::Runtime& runtime, + const std::string& name, + std::function&& provider) { + auto methodName = "RN$LegacyInterop_UIManager_" + name; + auto hostFunction = [provider = std::move(provider)]( + jsi::Runtime& runtime, + const jsi::Value& /*thisValue*/, + const jsi::Value* args, + size_t count) -> jsi::Value { + if (count != 1) { + throw new jsi::JSError(runtime, "1 argument expected."); + } + + if (!args[0].isString()) { + throw new jsi::JSError(runtime, "First argument must be string."); + } + + return provider(args[0].asString(runtime).utf8(runtime)); + }; + + auto jsiFunction = jsi::Function::createFromHostFunction( + runtime, jsi::PropNameID::forAscii(runtime, name), 2, hostFunction); + + runtime.global().setProperty(runtime, methodName.c_str(), jsiFunction); +} + } // namespace facebook::react::LegacyUIManagerConstantsProviderBinding diff --git a/packages/react-native/ReactCommon/react/runtime/nativeviewconfig/LegacyUIManagerConstantsProviderBinding.h b/packages/react-native/ReactCommon/react/runtime/nativeviewconfig/LegacyUIManagerConstantsProviderBinding.h index 097de4e1994..eadf6f296ae 100644 --- a/packages/react-native/ReactCommon/react/runtime/nativeviewconfig/LegacyUIManagerConstantsProviderBinding.h +++ b/packages/react-native/ReactCommon/react/runtime/nativeviewconfig/LegacyUIManagerConstantsProviderBinding.h @@ -18,5 +18,12 @@ using ProviderType = std::function; * runtime. It is supposed to be used as a substitute to UIManager.getConstants * in bridgeless mode. */ -void install(jsi::Runtime& runtime, ProviderType&& provider); +void install( + jsi::Runtime& runtime, + const std::string& name, + std::function&& provider); +void install( + jsi::Runtime& runtime, + const std::string& name, + std::function&& provider); } // namespace facebook::react::LegacyUIManagerConstantsProviderBinding diff --git a/packages/react-native/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTLegacyUIManagerConstantsProvider.mm b/packages/react-native/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTLegacyUIManagerConstantsProvider.mm index 0d66d5c4416..5d8bc5ce83f 100644 --- a/packages/react-native/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTLegacyUIManagerConstantsProvider.mm +++ b/packages/react-native/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTLegacyUIManagerConstantsProvider.mm @@ -39,6 +39,6 @@ jsi::Value getConstants(facebook::jsi::Runtime &runtime) void installLegacyUIManagerConstantsProviderBinding(jsi::Runtime &runtime) { auto constantsProvider = [&runtime]() -> jsi::Value { return getConstants(runtime); }; - LegacyUIManagerConstantsProviderBinding::install(runtime, std::move(constantsProvider)); + LegacyUIManagerConstantsProviderBinding::install(runtime, "getConstants", std::move(constantsProvider)); } } // namespace facebook::react