Updated on 2026-08-14

This commit is contained in:
Tangem 2026-01-30 15:42:03 +07:00
commit cae7844408
49 changed files with 537 additions and 273 deletions

View file

@ -40,6 +40,7 @@ import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
import timber.log.Timber
@Suppress("LongParameterList")
internal class FeeSelectorLogic @AssistedInject constructor(
@ -122,6 +123,7 @@ internal class FeeSelectorLogic @AssistedInject constructor(
CommonSendFeeAnalyticEvents.CustomFeeButtonClicked(
categoryName = params.analyticsCategoryName,
blockchain = params.cryptoCurrencyStatus.currency.network.name,
token = params.cryptoCurrencyStatus.currency.symbol,
),
)
}
@ -265,10 +267,21 @@ internal class FeeSelectorLogic @AssistedInject constructor(
private suspend fun populateExtendedFee(
fee: TransactionFeeExtended,
): Either<GetFeeError, LoadedFeeResult.Extended> = either {
val selectedToken = getSelectedTokenStatus(fee.feeTokenId).bind()
val availableTokens = getAvailableFeeTokens().fold(
ifLeft = { error ->
Timber.e("Failed to get available fee tokens: $error")
if (selectedToken.currency !is CryptoCurrency.Coin) {
raise(error)
}
emptyList()
},
ifRight = { it },
)
LoadedFeeResult.Extended(
fee = fee,
selectedToken = getSelectedTokenStatus(fee.feeTokenId).bind(),
availableTokens = getAvailableFeeTokens().bind(),
selectedToken = selectedToken,
availableTokens = availableTokens,
)
}

View file

@ -86,6 +86,8 @@ internal class FeeSelectorModel @Inject constructor(
CommonSendAnalyticEvents.FeeSummaryScreenOpened(
categoryName = params.analyticsCategoryName,
source = params.analyticsSendSource,
blockchain = params.cryptoCurrencyStatus.currency.network.name,
token = params.cryptoCurrencyStatus.currency.symbol,
),
)
}
@ -95,6 +97,8 @@ internal class FeeSelectorModel @Inject constructor(
CommonSendAnalyticEvents.FeeScreenOpened(
categoryName = params.analyticsCategoryName,
source = params.analyticsSendSource,
blockchain = params.cryptoCurrencyStatus.currency.network.name,
token = params.cryptoCurrencyStatus.currency.symbol,
),
)
}
@ -105,6 +109,7 @@ internal class FeeSelectorModel @Inject constructor(
categoryName = params.analyticsCategoryName,
source = params.analyticsSendSource,
availableTokens = getAvailableTokensString(),
blockchain = params.cryptoCurrencyStatus.currency.network.name,
),
)
}

View file

@ -5,6 +5,7 @@ import com.tangem.core.analytics.models.AnalyticsParam
import com.tangem.core.analytics.models.AnalyticsParam.Key.ACCOUNT_DERIVATION_FROM
import com.tangem.core.analytics.models.AnalyticsParam.Key.BLOCKCHAIN
import com.tangem.core.analytics.models.AnalyticsParam.Key.ENS_ADDRESS
import com.tangem.core.analytics.models.AnalyticsParam.Key.FEE_TOKEN
import com.tangem.core.analytics.models.AnalyticsParam.Key.FEE_TYPE
import com.tangem.core.analytics.models.AnalyticsParam.Key.NONCE
import com.tangem.core.analytics.models.AnalyticsParam.Key.TOKEN_PARAM
@ -42,6 +43,7 @@ internal sealed class SendAnalyticEvents(
AnalyticsParam.EmptyFull.Full -> true.toString().capitalize()
}
put(ENS_ADDRESS, ensAddress)
put(FEE_TOKEN, feeToken)
},
), AppsFlyerIncludedEvent