package com.swmansion.rnscreens import android.view.View import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.module.annotations.ReactModule import com.facebook.react.uimanager.LayoutShadowNode import com.facebook.react.uimanager.ThemedReactContext import com.facebook.react.uimanager.ViewGroupManager @ReactModule(name = ScreenContainerViewManager.REACT_CLASS) class ScreenContainerViewManager : ViewGroupManager>() { override fun getName(): String = REACT_CLASS override fun createViewInstance(reactContext: ThemedReactContext): ScreenContainer = ScreenContainer(reactContext) override fun addView(parent: ScreenContainer<*>, child: View, index: Int) { require(child is Screen) { "Attempt attach child that is not of type RNScreens" } parent.addScreen(child, index) } override fun removeViewAt(parent: ScreenContainer<*>, index: Int) { parent.removeScreenAt(index) } override fun removeAllViews(parent: ScreenContainer<*>) { parent.removeAllScreens() } override fun getChildCount(parent: ScreenContainer<*>): Int = parent.screenCount override fun getChildAt(parent: ScreenContainer<*>, index: Int): View = parent.getScreenAt(index) override fun createShadowNodeInstance(context: ReactApplicationContext): LayoutShadowNode = ScreensShadowNode(context) override fun needsCustomLayoutForChildren(): Boolean = true companion object { const val REACT_CLASS = "RNSScreenContainer" } }