Updated on 2026-08-14

This commit is contained in:
Tangem 2024-11-17 16:16:07 +03:00
parent d19b3f2018
commit ffd5170370
3 changed files with 11 additions and 11 deletions

View file

@ -27,6 +27,10 @@ sealed class GiveTxPermissionState {
val cancelButton: CancelPermissionButton,
val onChangeApproveType: ((ApproveType) -> Unit)? = null,
) : GiveTxPermissionState()
fun GiveTxPermissionState.getApproveTypeOrNull(): ApproveType? {
return (this as? ReadyForRequest)?.approveType
}
}
enum class ApproveType(val text: TextReference) {

View file

@ -1,6 +1,5 @@
package com.tangem.feature.swap.viewmodels
import com.tangem.common.ui.bottomsheet.permission.state.ApproveType
import com.tangem.domain.tokens.model.CryptoCurrencyStatus
import com.tangem.feature.swap.domain.models.domain.SwapDataModel
import com.tangem.feature.swap.domain.models.domain.SwapProvider
@ -16,7 +15,6 @@ data class SwapProcessDataState(
// Amount from input
val amount: String? = null,
val approveDataModel: RequestApproveStateData? = null,
val approveType: ApproveType? = null,
val swapDataModel: SwapDataModel? = null,
val selectedFee: TxFee? = null,
val tokensDataState: TokensDataStateExpress? = null,

View file

@ -10,6 +10,7 @@ import arrow.core.getOrElse
import com.tangem.common.routing.AppRoute
import com.tangem.common.routing.bundle.unbundle
import com.tangem.common.ui.bottomsheet.permission.state.ApproveType
import com.tangem.common.ui.bottomsheet.permission.state.GiveTxPermissionState.InProgress.getApproveTypeOrNull
import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.core.analytics.models.AnalyticsParam
import com.tangem.core.analytics.models.Basic
@ -512,10 +513,7 @@ internal class SwapViewModel @Inject constructor(
swapDataModel: SwapDataModel?,
) {
dataState = if (permissionState is PermissionDataState.PermissionReadyForRequest) {
dataState.copy(
approveDataModel = permissionState.requestApproveData,
approveType = dataState.approveType ?: ApproveType.UNLIMITED,
)
dataState.copy(approveDataModel = permissionState.requestApproveData)
} else {
dataState.copy(
swapDataModel = swapDataModel,
@ -655,9 +653,10 @@ internal class SwapViewModel @Inject constructor(
val approveDataModel = requireNotNull(dataState.approveDataModel) {
"dataState.approveDataModel.spenderAddress shouldn't be null"
}
val approveType = requireNotNull(dataState.approveType?.toDomainApproveType()) {
"uiState.permissionState should not be null"
}
val approveType =
requireNotNull(uiState.permissionState.getApproveTypeOrNull()?.toDomainApproveType()) {
"uiState.permissionState should not be null"
}
val feeForPermission = when (val fee = approveDataModel.fee) {
TxFeeState.Empty -> {
makeDefaultAlert(resourceReference(R.string.swapping_fee_estimation_error_text))
@ -1008,7 +1007,6 @@ internal class SwapViewModel @Inject constructor(
onAmountSelected = { onAmountSelected(it) },
onChangeApproveType = { approveType ->
uiState = stateBuilder.updateApproveType(uiState, approveType)
dataState = dataState.copy(approveType = approveType)
},
onClickFee = {
val selectedFee = dataState.selectedFee?.feeType ?: FeeType.NORMAL
@ -1228,7 +1226,7 @@ internal class SwapViewModel @Inject constructor(
private fun sendPermissionApproveClickedEvent() {
val sendTokenSymbol = dataState.fromCryptoCurrency?.currency?.symbol
val receiveTokenSymbol = dataState.toCryptoCurrency?.currency?.symbol
val approveType = dataState.approveType
val approveType = uiState.permissionState.getApproveTypeOrNull()
if (sendTokenSymbol != null && receiveTokenSymbol != null && approveType != null) {
analyticsEventHandler.send(
SwapEvents.ButtonPermissionApproveClicked(