Updated on 2026-08-14

This commit is contained in:
Tangem 2025-04-04 08:42:19 +03:00
parent 7bb88d55c9
commit e895d15e8a
5 changed files with 77 additions and 15 deletions

View file

@ -103,7 +103,7 @@ internal class DefaultOnboardingVisaComponent @AssistedInject constructor(
config = OnboardingVisaWelcomeComponent.Config.Welcome,
params = OnboardingVisaWelcomeComponent.Params(
childParams = childParams,
onDone = { model.stackNavigation.push(OnboardingVisaRoute.AccessCode) },
onDone = { model.stackNavigation.pushNew(OnboardingVisaRoute.AccessCode) },
),
)
is OnboardingVisaRoute.WelcomeBack -> OnboardingVisaWelcomeComponent(
@ -146,6 +146,12 @@ internal class DefaultOnboardingVisaComponent @AssistedInject constructor(
appComponentContext = factoryContext,
config = OnboardingVisaInProgressComponent.Config(
scanResponse = model.currentScanResponse.value,
type = when (route.from) {
OnboardingVisaRoute.InProgress.From.Approve ->
OnboardingVisaInProgressComponent.Config.Type.AfterApprove
OnboardingVisaRoute.InProgress.From.PinCode ->
OnboardingVisaInProgressComponent.Config.Type.AfterPinCode
},
),
params = OnboardingVisaInProgressComponent.Params(
childParams = childParams,

View file

@ -17,7 +17,7 @@ import kotlinx.coroutines.flow.onEach
internal class OnboardingVisaInProgressComponent(
appComponentContext: AppComponentContext,
config: Config,
private val config: Config,
private val params: Params,
) : ComposableContentComponent, AppComponentContext by appComponentContext {
@ -35,12 +35,18 @@ internal class OnboardingVisaInProgressComponent(
OnboardingVisaInProgress(
modifier = modifier,
type = config.type,
)
}
data class Config(
val scanResponse: ScanResponse,
)
val type: Type,
) {
enum class Type {
AfterApprove, AfterPinCode
}
}
data class Params(
val childParams: DefaultOnboardingVisaComponent.ChildParams,

View file

@ -1,29 +1,77 @@
package com.tangem.features.onboarding.v2.visa.impl.child.inprogress.ui
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.navigationBarsPadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.airbnb.lottie.compose.LottieAnimation
import com.airbnb.lottie.compose.LottieCompositionSpec
import com.airbnb.lottie.compose.LottieConstants
import com.airbnb.lottie.compose.animateLottieCompositionAsState
import com.airbnb.lottie.compose.rememberLottieComposition
import com.tangem.core.ui.components.SpacerH
import com.tangem.core.ui.components.SpacerH12
import com.tangem.core.ui.extensions.stringResourceSafe
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.features.onboarding.v2.impl.R
import com.tangem.features.onboarding.v2.visa.impl.child.inprogress.OnboardingVisaInProgressComponent
@Composable
internal fun OnboardingVisaInProgress(modifier: Modifier = Modifier) {
Column(
modifier
internal fun OnboardingVisaInProgress(
type: OnboardingVisaInProgressComponent.Config.Type,
modifier: Modifier = Modifier,
) {
val composition by rememberLottieComposition(spec = LottieCompositionSpec.RawRes(R.raw.anim_visa_loading))
val progress by animateLottieCompositionAsState(
composition,
iterations = LottieConstants.IterateForever,
)
Box(
modifier = modifier
.fillMaxSize()
.navigationBarsPadding(),
contentAlignment = Alignment.Center,
) {
Column(
Modifier
.weight(1f)
.padding(top = 12.dp)
.padding(horizontal = 16.dp),
Modifier.padding(horizontal = 16.dp),
horizontalAlignment = Alignment.CenterHorizontally,
) {
// TODO
LottieAnimation(
modifier = Modifier.size(64.dp),
composition = composition,
progress = { progress },
)
SpacerH(26.dp)
Text(
text = stringResourceSafe(R.string.visa_onboarding_in_progress_title),
style = TangemTheme.typography.h2,
color = TangemTheme.colors.text.primary1,
textAlign = TextAlign.Center,
)
SpacerH12()
Text(
text = when (type) {
OnboardingVisaInProgressComponent.Config.Type.AfterApprove ->
stringResourceSafe(R.string.visa_onboarding_in_progress_description)
OnboardingVisaInProgressComponent.Config.Type.AfterPinCode ->
stringResourceSafe(R.string.visa_onboarding_in_progress_issuer_description)
},
style = TangemTheme.typography.body1,
color = TangemTheme.colors.text.secondary,
textAlign = TextAlign.Center,
)
}
}
}
@ -32,6 +80,8 @@ internal fun OnboardingVisaInProgress(modifier: Modifier = Modifier) {
@Composable
private fun Preview() {
TangemThemePreview {
OnboardingVisaInProgress()
OnboardingVisaInProgress(
type = OnboardingVisaInProgressComponent.Config.Type.AfterPinCode,
)
}
}

View file

@ -4,7 +4,6 @@ import androidx.compose.runtime.Stable
import com.arkivanov.decompose.ExperimentalDecomposeApi
import com.arkivanov.decompose.router.stack.StackNavigation
import com.arkivanov.decompose.router.stack.pop
import com.arkivanov.decompose.router.stack.push
import com.arkivanov.decompose.router.stack.pushNew
import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.Model
@ -69,7 +68,7 @@ internal class OnboardingVisaModel @Inject constructor(
customerWalletAddress = result.customerWalletTargetAddress,
request = result.customerWalletDataToSignRequest,
)
stackNavigation.push(
stackNavigation.pushNew(
if (foundWalletCardId != null) {
OnboardingVisaRoute.TangemWalletApproveOption(
foundWalletCardId = foundWalletCardId,
@ -100,7 +99,7 @@ internal class OnboardingVisaModel @Inject constructor(
route: OnboardingVisaRoute.ChooseWallet,
event: OnboardingVisaChooseWalletComponent.Params.Event,
) {
stackNavigation.push(
stackNavigation.pushNew(
when (event) {
OnboardingVisaChooseWalletComponent.Params.Event.TangemWallet ->
OnboardingVisaRoute.TangemWalletApproveOption(