package com.swmansion.rnscreens import com.facebook.react.BaseReactPackage import com.facebook.react.bridge.NativeModule import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.module.annotations.ReactModuleList import com.facebook.react.module.model.ReactModuleInfo import com.facebook.react.module.model.ReactModuleInfoProvider import com.facebook.react.uimanager.ViewManager import com.swmansion.rnscreens.gamma.scrollviewmarker.ScrollViewMarkerViewManager import com.swmansion.rnscreens.gamma.stack.header.config.StackHeaderConfigViewManager import com.swmansion.rnscreens.gamma.stack.header.subview.StackHeaderSubviewViewManager import com.swmansion.rnscreens.gamma.stack.host.StackHostViewManager import com.swmansion.rnscreens.gamma.stack.screen.StackScreenViewManager import com.swmansion.rnscreens.gamma.tabs.host.TabsHostViewManager import com.swmansion.rnscreens.gamma.tabs.screen.TabsScreenViewManager import com.swmansion.rnscreens.safearea.SafeAreaViewManager import com.swmansion.rnscreens.utils.ScreenDummyLayoutHelper // Fool autolinking for older versions that do not support BaseReactPackage. // public class RNScreensPackage implements TurboReactPackage { @ReactModuleList( nativeModules = [ ScreensModule::class, ], ) class RNScreensPackage : BaseReactPackage() { // We just retain it here. This object helps us tackle jumping content when using native header. // See: https://github.com/software-mansion/react-native-screens/pull/2169 private var screenDummyLayoutHelper: ScreenDummyLayoutHelper? = null override fun createViewManagers(reactContext: ReactApplicationContext): List> { // This is the earliest we lay our hands on react context. // Moreover this is called before FabricUIManger has finished initializing, not to mention // installing its C++ bindings - so we are safe in terms of creating this helper // before RN starts creating shadow nodes. // See https://github.com/software-mansion/react-native-screens/pull/2169 screenDummyLayoutHelper = ScreenDummyLayoutHelper(reactContext) // Proxy needs to register for lifecycle events in order to unregister itself // on activity restarts. InsetsObserverProxy.registerWithContext(reactContext) return listOf>( ScreenContainerViewManager(), ScreenViewManager(), ModalScreenViewManager(), ScreenStackViewManager(), ScreenStackHeaderConfigViewManager(), ScreenStackHeaderSubviewManager(), SearchBarManager(), ScreenFooterManager(), ScreenContentWrapperManager(), TabsHostViewManager(), TabsScreenViewManager(), SafeAreaViewManager(), StackHostViewManager(), StackScreenViewManager(), ScrollViewMarkerViewManager(), StackHeaderConfigViewManager(), StackHeaderSubviewViewManager(), ) } override fun getModule( s: String, reactApplicationContext: ReactApplicationContext, ): NativeModule? { when (s) { ScreensModule.NAME -> return ScreensModule(reactApplicationContext) } return null } override fun getReactModuleInfoProvider(): ReactModuleInfoProvider = ReactModuleInfoProvider { val moduleInfos: MutableMap = HashMap() moduleInfos[ScreensModule.NAME] = ReactModuleInfo( ScreensModule.NAME, ScreensModule.NAME, false, // canOverrideExistingModule false, // needsEagerInit true, // hasConstants false, // isCxxModule true, // isTurboModule ) moduleInfos } companion object { const val TAG = "RNScreensPackage" } }