Updated on 2026-08-14
This commit is contained in:
parent
7bb88d55c9
commit
e895d15e8a
5 changed files with 77 additions and 15 deletions
1
core/ui/src/main/res/raw/anim_visa_loading.json
Normal file
1
core/ui/src/main/res/raw/anim_visa_loading.json
Normal file
File diff suppressed because one or more lines are too long
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -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(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue