Updated on 2026-08-14
This commit is contained in:
parent
797904c493
commit
ee3ca5315e
5 changed files with 147 additions and 0 deletions
|
|
@ -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>
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
@ -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,
|
||||
)
|
||||
}
|
||||
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
|
@ -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,
|
||||
)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue