Updated on 2026-08-14

This commit is contained in:
Tangem 2024-06-06 17:07:45 +05:00
parent 89d2242502
commit 0f6476b1ca
3 changed files with 68 additions and 5 deletions

View file

@ -1,12 +1,18 @@
package com.tangem.tap.common.redux.legacy
import com.tangem.domain.redux.LegacyAction
import com.tangem.domain.tokens.utils.convertToAmount
import com.tangem.tap.common.extensions.inject
import com.tangem.tap.common.feedback.RateCanBeBetterEmail
import com.tangem.tap.common.feedback.SendTransactionFailedEmail
import com.tangem.tap.common.redux.AppState
import com.tangem.tap.common.redux.global.GlobalAction
import com.tangem.tap.proxy.redux.DaggerGraphState
import com.tangem.tap.scope
import com.tangem.tap.store
import kotlinx.coroutines.launch
import org.rekotlin.Middleware
import java.math.BigDecimal
internal object LegacyMiddleware {
val legacyMiddleware: Middleware<AppState> = { _, _ ->
@ -22,9 +28,29 @@ internal object LegacyMiddleware {
)
}
is LegacyAction.SendEmailTransactionFailed -> {
store.state.globalState.feedbackManager?.sendEmail(
SendTransactionFailedEmail(action.errorMessage),
)
if (store.inject(DaggerGraphState::feedbackManagerFeatureToggles).isLocalLogsEnabled) {
store.state.globalState.feedbackManager?.sendEmail(
SendTransactionFailedEmail(action.errorMessage),
)
} else {
scope.launch {
store.inject(DaggerGraphState::walletManagersFacade)
.getOrCreateWalletManager(
userWalletId = action.userWalletId,
network = action.cryptoCurrency.network,
)?.let { walletManager ->
store.state.globalState.feedbackManager?.infoHolder?.updateOnSendError(
walletManager = walletManager,
amountToSend = action.amount.convertToAmount(action.cryptoCurrency),
feeAmount = action.fee.convertToAmount(action.cryptoCurrency),
destinationAddress = action.destinationAddress,
)
}
store.state.globalState.feedbackManager?.sendEmail(
SendTransactionFailedEmail(action.errorMessage),
)
}
}
}
}
next(action)

View file

@ -1,7 +1,10 @@
package com.tangem.domain.redux
import com.tangem.domain.models.scan.ScanResponse
import com.tangem.domain.tokens.model.CryptoCurrency
import com.tangem.domain.wallets.models.UserWalletId
import org.rekotlin.Action
import java.math.BigDecimal
sealed interface LegacyAction : Action {
@ -16,6 +19,20 @@ sealed interface LegacyAction : Action {
/**
* Sending an email to support when sending transaction failed
*
* @param cryptoCurrency current currency
* @param userWalletId selected user wallet id
* @param amount sending amount
* @param fee spending fee
* @param destinationAddress recipient address
* @param errorMessage sending error
*/
data class SendEmailTransactionFailed(val errorMessage: String) : LegacyAction
data class SendEmailTransactionFailed(
val cryptoCurrency: CryptoCurrency,
val userWalletId: UserWalletId,
val amount: BigDecimal,
val fee: BigDecimal,
val destinationAddress: String,
val errorMessage: String,
) : LegacyAction
}

View file

@ -541,7 +541,27 @@ internal class SendViewModel @Inject constructor(
}
override fun onFailedTxEmailClick(errorMessage: String) {
reduxStateHolder.dispatch(LegacyAction.SendEmailTransactionFailed(errorMessage))
val recipient = uiState.recipientState?.addressTextField?.value ?: return
val feeValue = uiState.feeState?.fee?.amount?.value ?: return
val amountValue = uiState.amountState?.amountTextField?.cryptoAmount?.value ?: return
val receivingAmount = checkAndCalculateSubtractedAmount(
isAmountSubtractAvailable = isAmountSubtractAvailable,
cryptoCurrencyStatus = cryptoCurrencyStatus,
amountValue = amountValue,
feeValue = feeValue,
reduceAmountBy = uiState.sendState?.reduceAmountBy ?: BigDecimal.ZERO,
)
reduxStateHolder.dispatch(
LegacyAction.SendEmailTransactionFailed(
cryptoCurrency = cryptoCurrency,
userWalletId = userWalletId,
amount = receivingAmount,
fee = feeValue,
destinationAddress = recipient,
errorMessage = errorMessage,
),
)
}
override fun onTokenDetailsClick(userWalletId: UserWalletId, currency: CryptoCurrency) =