/// /// HybridGoogleSignInButtonManager.kt /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro /// Copyright © Marc Rousavy @ Margelo /// package com.margelo.nitro.nitrogooglesignin.views import android.view.View import com.facebook.react.uimanager.ReactStylesDiffMap import com.facebook.react.uimanager.SimpleViewManager import com.facebook.react.uimanager.StateWrapper import com.facebook.react.uimanager.ThemedReactContext import com.margelo.nitro.R.id.associated_hybrid_view_tag import com.margelo.nitro.views.RecyclableView import com.nitrogooglesignin.* /** * Represents the React Native `ViewManager` for the "GoogleSignInButton" Nitro HybridView. */ public class HybridGoogleSignInButtonManager: SimpleViewManager() { /** * Represents the View and its last state snapshot (mutable) */ private class HybridViewHolder( val hybridView: HybridGoogleSignInButton, var lastState: StateWrapper? = null, ) init { if (RecyclableView::class.java.isAssignableFrom(HybridGoogleSignInButton::class.java)) { // Enable view recycling super.setupViewRecycling() } } override fun getName(): String { return "GoogleSignInButton" } override fun createViewInstance(reactContext: ThemedReactContext): View { val hybridView = HybridGoogleSignInButton(reactContext) val view = hybridView.view view.setTag(associated_hybrid_view_tag, HybridViewHolder(hybridView)) return view } override fun updateState(view: View, props: ReactStylesDiffMap, stateWrapper: StateWrapper): Any? { val holder = getHybridViewHolder(view) ?: throw Error("Couldn't find view $view in local views table!") val hybridView = holder.hybridView val oldState = holder.lastState val newState = stateWrapper // 1. Update each prop individually hybridView.beforeUpdate() HybridGoogleSignInButtonStateUpdater.updateViewProps(hybridView, newState, oldState) hybridView.afterUpdate() holder.lastState = newState // 2. Continue in base View props return super.updateState(view, props, newState) } override fun onDropViewInstance(view: View) { val holder = getHybridViewHolder(view) holder?.lastState = null holder?.hybridView?.onDropView() return super.onDropViewInstance(view) } protected override fun prepareToRecycleView(reactContext: ThemedReactContext, view: View): View? { val preparedView = super.prepareToRecycleView(reactContext, view) ?: return null val holder = getHybridViewHolder(preparedView) ?: return null val hybridView = holder.hybridView holder.lastState = null @Suppress("USELESS_IS_CHECK") if (hybridView is RecyclableView) { // Recycle in it's implementation hybridView.prepareForRecycle() // Maybe update the view if it changed return hybridView.view } else { return null } } private fun getHybridViewHolder(view: View): HybridViewHolder? { return view.getTag(associated_hybrid_view_tag) as? HybridViewHolder } }