mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Inline DefaultJSIModulePackage (#41094)
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/41094 Inlining the `DefaultJSIModulePackage` in `DefaultReactNativeHost` for simplification Changelog: [Internal] internal Reviewed By: mdvacca Differential Revision: D50468945 fbshipit-source-id: 9c458044518db1db38cdac590da542be497cecaf
This commit is contained in:
committed by
Facebook GitHub Bot
parent
9b6e2d21d1
commit
85356fdf55
-59
@@ -1,59 +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.defaults
|
||||
|
||||
import com.facebook.react.ReactNativeHost
|
||||
import com.facebook.react.bridge.JSIModulePackage
|
||||
import com.facebook.react.bridge.JSIModuleProvider
|
||||
import com.facebook.react.bridge.JSIModuleSpec
|
||||
import com.facebook.react.bridge.JSIModuleType
|
||||
import com.facebook.react.bridge.JavaScriptContextHolder
|
||||
import com.facebook.react.bridge.ReactApplicationContext
|
||||
import com.facebook.react.bridge.UIManager
|
||||
import com.facebook.react.fabric.ComponentFactory
|
||||
import com.facebook.react.fabric.FabricJSIModuleProvider
|
||||
import com.facebook.react.fabric.ReactNativeConfig
|
||||
import com.facebook.react.uimanager.ViewManagerRegistry
|
||||
|
||||
/**
|
||||
* A utility class that allows users to create a JSIModulePackage to use Fabric. This essentially
|
||||
* allows users to just provide C++ implementation for the methods of `DefaultComponentsRegistry`
|
||||
* without providing all the extra machinery for the New Architecture.
|
||||
*
|
||||
* `ReactNativeHost` is required to create Fabric's ViewManagers.
|
||||
*/
|
||||
class DefaultJSIModulePackage(private val reactNativeHost: ReactNativeHost) : JSIModulePackage {
|
||||
|
||||
override fun getJSIModules(
|
||||
reactApplicationContext: ReactApplicationContext,
|
||||
jsContext: JavaScriptContextHolder
|
||||
): List<JSIModuleSpec<UIManager>> =
|
||||
listOf<JSIModuleSpec<UIManager>>(JSIModuleForFabric(reactApplicationContext, reactNativeHost))
|
||||
|
||||
private inner class JSIModuleForFabric(
|
||||
private val reactApplicationContext: ReactApplicationContext,
|
||||
private val reactNativeHost: ReactNativeHost
|
||||
) : JSIModuleSpec<UIManager> {
|
||||
override fun getJSIModuleType(): JSIModuleType = JSIModuleType.UIManager
|
||||
|
||||
override fun getJSIModuleProvider(): JSIModuleProvider<UIManager> {
|
||||
val componentFactory = ComponentFactory()
|
||||
|
||||
DefaultComponentsRegistry.register(componentFactory)
|
||||
|
||||
val viewManagers =
|
||||
reactNativeHost.reactInstanceManager.getOrCreateViewManagers(reactApplicationContext)
|
||||
val viewManagerRegistry = ViewManagerRegistry(viewManagers)
|
||||
return FabricJSIModuleProvider(
|
||||
reactApplicationContext,
|
||||
componentFactory,
|
||||
ReactNativeConfig.DEFAULT_CONFIG,
|
||||
viewManagerRegistry)
|
||||
}
|
||||
}
|
||||
}
|
||||
+33
-1
@@ -11,9 +11,19 @@ import android.app.Application
|
||||
import android.content.Context
|
||||
import com.facebook.react.JSEngineResolutionAlgorithm
|
||||
import com.facebook.react.ReactHost
|
||||
import com.facebook.react.ReactInstanceManager
|
||||
import com.facebook.react.ReactNativeHost
|
||||
import com.facebook.react.ReactPackageTurboModuleManagerDelegate
|
||||
import com.facebook.react.bridge.JSIModulePackage
|
||||
import com.facebook.react.bridge.JSIModuleProvider
|
||||
import com.facebook.react.bridge.JSIModuleSpec
|
||||
import com.facebook.react.bridge.JSIModuleType
|
||||
import com.facebook.react.bridge.ReactApplicationContext
|
||||
import com.facebook.react.bridge.UIManager
|
||||
import com.facebook.react.fabric.ComponentFactory
|
||||
import com.facebook.react.fabric.FabricJSIModuleProvider
|
||||
import com.facebook.react.fabric.ReactNativeConfig
|
||||
import com.facebook.react.uimanager.ViewManagerRegistry
|
||||
|
||||
/**
|
||||
* A utility class that allows you to simplify the setup of a [ReactNativeHost] for new apps in Open
|
||||
@@ -38,7 +48,29 @@ protected constructor(
|
||||
|
||||
override fun getJSIModulePackage(): JSIModulePackage? =
|
||||
if (isNewArchEnabled) {
|
||||
DefaultJSIModulePackage(this)
|
||||
JSIModulePackage { reactApplicationContext: ReactApplicationContext, _ ->
|
||||
listOf(
|
||||
object : JSIModuleSpec<UIManager> {
|
||||
override fun getJSIModuleType(): JSIModuleType = JSIModuleType.UIManager
|
||||
|
||||
override fun getJSIModuleProvider(): JSIModuleProvider<UIManager> {
|
||||
val componentFactory = ComponentFactory()
|
||||
|
||||
DefaultComponentsRegistry.register(componentFactory)
|
||||
|
||||
val reactInstanceManager: ReactInstanceManager = getReactInstanceManager()
|
||||
|
||||
val viewManagers =
|
||||
reactInstanceManager.getOrCreateViewManagers(reactApplicationContext)
|
||||
val viewManagerRegistry = ViewManagerRegistry(viewManagers)
|
||||
return FabricJSIModuleProvider(
|
||||
reactApplicationContext,
|
||||
componentFactory,
|
||||
ReactNativeConfig.DEFAULT_CONFIG,
|
||||
viewManagerRegistry)
|
||||
}
|
||||
})
|
||||
}
|
||||
} else {
|
||||
null
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user