Updated on 2026-08-14

This commit is contained in:
Tangem 2024-12-05 22:13:07 +03:00
parent 797904c493
commit ee3ca5315e
5 changed files with 147 additions and 0 deletions

View file

@ -0,0 +1,13 @@
package com.tangem.features.onboarding.v2.visa.api
import com.tangem.core.decompose.factory.ComponentFactory
import com.tangem.core.decompose.navigation.inner.InnerNavigationHolder
import com.tangem.core.ui.decompose.ComposableContentComponent
import com.tangem.features.onboarding.v2.TitleProvider
interface OnboardingVisaComponent : ComposableContentComponent, InnerNavigationHolder {
data class Params(val titleProvider: TitleProvider)
interface Factory : ComponentFactory<Params, OnboardingVisaComponent>
}

View file

@ -0,0 +1,59 @@
package com.tangem.features.onboarding.v2.visa.impl
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import com.tangem.core.decompose.context.AppComponentContext
import com.tangem.core.decompose.navigation.inner.InnerNavigation
import com.tangem.core.decompose.navigation.inner.InnerNavigationState
import com.tangem.features.onboarding.v2.visa.api.OnboardingVisaComponent
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import kotlinx.coroutines.channels.BufferOverflow
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch
@Suppress("UnusedPrivateMember")
class DefaultOnboardingVisaComponent @AssistedInject constructor(
@Assisted appComponentContext: AppComponentContext,
@Assisted private val params: OnboardingVisaComponent.Params,
) : OnboardingVisaComponent, AppComponentContext by appComponentContext {
private val innerNavigationState = MutableStateFlow(
OnboardingVisaInnerNavigationState(
stackSize = 1,
stackMaxSize = 7,
),
)
private val currentChildBackEventHandle = MutableSharedFlow<Unit>(onBufferOverflow = BufferOverflow.DROP_LATEST)
override val innerNavigation: InnerNavigation = object : InnerNavigation {
override val state: StateFlow<InnerNavigationState> = innerNavigationState
override fun pop(onComplete: (Boolean) -> Unit) {
// TODO add stack handling
componentScope.launch { currentChildBackEventHandle.emit(Unit) }
}
}
@Composable
override fun Content(modifier: Modifier) {
TODO("Not yet implemented")
}
@AssistedFactory
interface Factory : OnboardingVisaComponent.Factory {
override fun create(
context: AppComponentContext,
params: OnboardingVisaComponent.Params,
): DefaultOnboardingVisaComponent
}
}
data class OnboardingVisaInnerNavigationState(
override val stackSize: Int,
override val stackMaxSize: Int?,
) : InnerNavigationState

View file

@ -0,0 +1,28 @@
package com.tangem.features.onboarding.v2.visa.impl.child.accesscode
import androidx.activity.compose.BackHandler
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import com.tangem.core.decompose.context.AppComponentContext
import com.tangem.core.decompose.model.getOrCreateModel
import com.tangem.core.ui.decompose.ComposableContentComponent
import com.tangem.features.onboarding.v2.visa.impl.child.accesscode.model.OnboardingVisaAccessCodeModel
import kotlinx.coroutines.flow.SharedFlow
class OnboardingVisaAccessCodeComponent(
appComponentContext: AppComponentContext,
private val params: Params,
) : ComposableContentComponent, AppComponentContext by appComponentContext {
private val model: OnboardingVisaAccessCodeModel = getOrCreateModel(params)
@Composable
override fun Content(modifier: Modifier) {
BackHandler(onBack = model::onBack)
}
data class Params(
val parentBackEvent: SharedFlow<Unit>,
val onBack: () -> Unit,
)
}

View file

@ -0,0 +1,24 @@
package com.tangem.features.onboarding.v2.visa.impl.child.accesscode.model
import androidx.compose.runtime.Stable
import com.tangem.core.decompose.di.ComponentScoped
import com.tangem.core.decompose.model.Model
import com.tangem.core.decompose.model.ParamsContainer
import com.tangem.features.onboarding.v2.visa.impl.child.accesscode.OnboardingVisaAccessCodeComponent
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import javax.inject.Inject
@Stable
@ComponentScoped
class OnboardingVisaAccessCodeModel @Inject constructor(
override val dispatchers: CoroutineDispatcherProvider,
private val paramsContainer: ParamsContainer,
) : Model() {
@Suppress("UnusedPrivateMember")
private val params = paramsContainer.require<OnboardingVisaAccessCodeComponent.Params>()
fun onBack() {
TODO()
}
}

View file

@ -0,0 +1,23 @@
package com.tangem.features.onboarding.v2.visa.impl.child.welcome
import androidx.activity.compose.BackHandler
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import com.tangem.core.decompose.context.AppComponentContext
import com.tangem.core.ui.decompose.ComposableContentComponent
class OnboardingVisaWelcomeComponent(
appComponentContext: AppComponentContext,
private val params: Params,
) : ComposableContentComponent, AppComponentContext by appComponentContext {
@Composable
override fun Content(modifier: Modifier) {
BackHandler(onBack = remember(this) { { params.onBack() } })
}
data class Params(
val onBack: () -> Unit,
)
}