Updated on 2026-08-14
This commit is contained in:
parent
8a749438bf
commit
8098476fde
15 changed files with 459 additions and 180 deletions
|
|
@ -7,7 +7,7 @@ import com.tangem.core.decompose.context.AppComponentContext
|
|||
import com.tangem.core.decompose.model.getOrCreateModel
|
||||
import com.tangem.core.ui.decompose.ComposableBottomSheetComponent
|
||||
import com.tangem.domain.models.wallet.UserWalletId
|
||||
import com.tangem.domain.pay.model.TangemPayReissueOrderInfo
|
||||
import com.tangem.domain.pay.model.TangemPayOrderInfo
|
||||
import com.tangem.features.tangempay.model.TangemPayReissueCardModel
|
||||
import com.tangem.features.tangempay.ui.TangemPayReissueCardContent
|
||||
|
||||
|
|
@ -34,7 +34,7 @@ internal class TangemPayReissueCardComponent(
|
|||
}
|
||||
|
||||
internal interface ReissueCardListener {
|
||||
fun onReissueOrderCreate(order: TangemPayReissueOrderInfo)
|
||||
fun onReissueOrderCreate(order: TangemPayOrderInfo)
|
||||
fun onDismissReissueCard()
|
||||
fun onClickAddFunds()
|
||||
}
|
||||
|
|
@ -19,6 +19,7 @@ import com.tangem.core.ui.format.bigdecimal.format
|
|||
import com.tangem.core.ui.format.bigdecimal.getJavaCurrencyByCode
|
||||
import com.tangem.core.ui.format.bigdecimal.optionalDecimals
|
||||
import com.tangem.core.ui.message.SnackbarMessage
|
||||
import com.tangem.core.ui.test.TangemPayTestTags
|
||||
import com.tangem.domain.models.StatusSource
|
||||
import com.tangem.domain.models.TokenReceiveConfig
|
||||
import com.tangem.domain.models.account.PaymentAccountStatusValue
|
||||
|
|
@ -28,12 +29,12 @@ import com.tangem.domain.models.pay.TangemPayCard
|
|||
import com.tangem.domain.models.pay.TangemPayCardLimitPeriod
|
||||
import com.tangem.domain.pay.flow.PaymentAccountStatusSupplier
|
||||
import com.tangem.domain.pay.model.OrderStatus
|
||||
import com.tangem.domain.pay.model.TangemPayReissueOrderInfo
|
||||
import com.tangem.domain.pay.model.TangemPayOrderInfo
|
||||
import com.tangem.domain.pay.model.TangemPayTopUpData
|
||||
import com.tangem.domain.pay.repository.TangemPayCardDetailsRepository
|
||||
import com.tangem.domain.pay.repository.TangemPayReissueCardRepository
|
||||
import com.tangem.domain.pay.usecase.ChangeCardFrozenStateUseCase
|
||||
import com.tangem.domain.tangempay.TangemPayAnalyticsEvents
|
||||
import com.tangem.domain.visa.model.TangemPayCardFrozenState
|
||||
import com.tangem.features.tangempay.components.AddFundsListener
|
||||
import com.tangem.features.tangempay.components.ReissueCardListener
|
||||
import com.tangem.features.tangempay.components.TangemPayCardPageComponent
|
||||
|
|
@ -63,12 +64,14 @@ internal class TangemPayCardPageModel @Inject constructor(
|
|||
private val cardDetailsRepository: TangemPayCardDetailsRepository,
|
||||
private val uiMessageSender: UiMessageSender,
|
||||
private val reissueCardRepository: TangemPayReissueCardRepository,
|
||||
private val changeCardFrozenStateUseCase: ChangeCardFrozenStateUseCase,
|
||||
) : Model(), ViewPinListener, ReissueCardListener, AddFundsListener {
|
||||
|
||||
private val params: TangemPayCardPageComponent.Params = paramsContainer.require()
|
||||
|
||||
private val addToWalletBannerJobHolder = JobHolder()
|
||||
private val addFundsJobHolder = JobHolder()
|
||||
private val frozenStateJobHolder = JobHolder()
|
||||
|
||||
val uiState: StateFlow<TangemPayCardPageUM>
|
||||
field = MutableStateFlow(
|
||||
|
|
@ -119,12 +122,18 @@ internal class TangemPayCardPageModel @Inject constructor(
|
|||
TangemPayCardPageSetting(
|
||||
title = TextReference.Res(R.string.tangempay_card_details_change_pin),
|
||||
onSettingClick = { onClickChangePIN(card.hasPinCode) },
|
||||
testTag = com.tangem.core.ui.test.TangemPayTestTags.CHANGE_PIN_ROW,
|
||||
testTag = TangemPayTestTags.CHANGE_PIN_ROW,
|
||||
),
|
||||
TangemPayCardPageSetting(
|
||||
title = TextReference.Res(R.string.tangempay_card_details_freeze_card),
|
||||
title = TextReference.Res(
|
||||
if (card.isFrozen) {
|
||||
R.string.tangempay_card_details_unfreeze_card
|
||||
} else {
|
||||
R.string.tangempay_card_details_freeze_card
|
||||
},
|
||||
),
|
||||
onSettingClick = { onClickFreezeOrUnfreezeCard(card.isFrozen) },
|
||||
testTag = com.tangem.core.ui.test.TangemPayTestTags.FREEZE_CARD_ROW,
|
||||
testTag = TangemPayTestTags.FREEZE_CARD_ROW,
|
||||
),
|
||||
TangemPayCardPageSetting(
|
||||
title = TextReference.Res(R.string.tangempay_card_details_reissue_card),
|
||||
|
|
@ -152,6 +161,8 @@ internal class TangemPayCardPageModel @Inject constructor(
|
|||
}
|
||||
|
||||
private fun onClickFreezeOrUnfreezeCard(isFrozen: Boolean) {
|
||||
if (frozenStateJobHolder.isActive) return
|
||||
|
||||
val message = if (isFrozen) {
|
||||
TangemPayMessagesFactory.createUnfreezeCardMessage(onUnfreezeClicked = ::unfreezeCard)
|
||||
} else {
|
||||
|
|
@ -165,7 +176,7 @@ internal class TangemPayCardPageModel @Inject constructor(
|
|||
bottomSheetNavigation.activate(TangemPayCardNavigation.ReissueCard)
|
||||
}
|
||||
|
||||
override fun onReissueOrderCreate(order: TangemPayReissueOrderInfo) {
|
||||
override fun onReissueOrderCreate(order: TangemPayOrderInfo) {
|
||||
bottomSheetNavigation.dismiss()
|
||||
onReissueOrderStatusReceived(order.orderStatus)
|
||||
if (order.orderStatus != OrderStatus.CANCELED) {
|
||||
|
|
@ -238,40 +249,34 @@ internal class TangemPayCardPageModel @Inject constructor(
|
|||
|
||||
private fun freezeCard() {
|
||||
modelScope.launch {
|
||||
cardDetailsRepository.freezeCard(
|
||||
changeCardFrozenStateUseCase(
|
||||
userWalletId = params.userWalletId,
|
||||
cardId = params.config.cardId,
|
||||
isFreezing = true,
|
||||
).onLeft {
|
||||
val message = SnackbarMessage(resourceReference(R.string.tangem_pay_freeze_card_failed))
|
||||
uiMessageSender.send(message)
|
||||
}.onRight { state ->
|
||||
val message = if (state == TangemPayCardFrozenState.Frozen) {
|
||||
SnackbarMessage(resourceReference(R.string.tangem_pay_freeze_card_success))
|
||||
} else {
|
||||
SnackbarMessage(resourceReference(R.string.tangem_pay_freeze_card_failed))
|
||||
}
|
||||
}.onRight {
|
||||
val message = SnackbarMessage(resourceReference(R.string.tangem_pay_freeze_card_success))
|
||||
uiMessageSender.send(message)
|
||||
}
|
||||
}
|
||||
}.saveIn(frozenStateJobHolder)
|
||||
}
|
||||
|
||||
private fun unfreezeCard() {
|
||||
modelScope.launch {
|
||||
cardDetailsRepository.unfreezeCard(
|
||||
changeCardFrozenStateUseCase(
|
||||
userWalletId = params.userWalletId,
|
||||
cardId = params.config.cardId,
|
||||
isFreezing = false,
|
||||
).onLeft {
|
||||
val message = SnackbarMessage(resourceReference(R.string.tangem_pay_unfreeze_card_failed))
|
||||
uiMessageSender.send(message)
|
||||
}.onRight { state ->
|
||||
val message = if (state == TangemPayCardFrozenState.Unfrozen) {
|
||||
SnackbarMessage(resourceReference(R.string.tangem_pay_unfreeze_card_success))
|
||||
} else {
|
||||
SnackbarMessage(resourceReference(R.string.tangem_pay_unfreeze_card_failed))
|
||||
}
|
||||
}.onRight {
|
||||
val message = SnackbarMessage(resourceReference(R.string.tangem_pay_unfreeze_card_success))
|
||||
uiMessageSender.send(message)
|
||||
}
|
||||
}
|
||||
}.saveIn(frozenStateJobHolder)
|
||||
}
|
||||
|
||||
private fun fetchAddToWalletBanner() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue