Updated on 2026-08-14
This commit is contained in:
parent
b210d3b7fd
commit
c9804fa0ed
16 changed files with 166 additions and 51 deletions
|
|
@ -55,5 +55,7 @@ sealed class SwapTransactionState {
|
|||
data class ExpressError(val error: ExpressDataError) : Error()
|
||||
|
||||
data object UnknownError : Error()
|
||||
|
||||
data class TangemPayWithdrawalError(val txId: String) : Error()
|
||||
}
|
||||
}
|
||||
|
|
@ -28,6 +28,9 @@ internal class SwapTransactionErrorStateConverter(
|
|||
)
|
||||
}
|
||||
SwapTransactionState.Error.UnknownError -> SwapAlertUM.GenericError(onDismiss)
|
||||
is SwapTransactionState.Error.TangemPayWithdrawalError -> SwapAlertUM.GenericError(
|
||||
onConfirmClick = { onSupportClick(value.txId) },
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -38,6 +38,7 @@ import com.tangem.domain.models.currency.CryptoCurrency
|
|||
import com.tangem.domain.models.currency.CryptoCurrencyStatus
|
||||
import com.tangem.domain.models.network.Network
|
||||
import com.tangem.domain.models.wallet.UserWalletId
|
||||
import com.tangem.domain.pay.WithdrawalResult
|
||||
import com.tangem.domain.promo.GetStoryContentUseCase
|
||||
import com.tangem.domain.promo.ShouldShowStoriesUseCase
|
||||
import com.tangem.domain.promo.models.StoryContentIds
|
||||
|
|
@ -806,31 +807,38 @@ internal class SwapModel @Inject constructor(
|
|||
)
|
||||
.onLeft {
|
||||
startLoadingQuotesFromLastState()
|
||||
makeDefaultAlert()
|
||||
onTangemPayWithdrawalError(swapTransactionState.storeData.txExternalId)
|
||||
}
|
||||
.onRight {
|
||||
val txUrl = swapTransactionState.storeData.txExternalUrl
|
||||
swapInteractor.storeSwapTransaction(
|
||||
currencyToSend = swapTransactionState.storeData.currencyToSend,
|
||||
currencyToGet = swapTransactionState.storeData.currencyToGet,
|
||||
fromAccount = swapTransactionState.storeData.fromAccount,
|
||||
toAccount = swapTransactionState.storeData.toAccount,
|
||||
amount = swapTransactionState.storeData.amount,
|
||||
swapProvider = swapTransactionState.storeData.swapProvider,
|
||||
swapDataModel = swapTransactionState.storeData.swapDataModel,
|
||||
txExternalUrl = txUrl,
|
||||
timestamp = System.currentTimeMillis(),
|
||||
txExternalId = swapTransactionState.storeData.txExternalId,
|
||||
averageDuration = null,
|
||||
)
|
||||
uiState = stateBuilder.createTangemPayWithdrawalSuccessState(
|
||||
uiState = uiState,
|
||||
swapTransactionState = swapTransactionState,
|
||||
dataState = dataState,
|
||||
txUrl = txUrl.orEmpty(),
|
||||
onExploreClick = { if (txUrl != null) urlOpener.openUrl(txUrl) },
|
||||
)
|
||||
swapRouter.openScreen(SwapNavScreen.Success)
|
||||
.onRight { result: WithdrawalResult ->
|
||||
when (result) {
|
||||
WithdrawalResult.Cancelled -> {
|
||||
startLoadingQuotesFromLastState()
|
||||
}
|
||||
WithdrawalResult.Success -> {
|
||||
val txUrl = swapTransactionState.storeData.txExternalUrl
|
||||
swapInteractor.storeSwapTransaction(
|
||||
currencyToSend = swapTransactionState.storeData.currencyToSend,
|
||||
currencyToGet = swapTransactionState.storeData.currencyToGet,
|
||||
fromAccount = swapTransactionState.storeData.fromAccount,
|
||||
toAccount = swapTransactionState.storeData.toAccount,
|
||||
amount = swapTransactionState.storeData.amount,
|
||||
swapProvider = swapTransactionState.storeData.swapProvider,
|
||||
swapDataModel = swapTransactionState.storeData.swapDataModel,
|
||||
txExternalUrl = txUrl,
|
||||
timestamp = System.currentTimeMillis(),
|
||||
txExternalId = swapTransactionState.storeData.txExternalId,
|
||||
averageDuration = null,
|
||||
)
|
||||
uiState = stateBuilder.createTangemPayWithdrawalSuccessState(
|
||||
uiState = uiState,
|
||||
swapTransactionState = swapTransactionState,
|
||||
dataState = dataState,
|
||||
txUrl = txUrl.orEmpty(),
|
||||
onExploreClick = { if (txUrl != null) urlOpener.openUrl(txUrl) },
|
||||
)
|
||||
swapRouter.openScreen(SwapNavScreen.Success)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1627,6 +1635,29 @@ internal class SwapModel @Inject constructor(
|
|||
analyticsEventHandler.send(event = event)
|
||||
}
|
||||
|
||||
private fun onTangemPayWithdrawalError(txId: String?) {
|
||||
uiState = stateBuilder.createErrorTransactionAlert(
|
||||
uiState = uiState,
|
||||
error = SwapTransactionState.Error.TangemPayWithdrawalError(txId.orEmpty()),
|
||||
onDismiss = { uiState = stateBuilder.clearAlert(uiState) },
|
||||
onSupportClick = ::onTangemPaySupportClick,
|
||||
isReverseSwapPossible = isReverseSwapPossible(),
|
||||
)
|
||||
}
|
||||
|
||||
private fun onTangemPaySupportClick(txId: String?) {
|
||||
modelScope.launch {
|
||||
val metaInfo = getWalletMetaInfoUseCase(userWallet.walletId)
|
||||
.getOrElse { error("CardInfo must be not null") }
|
||||
val email = FeedbackEmailType.Visa.Withdrawal(
|
||||
walletMetaInfo = metaInfo,
|
||||
providerName = dataState.selectedProvider?.name.orEmpty(),
|
||||
txId = txId.orEmpty(),
|
||||
)
|
||||
sendFeedbackEmailUseCase(email)
|
||||
}
|
||||
}
|
||||
|
||||
private fun onFailedTxEmailClick(errorMessage: String) {
|
||||
modelScope.launch {
|
||||
val transaction = dataState.swapDataModel?.transaction
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue