Updated on 2026-08-14
This commit is contained in:
parent
d84b06f80d
commit
b0a97f53d9
16 changed files with 68 additions and 14 deletions
|
|
@ -65,7 +65,7 @@
|
|||
},
|
||||
{
|
||||
"name": "NOTE_REFACTORING_ENABLED",
|
||||
"version": "undefined"
|
||||
"version": "5.23.0"
|
||||
},
|
||||
{
|
||||
"name": "NEW_ATTESTATION_ENABLED",
|
||||
|
|
|
|||
|
|
@ -587,6 +587,7 @@
|
|||
<string name="onboarding_top_up_body_no_account_error">Um zu beginnen, lade die Wallet einfach mit mehr als %1$s %2$s auf.</string>
|
||||
<string name="onboarding_top_up_button_but_crypto">Krypto kaufen</string>
|
||||
<string name="onboarding_top_up_button_show_wallet_address">Adresse der Wallet anzeigen</string>
|
||||
<string name="onboarding_top_up_min_create_account_amount">Um zu beginnen, lade die Wallet einfach mit mehr als %1$s auf.</string>
|
||||
<string name="onboarding_topup_title">Aktivieren einer Wallet</string>
|
||||
<string name="onboarding_twin_exit_warning">Der Twinning-Prozess ist teilweise abgeschlossen. Du kannst ihn jetzt nicht mehr beenden.</string>
|
||||
<string name="onboarding_twins_interrupt_warning">Wenn der Prozess der Erstellung der Brieftasche in irgendeiner Weise unterbrochen wird, musst du diesen von vorne beginnen</string>
|
||||
|
|
|
|||
|
|
@ -578,6 +578,7 @@
|
|||
<string name="onboarding_top_up_body_no_account_error">Para empezar, simplemente recargue la billetera con más de %1$s %2$s</string>
|
||||
<string name="onboarding_top_up_button_but_crypto">Comprar cripto</string>
|
||||
<string name="onboarding_top_up_button_show_wallet_address">Mostrar la dirección de la billetera</string>
|
||||
<string name="onboarding_top_up_min_create_account_amount">Para empezar, simplemente recargue la billetera con más de %1$s</string>
|
||||
<string name="onboarding_topup_title">Activar una billetera</string>
|
||||
<string name="onboarding_twin_exit_warning">El proceso de emparejamiento está parcialmente completo. No puede salir ahora.</string>
|
||||
<string name="onboarding_twins_interrupt_warning">Si el proceso de creación del wallet se interrumpe de alguna manera, tendrá que empezar de nuevo</string>
|
||||
|
|
|
|||
|
|
@ -580,6 +580,7 @@
|
|||
<string name="onboarding_top_up_body_no_account_error">Pour commencer, rechargez simplement le portefeuille avec plus de %1$s %2$s</string>
|
||||
<string name="onboarding_top_up_button_but_crypto">Acheter des crypto-monnaies</string>
|
||||
<string name="onboarding_top_up_button_show_wallet_address">Afficher l\'adresse du portefeuille</string>
|
||||
<string name="onboarding_top_up_min_create_account_amount">Pour commencer, rechargez simplement le portefeuille avec plus de %1$s</string>
|
||||
<string name="onboarding_topup_title">Activer un portefeuille</string>
|
||||
<string name="onboarding_twin_exit_warning">Le processus de jumelage est partiellement terminé. Vous ne pouvez pas le quitter maintenant.</string>
|
||||
<string name="onboarding_twins_interrupt_warning">Si le processus de création du portefeuille est interrompu de quelque manière que ce soit, vous devrez recommencer</string>
|
||||
|
|
|
|||
|
|
@ -588,6 +588,7 @@
|
|||
<string name="onboarding_top_up_body_no_account_error">始めるには、ウォレットに%1$s %2$s以上入金するだけです</string>
|
||||
<string name="onboarding_top_up_button_but_crypto">暗号資産を購入する</string>
|
||||
<string name="onboarding_top_up_button_show_wallet_address">ウォレットのアドレスを表示する</string>
|
||||
<string name="onboarding_top_up_min_create_account_amount">始めるには、ウォレットに%1$s 以上入金するだけです</string>
|
||||
<string name="onboarding_topup_title">ウォレットを有効化する</string>
|
||||
<string name="onboarding_twin_exit_warning">ツイン化プロセスは部分的に完了しています。現在終了することはできません。</string>
|
||||
<string name="onboarding_twins_interrupt_warning">ウォレットの作成プロセスが何らかの理由で中断された場合は、最初からやり直す必要があります。</string>
|
||||
|
|
|
|||
|
|
@ -594,6 +594,7 @@
|
|||
<string name="onboarding_top_up_body_no_account_error">Пополните кошелек более чем на %1$s %2$s, чтобы начать пользоваться картой</string>
|
||||
<string name="onboarding_top_up_button_but_crypto">Купить криптовалюту</string>
|
||||
<string name="onboarding_top_up_button_show_wallet_address">Показать адрес кошелька</string>
|
||||
<string name="onboarding_top_up_min_create_account_amount">Пополните кошелек более чем на %1$s, чтобы начать пользоваться картой</string>
|
||||
<string name="onboarding_topup_title">Активация кошелька</string>
|
||||
<string name="onboarding_twin_exit_warning">Процесс связывания карт частично завершен. Вы не можете выйти из него сейчас.</string>
|
||||
<string name="onboarding_twins_interrupt_warning">Если процесc создания кошелька каким-либо образом прервется, вам придется начинать сначала</string>
|
||||
|
|
|
|||
|
|
@ -594,6 +594,7 @@
|
|||
<string name="onboarding_top_up_body_no_account_error">Щоб почати, просто поповніть гаманець більше, ніж на %1$s %2$s</string>
|
||||
<string name="onboarding_top_up_button_but_crypto">Купити криптовалюту</string>
|
||||
<string name="onboarding_top_up_button_show_wallet_address">Показати адресу гаманця</string>
|
||||
<string name="onboarding_top_up_min_create_account_amount">Щоб почати, просто поповніть гаманець більше, ніж на %1$s</string>
|
||||
<string name="onboarding_topup_title">Активація гаманця</string>
|
||||
<string name="onboarding_twin_exit_warning">Процес поєднання карток частково завершено. Ви не можете вийти з нього зараз.</string>
|
||||
<string name="onboarding_twins_interrupt_warning">Якщо процес створення гаманця буде перервано будь-яким чином, вам доведеться почати все спочатку</string>
|
||||
|
|
|
|||
|
|
@ -205,6 +205,7 @@
|
|||
<string name="onboarding_top_up_body_no_account_error">要開始,只需為錢包充值超過 %1$s %2$s</string>
|
||||
<string name="onboarding_top_up_button_but_crypto">購買加密貨幣</string>
|
||||
<string name="onboarding_top_up_button_show_wallet_address">顯示錢包地址</string>
|
||||
<string name="onboarding_top_up_min_create_account_amount">要開始,只需為錢包充值超過 %1$s</string>
|
||||
<string name="onboarding_topup_title">啟動錢包</string>
|
||||
<string name="onboarding_twin_exit_warning">結對過程已部分完成。你現在不能退出</string>
|
||||
<string name="onboarding_twins_interrupt_warning">如果創建錢包的過程以任何方式中斷,您將得重新開始</string>
|
||||
|
|
|
|||
|
|
@ -598,6 +598,7 @@
|
|||
<string name="onboarding_top_up_body_no_account_error">To get started, simply top up the wallet with more than %1$s %2$s</string>
|
||||
<string name="onboarding_top_up_button_but_crypto">Buy crypto</string>
|
||||
<string name="onboarding_top_up_button_show_wallet_address">Show the wallet\'s address</string>
|
||||
<string name="onboarding_top_up_min_create_account_amount">To get started, simply top up the wallet with more than %1$s</string>
|
||||
<string name="onboarding_topup_title">Activate a wallet</string>
|
||||
<string name="onboarding_twin_exit_warning">The twinning process is partly complete. You can\'t exit it now.</string>
|
||||
<string name="onboarding_twins_interrupt_warning">If the process of creating the wallet gets interrupted in any way, you\'ll have to start over</string>
|
||||
|
|
|
|||
|
|
@ -66,6 +66,7 @@ dependencies {
|
|||
implementation(deps.compose.ui)
|
||||
implementation(deps.compose.ui.tooling)
|
||||
implementation(deps.compose.coil)
|
||||
implementation(deps.compose.shimmer)
|
||||
implementation(deps.lottie.compose)
|
||||
implementation(deps.decompose.ext.compose)
|
||||
implementation(deps.androidx.activity.compose)
|
||||
|
|
|
|||
|
|
@ -76,7 +76,6 @@ internal class OnboardingNoteCreateWalletModel @Inject constructor(
|
|||
modelScope.launch {
|
||||
val userWallet = createUserWallet(scanResponse)
|
||||
saveWalletUseCase(userWallet, canOverride = true).onRight {
|
||||
cardRepository.finishCardActivation(scanResponse.card.cardId)
|
||||
params.onWalletCreated(userWallet)
|
||||
}
|
||||
_uiState.update {
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import com.tangem.core.ui.components.bottomsheets.tokenreceive.TokenReceiveBotto
|
|||
import com.tangem.core.ui.components.bottomsheets.tokenreceive.mapToAddressModels
|
||||
import com.tangem.core.ui.format.bigdecimal.crypto
|
||||
import com.tangem.core.ui.format.bigdecimal.format
|
||||
import com.tangem.domain.card.repository.CardRepository
|
||||
import com.tangem.domain.exchange.RampStateManager
|
||||
import com.tangem.domain.models.scan.ScanResponse
|
||||
import com.tangem.domain.onramp.GetLegacyTopUpUrlUseCase
|
||||
|
|
@ -23,10 +24,12 @@ import com.tangem.domain.tokens.model.NetworkAddress
|
|||
import com.tangem.domain.tokens.model.analytics.TokenReceiveAnalyticsEvent
|
||||
import com.tangem.domain.wallets.builder.UserWalletBuilder
|
||||
import com.tangem.domain.wallets.models.UserWallet
|
||||
import com.tangem.domain.wallets.usecase.SaveWalletUseCase
|
||||
import com.tangem.features.onboarding.v2.common.analytics.OnboardingEvent
|
||||
import com.tangem.features.onboarding.v2.note.impl.child.topup.OnboardingNoteTopUpComponent
|
||||
import com.tangem.features.onboarding.v2.note.impl.child.topup.ui.state.OnboardingNoteTopUpUM
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
import com.tangem.utils.extensions.isPositive
|
||||
import kotlinx.collections.immutable.toImmutableList
|
||||
import kotlinx.coroutines.flow.*
|
||||
import kotlinx.coroutines.launch
|
||||
|
|
@ -45,12 +48,14 @@ internal class OnboardingNoteTopUpModel @Inject constructor(
|
|||
private val clipboardManager: ClipboardManager,
|
||||
private val shareManager: ShareManager,
|
||||
private val rampStateManager: RampStateManager,
|
||||
private val cardRepository: CardRepository,
|
||||
private val saveWalletUseCase: SaveWalletUseCase,
|
||||
) : Model() {
|
||||
|
||||
private val params = paramsContainer.require<OnboardingNoteTopUpComponent.Params>()
|
||||
private val commonState = params.childParams.commonState
|
||||
private val scanResponse = params.childParams.commonState.value.scanResponse
|
||||
private var userWallet: UserWallet? = null
|
||||
private var userWallet = params.childParams.commonState.value.userWallet
|
||||
|
||||
private val _uiState = MutableStateFlow(
|
||||
OnboardingNoteTopUpUM(
|
||||
|
|
@ -117,7 +122,7 @@ internal class OnboardingNoteTopUpModel @Inject constructor(
|
|||
return
|
||||
}
|
||||
val commonState = params.childParams.commonState.value
|
||||
userWallet = commonState.userWallet ?: createUserWallet(scanResponse)
|
||||
userWallet = commonState.userWallet ?: createAndSaveUserWallet(scanResponse)
|
||||
}
|
||||
|
||||
private fun observeArtwork() {
|
||||
|
|
@ -140,14 +145,34 @@ internal class OnboardingNoteTopUpModel @Inject constructor(
|
|||
if (commonState.value.cryptoCurrencyStatus == null) {
|
||||
loadAvailableForBuy(status)
|
||||
}
|
||||
|
||||
commonState.update {
|
||||
it.copy(cryptoCurrencyStatus = status)
|
||||
}
|
||||
|
||||
val amount = when (status.value) {
|
||||
is CryptoCurrencyStatus.Loaded -> status.value.amount
|
||||
is CryptoCurrencyStatus.NoAccount -> status.value.amount
|
||||
is CryptoCurrencyStatus.NoQuote -> status.value.amount
|
||||
else -> null
|
||||
}
|
||||
val hasCurrentNetworkTransactions = when (status.value) {
|
||||
is CryptoCurrencyStatus.Loaded -> status.value.hasCurrentNetworkTransactions
|
||||
is CryptoCurrencyStatus.NoAccount -> status.value.hasCurrentNetworkTransactions
|
||||
else -> false
|
||||
}
|
||||
val amountToCreateAccount = (status.value as? CryptoCurrencyStatus.NoAccount)?.amountToCreateAccount
|
||||
|
||||
if (amount?.isPositive() == true || hasCurrentNetworkTransactions) {
|
||||
modelScope.launch {
|
||||
cardRepository.finishCardActivation(scanResponse.card.cardId)
|
||||
params.onDone()
|
||||
}
|
||||
}
|
||||
|
||||
_uiState.update {
|
||||
it.copy(
|
||||
amountToCreateAccount = (status.value as? CryptoCurrencyStatus.NoAccount)
|
||||
?.amountToCreateAccount
|
||||
amountToCreateAccount = amountToCreateAccount
|
||||
?.format(
|
||||
{
|
||||
crypto(
|
||||
|
|
@ -156,7 +181,7 @@ internal class OnboardingNoteTopUpModel @Inject constructor(
|
|||
)
|
||||
},
|
||||
),
|
||||
balance = (status.value as? CryptoCurrencyStatus.Loaded)?.amount?.format(
|
||||
balance = amount?.format(
|
||||
{
|
||||
crypto(
|
||||
symbol = status.currency.symbol,
|
||||
|
|
@ -217,10 +242,12 @@ internal class OnboardingNoteTopUpModel @Inject constructor(
|
|||
),
|
||||
)
|
||||
|
||||
private suspend fun createUserWallet(scanResponse: ScanResponse): UserWallet {
|
||||
return requireNotNull(
|
||||
private suspend fun createAndSaveUserWallet(scanResponse: ScanResponse): UserWallet {
|
||||
val wallet = requireNotNull(
|
||||
value = userWalletBuilderFactory.create(scanResponse = scanResponse).build(),
|
||||
lazyMessage = { "User wallet not created" },
|
||||
)
|
||||
saveWalletUseCase(wallet, false)
|
||||
return wallet
|
||||
}
|
||||
}
|
||||
|
|
@ -2,21 +2,25 @@ package com.tangem.features.onboarding.v2.note.impl.child.topup.ui
|
|||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.tangem.core.ui.components.SpacerH8
|
||||
import com.tangem.core.ui.components.SpacerHMax
|
||||
import com.tangem.core.ui.extensions.stringResourceSafe
|
||||
import com.tangem.core.ui.res.LocalTangemShimmer
|
||||
import com.tangem.core.ui.res.TangemTheme
|
||||
import com.tangem.core.ui.res.TangemThemePreview
|
||||
import com.tangem.features.onboarding.v2.common.ui.RefreshButton
|
||||
import com.tangem.features.onboarding.v2.common.ui.WalletCard
|
||||
import com.tangem.features.onboarding.v2.impl.R
|
||||
import com.valentinilk.shimmer.shimmer
|
||||
|
||||
@Composable
|
||||
fun OnboardingNoteTopUpHeader(
|
||||
|
|
@ -58,10 +62,17 @@ fun OnboardingNoteTopUpHeader(
|
|||
)
|
||||
SpacerH8()
|
||||
Text(
|
||||
text = balance,
|
||||
modifier = if (balance.isEmpty()) {
|
||||
Modifier
|
||||
.width(120.dp)
|
||||
.clip(RoundedCornerShape(size = TangemTheme.dimens.radius3))
|
||||
.shimmer(LocalTangemShimmer.current)
|
||||
} else {
|
||||
Modifier
|
||||
},
|
||||
style = TangemTheme.typography.h2,
|
||||
color = TangemTheme.colors.text.primary1,
|
||||
textAlign = TextAlign.Center,
|
||||
text = balance,
|
||||
)
|
||||
SpacerHMax()
|
||||
RefreshButton(
|
||||
|
|
|
|||
|
|
@ -57,8 +57,16 @@ fun OnboardingNoteTopUp(state: OnboardingNoteTopUpUM, modifier: Modifier = Modif
|
|||
modifier = Modifier.padding(top = 16.dp),
|
||||
)
|
||||
|
||||
val text = if (state.amountToCreateAccount != null) {
|
||||
stringResourceSafe(
|
||||
R.string.onboarding_top_up_min_create_account_amount,
|
||||
state.amountToCreateAccount,
|
||||
)
|
||||
} else {
|
||||
stringResourceSafe(R.string.onboarding_top_up_body)
|
||||
}
|
||||
Text(
|
||||
text = stringResourceSafe(R.string.onboarding_top_up_body),
|
||||
text = text,
|
||||
style = TangemTheme.typography.body1,
|
||||
color = TangemTheme.colors.text.secondary,
|
||||
textAlign = TextAlign.Center,
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ data class OnboardingNoteTopUpUM(
|
|||
val cardArtworkUrl: String? = null,
|
||||
val availableForBuy: Boolean = false,
|
||||
val availableForBuyLoading: Boolean = true,
|
||||
val balance: String = "–",
|
||||
val balance: String = "",
|
||||
val isRefreshing: Boolean = false,
|
||||
val isTopUpDataLoading: Boolean = true,
|
||||
val amountToCreateAccount: String? = null,
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import com.tangem.domain.wallets.models.UserWallet
|
|||
|
||||
internal data class OnboardingNoteCommonState(
|
||||
val scanResponse: ScanResponse,
|
||||
val cardArtworkUrl: String? = null,
|
||||
val userWallet: UserWallet? = null,
|
||||
val cardArtworkUrl: String? = null,
|
||||
val cryptoCurrencyStatus: CryptoCurrencyStatus? = null,
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue