Updated on 2026-08-14

This commit is contained in:
Tangem 2025-10-03 17:05:44 +05:00
parent d943b499fa
commit 80f829a2aa
27 changed files with 831 additions and 279 deletions

View file

@ -356,42 +356,28 @@ internal class WalletModel @Inject constructor(
}
private suspend fun refreshTangemPayInfo() {
val newState = withContext(dispatchers.io) {
tangemPayMainScreenCustomerInfoUseCase()?.let { info ->
TangemPayStateTransformer(
val info = tangemPayMainScreenCustomerInfoUseCase()
if (info != null) {
stateHolder.update(
transformer = TangemPayStateTransformer(
value = info,
onIssueOrderClick = ::issueOrder,
onContinueKycClick = innerWalletRouter::openTangemPayOnboarding,
cardOnClick = ::tangemPayCardOnClick,
).transform(stateHolder.uiState.value.tangemPayState)
}
} ?: return
stateHolder.update { it.copy(tangemPayState = newState) }
openDetails = innerWalletRouter::openTangemPayDetails,
),
)
}
}
private fun issueOrder() {
modelScope.launch {
stateHolder.update {
it.copy(
tangemPayState = TangemPayStateTransformer(issueProgressState = true)
.transform(it.tangemPayState),
)
}
withContext(dispatchers.io) {
tangemPayIssueOrderUseCase()
} ?: stateHolder.update {
it.copy(
tangemPayState = TangemPayStateTransformer(issueState = true, onIssueOrderClick = ::issueOrder)
.transform(it.tangemPayState),
)
stateHolder.update(TangemPayStateTransformer(issueProgressState = true))
tangemPayIssueOrderUseCase().onLeft {
stateHolder.update(TangemPayStateTransformer(issueState = true, onIssueOrderClick = ::issueOrder))
}
}
}
private fun tangemPayCardOnClick(customerWalletAddress: String, cardNumberEnd: String) {
innerWalletRouter.openTangemPayDetails(customerWalletAddress, cardNumberEnd)
}
private fun needToRefreshTimer() {
modelScope.launch {
delay(REFRESH_WALLET_BACKGROUND_TIMER_MILLIS)

View file

@ -6,26 +6,29 @@ import com.tangem.core.ui.format.bigdecimal.fiat
import com.tangem.core.ui.format.bigdecimal.format
import com.tangem.domain.pay.model.CustomerInfo.CardInfo
import com.tangem.domain.pay.model.MainScreenCustomerInfo
import com.tangem.domain.pay.model.OrderStatus.NOT_ISSUED
import com.tangem.domain.pay.model.OrderStatus.CANCELED
import com.tangem.domain.pay.model.OrderStatus.NOT_ISSUED
import com.tangem.feature.wallet.presentation.wallet.state.model.TangemPayState
import com.tangem.feature.wallet.presentation.wallet.state.model.TangemPayState.Progress
import com.tangem.utils.transformer.Transformer
import com.tangem.feature.wallet.presentation.wallet.state.model.WalletScreenState
import java.util.Currency
internal class TangemPayStateTransformer(
private val value: MainScreenCustomerInfo? = null,
private val onIssueOrderClick: () -> Unit = {},
private val onContinueKycClick: () -> Unit = {},
private val cardOnClick: (customerWalletAddress: String, cardNumberEnd: String) -> Unit = { _, _ -> },
private val openDetails: (customerWalletAddress: String, cardNumberEnd: String) -> Unit = { _, _ -> },
private val issueProgressState: Boolean = false,
private val issueState: Boolean = false,
) : Transformer<TangemPayState> {
) : WalletScreenStateTransformer {
override fun transform(prevState: TangemPayState): TangemPayState = when {
issueProgressState -> createIssueProgressState()
issueState -> createIssueState()
else -> createInitialState()
override fun transform(prevState: WalletScreenState): WalletScreenState {
val tangemPayState = when {
issueProgressState -> createIssueProgressState()
issueState -> createIssueState()
else -> createInitialState()
}
return prevState.copy(tangemPayState = tangemPayState)
}
private fun createInitialState(): TangemPayState {
@ -64,7 +67,7 @@ internal class TangemPayStateTransformer(
private fun getCardInfoState(cardInfo: CardInfo): TangemPayState = TangemPayState.Card(
lastFourDigits = TextReference.Str("*${cardInfo.lastFourDigits}"),
balanceText = TextReference.Str(getBalanceText(cardInfo)),
onClick = { cardOnClick(cardInfo.customerWalletAddress, cardInfo.lastFourDigits) },
onClick = { openDetails(cardInfo.customerWalletAddress, cardInfo.lastFourDigits) },
)
private fun getBalanceText(cardInfo: CardInfo): String {

View file

@ -1,7 +1,6 @@
package com.tangem.feature.wallet.presentation.wallet.ui.components.singlecurrency
import androidx.compose.foundation.Image
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material3.Surface
@ -22,11 +21,10 @@ import com.tangem.feature.wallet.presentation.wallet.state.model.TangemPayState
@Composable
internal fun TangemPayCardMainBlock(state: TangemPayState.Card, modifier: Modifier = Modifier) {
Surface(
modifier = modifier
.fillMaxWidth()
.clickable { state.onClick() },
modifier = modifier.fillMaxWidth(),
shape = TangemTheme.shapes.roundedCornersXMedium,
color = TangemTheme.colors.background.primary,
onClick = state.onClick,
) {
Row(
modifier = Modifier