diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml
index 61dcacefa9..41593daacd 100644
--- a/core/res/src/main/res/values/strings.xml
+++ b/core/res/src/main/res/values/strings.xml
@@ -2020,6 +2020,7 @@
Get your Tangem Pay Card in minutes
Pay Support
Select plan
+ Inactive
Payment account
Session expired
Invalid PIN: avoid sequences or repeats
diff --git a/data/visa/src/main/kotlin/com/tangem/data/pay/converter/PaymentAccountStatusValueDMConverter.kt b/data/visa/src/main/kotlin/com/tangem/data/pay/converter/PaymentAccountStatusValueDMConverter.kt
index f988866ea2..20062e25e1 100644
--- a/data/visa/src/main/kotlin/com/tangem/data/pay/converter/PaymentAccountStatusValueDMConverter.kt
+++ b/data/visa/src/main/kotlin/com/tangem/data/pay/converter/PaymentAccountStatusValueDMConverter.kt
@@ -76,6 +76,7 @@ internal class PaymentAccountStatusValueDMConverter @Inject constructor(
// Transient statuses are not persisted
is PaymentAccountStatusValue.Loading,
is PaymentAccountStatusValue.AwaitingPlanSelection,
+ is PaymentAccountStatusValue.Inactive,
is PaymentAccountStatusValue.Error.ExposedDevice,
is PaymentAccountStatusValue.Error.Unavailable,
is PaymentAccountStatusValue.Error.NotSynced,
diff --git a/data/visa/src/test/kotlin/com/tangem/data/pay/converter/PaymentAccountStatusValueDMConverterTest.kt b/data/visa/src/test/kotlin/com/tangem/data/pay/converter/PaymentAccountStatusValueDMConverterTest.kt
index 386ef7303b..cfdc2fe9f6 100644
--- a/data/visa/src/test/kotlin/com/tangem/data/pay/converter/PaymentAccountStatusValueDMConverterTest.kt
+++ b/data/visa/src/test/kotlin/com/tangem/data/pay/converter/PaymentAccountStatusValueDMConverterTest.kt
@@ -108,7 +108,28 @@ internal class PaymentAccountStatusValueDMConverterTest {
// GIVEN
val domain = PaymentAccountStatusValue.AwaitingPlanSelection(
source = StatusSource.ACTUAL,
- tariffPlan = null,
+ cryptoCurrency = cryptoCurrency,
+ tariffPlan = mockk(),
+ )
+
+ // WHEN
+ val result = converter.convert(domain)
+
+ // THEN
+ assertThat(result).isNull()
+ }
+
+ @Test
+ fun `GIVEN domain Inactive WHEN convert THEN returns null (transient, not persisted)`() {
+ // GIVEN
+ val domain = PaymentAccountStatusValue.Inactive(
+ source = StatusSource.ACTUAL,
+ fiatBalance = PaymentAccountStatusValue.FiatBalance(
+ availableBalance = BigDecimal("100"),
+ currency = "USD",
+ ),
+ cryptoCurrency = cryptoCurrency,
+ tariffPlan = mockk(),
)
// WHEN
diff --git a/domain/account/status/src/main/java/com/tangem/domain/account/status/usecase/IsAccountsModeEnabledUseCase.kt b/domain/account/status/src/main/java/com/tangem/domain/account/status/usecase/IsAccountsModeEnabledUseCase.kt
index 4b1037eb1b..832a2be4ce 100644
--- a/domain/account/status/src/main/java/com/tangem/domain/account/status/usecase/IsAccountsModeEnabledUseCase.kt
+++ b/domain/account/status/src/main/java/com/tangem/domain/account/status/usecase/IsAccountsModeEnabledUseCase.kt
@@ -109,6 +109,7 @@ class IsAccountsModeEnabledUseCase(
is PaymentAccountStatusValue.Error,
is PaymentAccountStatusValue.IssuingCard,
is PaymentAccountStatusValue.AwaitingPlanSelection,
+ is PaymentAccountStatusValue.Inactive,
is PaymentAccountStatusValue.Loaded,
is PaymentAccountStatusValue.Loading,
is PaymentAccountStatusValue.UnderReview,
diff --git a/domain/models/src/main/kotlin/com/tangem/domain/models/account/PaymentAccountStatusValue.kt b/domain/models/src/main/kotlin/com/tangem/domain/models/account/PaymentAccountStatusValue.kt
index 6240266c9c..75337d519c 100644
--- a/domain/models/src/main/kotlin/com/tangem/domain/models/account/PaymentAccountStatusValue.kt
+++ b/domain/models/src/main/kotlin/com/tangem/domain/models/account/PaymentAccountStatusValue.kt
@@ -28,6 +28,7 @@ sealed class PaymentAccountStatusValue {
is Error,
is IssuingCard,
is AwaitingPlanSelection,
+ is Inactive,
is Empty,
is NotCreated,
is UnderReview,
@@ -56,6 +57,7 @@ sealed class PaymentAccountStatusValue {
is Deactivated -> copy(source = source, error = error ?: this.error)
is Loading,
is AwaitingPlanSelection,
+ is Inactive,
is Empty,
is NotCreated,
is Error,
@@ -107,13 +109,30 @@ sealed class PaymentAccountStatusValue {
* Represents a state where KYC is approved but no tariff plan has been selected yet
*
* @property source The source of the status information.
- * @property tariffPlan Current tariff plan (fallback Basic) if the backend already returns one
- * Transient: not persisted in the local cache.
+ * @property cryptoCurrency The crypto currency held by the account.
+ * @property tariffPlan Current tariff plan
*/
@Serializable
data class AwaitingPlanSelection(
override val source: StatusSource,
- val tariffPlan: TangemPayCustomerTariffPlan?,
+ val cryptoCurrency: CryptoCurrency.Token,
+ val tariffPlan: TangemPayCustomerTariffPlan,
+ ) : PaymentAccountStatusValue()
+
+ /**
+ * Represents a state where a tariff plan has been selected and the card is being issued
+ *
+ * @property source The source of the status information.
+ * @property fiatBalance The fiat balance of state.
+ * @property cryptoCurrency The crypto currency held by the account.
+ * @property tariffPlan Current tariff plan
+ */
+ @Serializable
+ data class Inactive(
+ override val source: StatusSource,
+ val fiatBalance: FiatBalance,
+ val cryptoCurrency: CryptoCurrency.Token,
+ val tariffPlan: TangemPayTariffPlanState,
) : PaymentAccountStatusValue()
/**
diff --git a/features/common-features/impl/src/main/java/com/tangem/features/commonfeatures/impl/choosetoken/converter/ChooseTokenListItemConverter.kt b/features/common-features/impl/src/main/java/com/tangem/features/commonfeatures/impl/choosetoken/converter/ChooseTokenListItemConverter.kt
index dc1253f1df..004203b101 100644
--- a/features/common-features/impl/src/main/java/com/tangem/features/commonfeatures/impl/choosetoken/converter/ChooseTokenListItemConverter.kt
+++ b/features/common-features/impl/src/main/java/com/tangem/features/commonfeatures/impl/choosetoken/converter/ChooseTokenListItemConverter.kt
@@ -183,6 +183,7 @@ internal class ChooseTokenListItemConverter(
is PaymentAccountStatusValue.Error,
is PaymentAccountStatusValue.IssuingCard,
is PaymentAccountStatusValue.AwaitingPlanSelection,
+ is PaymentAccountStatusValue.Inactive,
PaymentAccountStatusValue.NotCreated,
is PaymentAccountStatusValue.UnderReview,
PaymentAccountStatusValue.Loading,
diff --git a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/entity/TangemPayDetailsStateFactory.kt b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/entity/TangemPayDetailsStateFactory.kt
index 1e9b7ecf71..81e3c07a8b 100644
--- a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/entity/TangemPayDetailsStateFactory.kt
+++ b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/entity/TangemPayDetailsStateFactory.kt
@@ -20,6 +20,7 @@ import com.tangem.domain.models.pay.TangemPayCardState
import com.tangem.domain.models.pay.isFrozen
import com.tangem.domain.models.pay.thumbnailUrl
import com.tangem.features.tangempay.details.impl.R
+import com.tangem.features.tangempay.model.transformers.DetailsBalanceTransformer
import com.tangem.features.tangempay.utils.TangemPayDetailIntents
import com.tangem.features.tangempay.utils.hasWithdrawableAmount
import com.tangem.features.tangempay.utils.isFresh
@@ -28,7 +29,7 @@ import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toImmutableList
import com.tangem.core.ui.R as CoreUiR
-@Suppress("LongParameterList")
+@Suppress("LongParameterList", "LargeClass")
internal class TangemPayDetailsStateFactory(
private val onBack: () -> Unit,
private val onOpenMenu: () -> Unit,
@@ -159,6 +160,51 @@ internal class TangemPayDetailsStateFactory(
)
}
+ fun getInactiveState(status: PaymentAccountStatusValue.Inactive): TangemPayDetailsUM {
+ val notification = notificationFactory.createAwaitingDepositConfig(status.tariffPlan)
+ return TangemPayDetailsUM(
+ topBarConfig = TangemPayDetailsTopBarConfig(
+ onBackClick = onBack,
+ onOpenMenu = onOpenMenu,
+ items = getTopBarMenuItems(),
+ itemsV2 = getTopBarMenuItemsV2(tariffPlan = null),
+ ),
+ pullToRefreshConfig = PullToRefreshConfig(
+ isRefreshing = false,
+ onRefresh = intents::onRefreshSwipe,
+ ),
+ balanceBlockState = TangemPayDetailsBalanceBlockState.Content(
+ actionButtons = getActionButtonsConfig(
+ isAddFundsEnabled = true,
+ isWithdrawEnabled = false,
+ ),
+ cardsBlockState = TangemPayDetailsBalanceBlockState.CardsBlockState(
+ cards = persistentListOf(
+ TangemPayDetailsBalanceBlockState.Card(
+ lastDigits = "",
+ imageUrl = null,
+ onClick = {},
+ isEnabled = false,
+ isFrozen = false,
+ state = TangemPayCardUiState.InProgress,
+ ),
+ ),
+ onAddCardClick = intents::onAddCardClick,
+ isAddCardEnabled = false,
+ ),
+ fiatBalance = DetailsBalanceTransformer.getFiatBalanceText(status.fiatBalance),
+ isInactive = true,
+ isNegative = false,
+ isBalanceFlickering = false,
+ ),
+ isBalanceHidden = false,
+ addToWalletBlockState = null,
+ errorNotificationConfig = notification,
+ accountDeactivatedNotificationConfig = null,
+ cashbackBlockState = null,
+ )
+ }
+
private fun getTopBarMenuItems(): ImmutableList {
return persistentListOf(
TangemDropdownMenuItem(
diff --git a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/entity/TangemPayDetailsUM.kt b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/entity/TangemPayDetailsUM.kt
index f1a1384f8a..c3b424578b 100644
--- a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/entity/TangemPayDetailsUM.kt
+++ b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/entity/TangemPayDetailsUM.kt
@@ -110,6 +110,7 @@ internal sealed class TangemPayDetailsBalanceBlockState {
val fiatBalance: TextReference,
val isBalanceFlickering: Boolean,
val isNegative: Boolean,
+ val isInactive: Boolean,
val isMuted: Boolean = false,
) : TangemPayDetailsBalanceBlockState()
diff --git a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/TangemPayDetailsModel.kt b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/TangemPayDetailsModel.kt
index 89a0d9acd7..01b48f8314 100644
--- a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/TangemPayDetailsModel.kt
+++ b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/TangemPayDetailsModel.kt
@@ -56,6 +56,7 @@ import com.tangem.features.tangempay.entity.TangemPayDetailsStateFactory
import com.tangem.features.tangempay.entity.TangemPayDetailsUM
import com.tangem.features.tangempay.model.transformers.*
import com.tangem.features.tangempay.navigation.TangemPayAccountDetailsInnerRoute
+import com.tangem.features.tangempay.tiers.feeCurrency
import com.tangem.features.tangempay.utils.*
import com.tangem.features.tokendetails.ExpressTransactionsEvent
import com.tangem.features.tokendetails.ExpressTransactionsEventListener
@@ -171,6 +172,9 @@ internal class TangemPayDetailsModel @Inject constructor(
)
uiState.update { balanceTransformer.transform(stateFactory.getLoadedState(state)) }
}
+ is PaymentAccountStatusValue.Inactive -> uiState.update {
+ stateFactory.getInactiveState(state)
+ }
else -> uiState.update { stateFactory.getLoadingState() }
}
}
@@ -484,11 +488,6 @@ internal class TangemPayDetailsModel @Inject constructor(
)
return
}
- val activeCardsCount = currentStatus.value.ifLoadedOrNull { loaded -> loaded.cards.count() } ?: 0
- if (activeCardsCount >= ALLOWED_MAX_CARDS_COUNT) {
- uiMessageSender.send(TangemPayMessagesFactory.createMaximumCardsIssued(maxCards = ALLOWED_MAX_CARDS_COUNT))
- return
- }
modelScope.launch {
val offer = getCustomerOffers.additionalCardOffer(userWalletId).getOrNull()
if (offer == null) {
@@ -569,8 +568,4 @@ internal class TangemPayDetailsModel @Inject constructor(
private fun showBottomSheetError(type: TangemPayDetailsErrorType) {
uiMessageSender.send(message = TangemPayMessagesFactory.createErrorMessage(errorType = type))
}
-
- private companion object {
- const val ALLOWED_MAX_CARDS_COUNT = 3
- }
}
\ No newline at end of file
diff --git a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/transformers/DetailsBalanceTransformer.kt b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/transformers/DetailsBalanceTransformer.kt
index f5a0fba8be..65f7f5a1ac 100644
--- a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/transformers/DetailsBalanceTransformer.kt
+++ b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/transformers/DetailsBalanceTransformer.kt
@@ -12,6 +12,7 @@ import java.util.Currency
internal class DetailsBalanceTransformer(
private val fiatBalance: PaymentAccountStatusValue.FiatBalance,
+ private val isInactive: Boolean = false,
private val isMuted: Boolean = false,
) : Transformer {
@@ -23,18 +24,21 @@ internal class DetailsBalanceTransformer(
cardsBlockState = prevState.balanceBlockState.cardsBlockState,
isMuted = isMuted,
isNegative = fiatBalance.availableBalance.signum() < 0,
+ isInactive = isInactive,
)
return prevState.copy(balanceBlockState = balance)
}
- private fun getFiatBalanceText(fiatBalance: PaymentAccountStatusValue.FiatBalance): TextReference {
- val currency = Currency.getInstance(fiatBalance.currency)
- return fiatBalance.availableBalance.formatStyled {
- fiat(
- fiatCurrencyCode = currency.currencyCode,
- fiatCurrencySymbol = currency.symbol,
- spanStyleReference = { TangemTheme.typography3.heading.medium.toSpanStyle() },
- )
+ companion object {
+ fun getFiatBalanceText(fiatBalance: PaymentAccountStatusValue.FiatBalance): TextReference {
+ val currency = Currency.getInstance(fiatBalance.currency)
+ return fiatBalance.availableBalance.formatStyled {
+ fiat(
+ fiatCurrencyCode = currency.currencyCode,
+ fiatCurrencySymbol = currency.symbol,
+ spanStyleReference = { TangemTheme.typography3.heading.medium.toSpanStyle() },
+ )
+ }
}
}
}
\ No newline at end of file
diff --git a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/tiers/TiersUtils.kt b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/tiers/TiersUtils.kt
index a82b5f1ab4..9f06d7b555 100644
--- a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/tiers/TiersUtils.kt
+++ b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/tiers/TiersUtils.kt
@@ -9,6 +9,9 @@ import com.tangem.domain.models.account.TangemPayCustomerTariffPlan
import com.tangem.domain.models.account.TangemPayTariffPlan
import org.joda.time.format.DateTimeFormatter
+val TangemPayTariffPlan.feeCurrency: String?
+ get() = fees.firstOrNull()?.currency
+
fun TangemPayTariffPlan.formatRecurringFeeOrNull(): String? {
val fee = fees.find { it.type == TangemPayTariffPlan.Fee.Type.RECURRING } ?: return null
val currency = getJavaCurrencyByCode(fee.currency)
diff --git a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/ui/TangemPayDetailsScreen.kt b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/ui/TangemPayDetailsScreen.kt
index ca85d48501..a68b7a0a4a 100644
--- a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/ui/TangemPayDetailsScreen.kt
+++ b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/ui/TangemPayDetailsScreen.kt
@@ -510,6 +510,7 @@ internal class TangemPayDetailsUMProvider : CollectionPreviewParameterProvider
- when (animatedState) {
- is TangemPayDetailsBalanceBlockState.Loading -> TangemShimmer(
- style = TangemTheme.typography3.heading.medium,
- )
- is TangemPayDetailsBalanceBlockState.Content -> {
- val balanceColor = when {
- animatedState.isMuted -> TangemTheme.colors3.text.secondary
- animatedState.isNegative -> TangemTheme.colors3.text.status.error
- else -> TangemTheme.colors3.text.primary
- }
- Text(
- modifier = Modifier.testTag(TangemPayTestTags.PAYMENT_ACCOUNT_BALANCE),
- text = animatedState.fiatBalance.orMaskWithStars(isBalanceHidden).resolveAnnotatedReference(),
- style = TangemTheme.typography3.display.medium.applyBladeBrush(
- isEnabled = animatedState.isBalanceFlickering,
- textColor = balanceColor,
- ),
- color = balanceColor,
- maxLines = 1,
- overflow = TextOverflow.Ellipsis,
- autoSize = TextAutoSize.StepBased(
- minFontSize = TangemTheme.typography3.heading.medium.fontSize,
- maxFontSize = TangemTheme.typography3.display.medium.fontSize,
- ),
- )
- }
- is TangemPayDetailsBalanceBlockState.Error -> Text(
- modifier = Modifier.testTag(TangemPayTestTags.PAYMENT_ACCOUNT_BALANCE),
- text = DASH_SIGN.orMaskWithStars(isBalanceHidden),
- style = TangemTheme.typography3.display.medium,
- color = TangemTheme.colors3.text.primary,
- )
- }
+ BalanceValue(animatedState, isBalanceHidden)
}
Text(
@@ -400,6 +369,58 @@ private fun BalanceBlock(
color = TangemTheme.colors3.text.secondary,
style = TangemTheme.typography3.caption.medium,
)
+
+ when (state) {
+ is TangemPayDetailsBalanceBlockState.Loading -> Unit
+ is TangemPayDetailsBalanceBlockState.Content -> {
+ TangemBadge(
+ modifier = Modifier.padding(vertical = TangemTheme.dimens2.x1),
+ text = resourceReference(R.string.tangempay_status_inactive),
+ variant = TangemBadge.Variant.Outline,
+ status = TangemBadge.Status.Warning,
+ size = TangemBadge.Size.X6,
+ iconStart = TangemIconUM.Icon(iconRes = CoreUiR.drawable.ic_information_24),
+ )
+ }
+ is TangemPayDetailsBalanceBlockState.Error -> Unit
+ }
+ }
+}
+
+@Composable
+private fun BalanceValue(state: TangemPayDetailsBalanceBlockState, isBalanceHidden: Boolean) {
+ when (state) {
+ is TangemPayDetailsBalanceBlockState.Loading -> TangemShimmer(
+ style = TangemTheme.typography3.heading.medium,
+ )
+ is TangemPayDetailsBalanceBlockState.Content -> {
+ val balanceColor = when {
+ state.isMuted -> TangemTheme.colors3.text.secondary
+ state.isNegative -> TangemTheme.colors3.text.status.error
+ else -> TangemTheme.colors3.text.primary
+ }
+ Text(
+ modifier = Modifier.testTag(TangemPayTestTags.PAYMENT_ACCOUNT_BALANCE),
+ text = state.fiatBalance.orMaskWithStars(isBalanceHidden).resolveAnnotatedReference(),
+ style = TangemTheme.typography3.display.medium.applyBladeBrush(
+ isEnabled = state.isBalanceFlickering,
+ textColor = balanceColor,
+ ),
+ color = balanceColor,
+ maxLines = 1,
+ overflow = TextOverflow.Ellipsis,
+ autoSize = TextAutoSize.StepBased(
+ minFontSize = TangemTheme.typography3.heading.medium.fontSize,
+ maxFontSize = TangemTheme.typography3.display.medium.fontSize,
+ ),
+ )
+ }
+ is TangemPayDetailsBalanceBlockState.Error -> Text(
+ modifier = Modifier.testTag(TangemPayTestTags.PAYMENT_ACCOUNT_BALANCE),
+ text = DASH_SIGN.orMaskWithStars(isBalanceHidden),
+ style = TangemTheme.typography3.display.medium,
+ color = TangemTheme.colors3.text.primary,
+ )
}
}
diff --git a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/utils/PaymentAccountStatusExt.kt b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/utils/PaymentAccountStatusExt.kt
index 3c1a59dcec..514801267b 100644
--- a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/utils/PaymentAccountStatusExt.kt
+++ b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/utils/PaymentAccountStatusExt.kt
@@ -12,6 +12,8 @@ internal val AccountStatus.Payment.cryptoCurrency: CryptoCurrency.Token
get() = when (val v = value) {
is PaymentAccountStatusValue.Loaded -> v.cryptoCurrency
is PaymentAccountStatusValue.Deactivated -> v.cryptoCurrency
+ is PaymentAccountStatusValue.Inactive -> v.cryptoCurrency
+ is PaymentAccountStatusValue.AwaitingPlanSelection -> v.cryptoCurrency
else -> error("TangemPayDetails opened with unsupported status: $v")
}
diff --git a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/utils/TangemPayMessagesFactory.kt b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/utils/TangemPayMessagesFactory.kt
index 4751a87b79..40f023a510 100644
--- a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/utils/TangemPayMessagesFactory.kt
+++ b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/utils/TangemPayMessagesFactory.kt
@@ -5,12 +5,10 @@ import com.tangem.core.ui.components.bottomsheets.message.*
import com.tangem.core.ui.extensions.TextReference
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.stringReference
-import com.tangem.core.ui.extensions.wrappedList
import com.tangem.core.ui.message.BottomSheetMessage
import com.tangem.core.ui.message.DialogMessage
import com.tangem.core.ui.message.bottomSheetMessage
import com.tangem.core.ui.res.generated.icons.Icons
-import com.tangem.core.ui.res.generated.icons.ic_error_28
import com.tangem.core.ui.res.generated.icons.ic_snowflake_20
import com.tangem.core.ui.res.generated.icons.ic_sun_20
import com.tangem.features.tangempay.entity.TangemPayDetailsErrorType
@@ -151,26 +149,6 @@ internal object TangemPayMessagesFactory {
}
}
- fun createMaximumCardsIssued(maxCards: Int): BottomSheetMessage {
- return bottomSheetMessage {
- infoBlock {
- vector(Icons.ic_error_28) {
- type = MessageBottomSheetUM.Vector.Type.Attention
- backgroundType = MessageBottomSheetUM.Vector.BackgroundType.Attention
- }
- title = resourceReference(R.string.tangempay_maximum_cards_issued_title)
- body = resourceReference(
- id = R.string.tangempay_maximum_cards_issued_description,
- formatArgs = wrappedList(maxCards),
- )
- }
- primaryButton {
- text = resourceReference(R.string.common_got_it)
- onClick { closeBs() }
- }
- }
- }
-
// TODO v_rodionov: #[REDACTED_TASK_KEY] fix hardcoded strings
fun createStayOnPlanMessage(
planName: String,
diff --git a/features/tangempay/details/impl/src/test/kotlin/com/tangem/features/tangempay/model/transformers/CashbackBlockTransformerTest.kt b/features/tangempay/details/impl/src/test/kotlin/com/tangem/features/tangempay/model/transformers/CashbackBlockTransformerTest.kt
index de59f0cabf..e4496e5896 100644
--- a/features/tangempay/details/impl/src/test/kotlin/com/tangem/features/tangempay/model/transformers/CashbackBlockTransformerTest.kt
+++ b/features/tangempay/details/impl/src/test/kotlin/com/tangem/features/tangempay/model/transformers/CashbackBlockTransformerTest.kt
@@ -153,6 +153,7 @@ internal class CashbackBlockTransformerTest {
fiatBalance = TextReference.EMPTY,
isBalanceFlickering = false,
isNegative = false,
+ isInactive = false,
),
addToWalletBlockState = null,
isBalanceHidden = false,
diff --git a/features/tangempay/details/impl/src/test/kotlin/com/tangem/features/tangempay/model/transformers/TangemPayActionButtonsTransformerTest.kt b/features/tangempay/details/impl/src/test/kotlin/com/tangem/features/tangempay/model/transformers/TangemPayActionButtonsTransformerTest.kt
index 1aa9be44ee..5bc45fefbd 100644
--- a/features/tangempay/details/impl/src/test/kotlin/com/tangem/features/tangempay/model/transformers/TangemPayActionButtonsTransformerTest.kt
+++ b/features/tangempay/details/impl/src/test/kotlin/com/tangem/features/tangempay/model/transformers/TangemPayActionButtonsTransformerTest.kt
@@ -61,6 +61,7 @@ internal class TangemPayActionButtonsTransformerTest {
fiatBalance = TextReference.EMPTY,
isBalanceFlickering = false,
isNegative = false,
+ isInactive = false,
),
addToWalletBlockState = null,
isBalanceHidden = false,
diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/analytics/utils/WalletTangemPayAnalyticsEventSender.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/analytics/utils/WalletTangemPayAnalyticsEventSender.kt
index 373932d2ef..dca7383aaf 100644
--- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/analytics/utils/WalletTangemPayAnalyticsEventSender.kt
+++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/analytics/utils/WalletTangemPayAnalyticsEventSender.kt
@@ -27,6 +27,7 @@ internal class WalletTangemPayAnalyticsEventSender @Inject constructor(
PaymentAccountStatusValue.NotCreated,
is PaymentAccountStatusValue.UnderReview,
is PaymentAccountStatusValue.AwaitingPlanSelection,
+ is PaymentAccountStatusValue.Inactive,
is PaymentAccountStatusValue.Deactivated,
-> return
}
diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetMultiWalletWarningsFactory.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetMultiWalletWarningsFactory.kt
index f0c06b23eb..5860f51c0d 100644
--- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetMultiWalletWarningsFactory.kt
+++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetMultiWalletWarningsFactory.kt
@@ -237,6 +237,7 @@ internal class GetMultiWalletWarningsFactory @Inject constructor(
is PaymentAccountStatusValue.Error.ExposedDevice,
is PaymentAccountStatusValue.IssuingCard,
is PaymentAccountStatusValue.AwaitingPlanSelection,
+ is PaymentAccountStatusValue.Inactive,
is PaymentAccountStatusValue.Loaded,
is PaymentAccountStatusValue.Loading,
is PaymentAccountStatusValue.UnderReview,
diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetWalletNotificationsFactory.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetWalletNotificationsFactory.kt
index e1f9cf149f..91f16d234e 100644
--- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetWalletNotificationsFactory.kt
+++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetWalletNotificationsFactory.kt
@@ -285,6 +285,7 @@ internal class GetWalletNotificationsFactory @Inject constructor(
is PaymentAccountStatusValue.Error.ExposedDevice,
is PaymentAccountStatusValue.IssuingCard,
is PaymentAccountStatusValue.AwaitingPlanSelection,
+ is PaymentAccountStatusValue.Inactive,
is PaymentAccountStatusValue.Loaded,
is PaymentAccountStatusValue.Loading,
is PaymentAccountStatusValue.UnderReview,
diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/converter/TangemPayMainBlockConverter.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/converter/TangemPayMainBlockConverter.kt
index 2d99c25335..6800980dd9 100644
--- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/converter/TangemPayMainBlockConverter.kt
+++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/converter/TangemPayMainBlockConverter.kt
@@ -38,6 +38,9 @@ internal class TangemPayMainBlockConverter(
is PaymentAccountStatusValue.AwaitingPlanSelection -> TangemPayMainUM.SelectPlan(
onClick = { tangemPayClickIntents.onSelectPlanClicked(value) },
)
+ is PaymentAccountStatusValue.Inactive -> TangemPayMainUM.IssuingCard(
+ onClick = { tangemPayClickIntents.openDetails(value) },
+ )
is PaymentAccountStatusValue.UnderReview -> TangemPayMainUM.UnderReview(
subtitle = when (statusValue.kycStatus) {
KycStatus.REJECTED -> TextReference.Res(R.string.tangempay_kyc_has_failed)