Updated on 2026-08-14

This commit is contained in:
Tangem 2026-06-09 15:25:00 +05:00
parent 5421e5eb69
commit 165bf516e6
256 changed files with 1098 additions and 1035 deletions

View file

@ -252,8 +252,8 @@ dependencies {
implementation(projects.features.tokendetails.impl)
implementation(projects.features.manageTokens.api)
implementation(projects.features.manageTokens.impl)
implementation(projects.features.sendV2.api)
implementation(projects.features.sendV2.impl)
implementation(projects.features.send.api)
implementation(projects.features.send.impl)
implementation(projects.features.qrScanning.api)
implementation(projects.features.qrScanning.impl)
implementation(projects.features.staking.api)

View file

@ -6,7 +6,7 @@ import com.tangem.core.ui.test.BaseButtonTestTags
import com.tangem.core.ui.test.FooterTestTags
import com.tangem.core.ui.test.SendAddressScreenTestTags
import com.tangem.core.ui.test.TopAppBarTestTags
import com.tangem.features.send.v2.impl.R
import com.tangem.features.send.impl.R
import io.github.kakaocup.compose.node.element.ComposeScreen
import io.github.kakaocup.compose.node.element.ComposeScreen.Companion.onComposeScreen
import io.github.kakaocup.compose.node.element.KNode

View file

@ -9,7 +9,7 @@ import io.github.kakaocup.compose.node.element.ComposeScreen
import io.github.kakaocup.compose.node.element.ComposeScreen.Companion.onComposeScreen
import io.github.kakaocup.compose.node.element.KNode
import io.github.kakaocup.kakao.common.utilities.getResourceString
import com.tangem.features.send.v2.impl.R as SendR
import com.tangem.features.send.impl.R as SendR
import androidx.compose.ui.test.hasText as withText
class SendPageObject(semanticsProvider: SemanticsNodeInteractionsProvider) :

View file

@ -31,9 +31,9 @@ import com.tangem.features.onramp.component.*
import com.tangem.features.pushnotifications.api.PushNotificationsComponent
import com.tangem.features.pushnotifications.api.PushNotificationsModelCallbacksStub
import com.tangem.features.pushnotifications.api.PushNotificationsParams
import com.tangem.features.send.v2.api.NFTSendComponent
import com.tangem.features.send.v2.api.SendComponent
import com.tangem.features.send.v2.api.SendEntryPointComponent
import com.tangem.features.send.api.NFTSendComponent
import com.tangem.features.send.api.SendComponent
import com.tangem.features.send.api.SendEntryPointComponent
import com.tangem.features.staking.api.StakingComponent
import com.tangem.features.swap.SwapComponent
import com.tangem.features.tangempay.components.TangemPayHotWalletOnboardingComponent

View file

@ -17,7 +17,7 @@ import com.tangem.features.onramp.deeplink.BuyDeepLinkHandler
import com.tangem.features.onramp.deeplink.OnrampDeepLinkHandler
import com.tangem.features.onramp.deeplink.SellDeepLinkHandler
import com.tangem.features.onramp.deeplink.SwapDeepLinkHandler
import com.tangem.features.send.v2.api.deeplink.SellRedirectDeepLinkHandler
import com.tangem.features.send.api.deeplink.SellRedirectDeepLinkHandler
import com.tangem.features.staking.api.deeplink.StakingDeepLinkHandler
import com.tangem.features.survey.deeplink.SurveyDeepLinkHandler
import com.tangem.features.tangempay.deeplink.OnboardVisaDeepLinkHandler

View file

@ -16,7 +16,7 @@ import com.tangem.features.onramp.deeplink.BuyDeepLinkHandler
import com.tangem.features.onramp.deeplink.OnrampDeepLinkHandler
import com.tangem.features.onramp.deeplink.SellDeepLinkHandler
import com.tangem.features.onramp.deeplink.SwapDeepLinkHandler
import com.tangem.features.send.v2.api.deeplink.SellRedirectDeepLinkHandler
import com.tangem.features.send.api.deeplink.SellRedirectDeepLinkHandler
import com.tangem.features.staking.api.deeplink.StakingDeepLinkHandler
import com.tangem.features.tangempay.deeplink.OnboardVisaDeepLinkHandler
import com.tangem.features.tangempay.deeplink.TangemPayMainDeepLinkHandler

View file

@ -45,7 +45,7 @@ dependencies {
// endregion
// region Project - Features API
implementation(projects.features.sendV2.api)
implementation(projects.features.send.api)
// endregion
// region Tangem SDKs

View file

@ -34,7 +34,7 @@ dependencies {
implementation(projects.domain.demo)
/** Api */
implementation(projects.features.sendV2.api)
implementation(projects.features.send.api)
/** DI */
implementation(deps.hilt.android)

View file

@ -13,7 +13,7 @@ dependencies {
/** Feature */
implementation(projects.features.approval.api)
implementation(projects.features.sendV2.api)
implementation(projects.features.send.api)
/** Core */
implementation(projects.core.configToggles)

View file

@ -17,10 +17,10 @@ import com.tangem.core.ui.res.TangemTheme
import com.tangem.features.approval.api.GiveApprovalComponent
import com.tangem.features.approval.impl.model.GiveApprovalModel
import com.tangem.features.approval.impl.ui.GiveApprovalContent
import com.tangem.features.send.v2.api.FeeSelectorBlockComponent
import com.tangem.features.send.v2.api.analytics.CommonSendAnalyticEvents
import com.tangem.features.send.v2.api.entity.FeeSelectorUM
import com.tangem.features.send.v2.api.params.FeeSelectorParams
import com.tangem.features.send.api.FeeSelectorBlockComponent
import com.tangem.features.send.api.analytics.CommonSendAnalyticEvents
import com.tangem.features.send.api.entity.FeeSelectorUM
import com.tangem.features.send.api.params.FeeSelectorParams
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject

View file

@ -33,10 +33,10 @@ import com.tangem.domain.transaction.usecase.gasless.GetFeeForGaslessUseCase
import com.tangem.domain.transaction.usecase.gasless.GetFeeForTokenUseCase
import com.tangem.domain.wallets.usecase.GetUserWalletUseCase
import com.tangem.features.approval.api.GiveApprovalComponent
import com.tangem.features.send.v2.api.callbacks.FeeSelectorModelCallback
import com.tangem.features.send.v2.api.entity.FeeItem
import com.tangem.features.send.v2.api.entity.FeeSelectorUM
import com.tangem.features.send.v2.api.subcomponents.feeSelector.FeeSelectorReloadTrigger
import com.tangem.features.send.api.callbacks.FeeSelectorModelCallback
import com.tangem.features.send.api.entity.FeeItem
import com.tangem.features.send.api.entity.FeeSelectorUM
import com.tangem.features.send.api.subcomponents.feeSelector.FeeSelectorReloadTrigger
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import com.tangem.utils.logging.TangemLogger
import kotlinx.coroutines.flow.MutableStateFlow

View file

@ -34,7 +34,7 @@ import com.tangem.core.ui.extensions.*
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.features.approval.impl.model.GiveApprovalUM
import com.tangem.features.send.v2.api.FeeSelectorBlockComponent
import com.tangem.features.send.api.FeeSelectorBlockComponent
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf

View file

@ -2,8 +2,8 @@ package com.tangem.features.approval.impl.ui
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import com.tangem.features.send.v2.api.FeeSelectorBlockComponent
import com.tangem.features.send.v2.api.entity.FeeSelectorUM
import com.tangem.features.send.api.FeeSelectorBlockComponent
import com.tangem.features.send.api.entity.FeeSelectorUM
internal class PreviewFeeSelectorBlockComponent : FeeSelectorBlockComponent {
override fun updateState(feeSelectorUM: FeeSelectorUM) {

View file

@ -26,7 +26,7 @@ import com.tangem.domain.transaction.usecase.gasless.GetFeeForGaslessUseCase
import com.tangem.domain.transaction.usecase.gasless.GetFeeForTokenUseCase
import com.tangem.domain.wallets.usecase.GetUserWalletUseCase
import com.tangem.features.approval.api.GiveApprovalComponent
import com.tangem.features.send.v2.api.subcomponents.feeSelector.FeeSelectorReloadTrigger
import com.tangem.features.send.api.subcomponents.feeSelector.FeeSelectorReloadTrigger
import com.tangem.utils.coroutines.TestingCoroutineDispatcherProvider
import io.mockk.coEvery
import io.mockk.coVerify

View file

@ -20,7 +20,7 @@ dependencies {
/* Project - API */
api(projects.features.feed.api)
api(projects.features.onramp.api)
api(projects.features.sendV2.api)
api(projects.features.send.api)
api(projects.features.tokenRecieve.api)
api(projects.features.wallet.api)
api(projects.features.account.api)

View file

@ -15,7 +15,7 @@ dependencies {
/* Project - API */
api(projects.features.markets.api)
api(projects.features.onramp.api)
api(projects.features.sendV2.api)
api(projects.features.send.api)
api(projects.features.tokenRecieve.api)
api(projects.features.wallet.api)
api(projects.features.account.api)

View file

@ -1,3 +0,0 @@
package com.tangem.features.send.v2.api
interface SendFeatureToggles

View file

@ -1,7 +0,0 @@
package com.tangem.features.send.v2.api.callbacks
import com.tangem.features.send.v2.api.entity.FeeSelectorUM
interface FeeSelectorModelCallback {
fun onFeeResult(feeSelectorUM: FeeSelectorUM)
}

View file

@ -1,11 +0,0 @@
package com.tangem.features.send.v2.api.subcomponents.notifications
import com.tangem.features.send.v2.api.SendNotificationsComponent.Params.NotificationData
interface SendNotificationsUpdateTrigger {
/** Trigger return callback with check result */
suspend fun callbackHasError(hasError: Boolean)
/** Trigger fee check reload */
suspend fun triggerUpdate(data: NotificationData)
}

View file

@ -1,12 +0,0 @@
package com.tangem.features.send.v2.feeselector.component
import com.tangem.features.send.v2.api.entity.FeeSelectorUM
import com.tangem.features.send.v2.api.params.FeeSelectorParams
import com.tangem.features.send.v2.feeselector.model.FeeSelectorIntents
import kotlinx.coroutines.flow.MutableStateFlow
internal class FeeSelectorComponentParams(
val parentParams: FeeSelectorParams.FeeSelectorDetailsParams,
val state: MutableStateFlow<FeeSelectorUM>,
val intents: FeeSelectorIntents,
)

View file

@ -1,13 +0,0 @@
package com.tangem.features.send.v2.sendnft.ui.state
import com.tangem.common.ui.navigationButtons.NavigationUM
import com.tangem.features.send.v2.api.entity.FeeSelectorUM
import com.tangem.features.send.v2.api.subcomponents.destination.entity.DestinationUM
import com.tangem.features.send.v2.common.ui.state.ConfirmUM
internal data class NFTSendUM(
val destinationUM: DestinationUM,
val feeSelectorUM: FeeSelectorUM,
val confirmUM: ConfirmUM,
val navigationUM: NavigationUM,
)

View file

@ -5,7 +5,7 @@ plugins {
}
android {
namespace = "com.tangem.features.send.v2.api"
namespace = "com.tangem.features.send.api"
}
dependencies {
/** Core */

View file

@ -1,9 +1,9 @@
package com.tangem.features.send.v2.api
package com.tangem.features.send.api
import com.tangem.core.decompose.context.AppComponentContext
import com.tangem.core.ui.decompose.ComposableContentComponent
import com.tangem.features.send.v2.api.entity.FeeSelectorUM
import com.tangem.features.send.v2.api.params.FeeSelectorParams
import com.tangem.features.send.api.entity.FeeSelectorUM
import com.tangem.features.send.api.params.FeeSelectorParams
interface FeeSelectorBlockComponent : ComposableContentComponent {

View file

@ -1,8 +1,8 @@
package com.tangem.features.send.v2.api
package com.tangem.features.send.api
import com.tangem.core.decompose.context.AppComponentContext
import com.tangem.core.ui.decompose.ComposableBottomSheetComponent
import com.tangem.features.send.v2.api.params.FeeSelectorParams
import com.tangem.features.send.api.params.FeeSelectorParams
interface FeeSelectorComponent : ComposableBottomSheetComponent {
interface Factory {

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.api
package com.tangem.features.send.api
import com.tangem.core.decompose.factory.ComponentFactory
import com.tangem.core.ui.decompose.ComposableContentComponent

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.api
package com.tangem.features.send.api
import com.tangem.core.decompose.factory.ComponentFactory
import com.tangem.core.ui.decompose.ComposableDialogComponent

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.api
package com.tangem.features.send.api
import com.tangem.core.decompose.factory.ComponentFactory
import com.tangem.core.ui.decompose.ComposableContentComponent

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.api
package com.tangem.features.send.api
import com.tangem.core.decompose.factory.ComponentFactory
import com.tangem.core.ui.decompose.ComposableContentComponent

View file

@ -0,0 +1,3 @@
package com.tangem.features.send.api
interface SendFeatureToggles

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.api
package com.tangem.features.send.api
import androidx.compose.foundation.lazy.LazyListScope
import androidx.compose.ui.Modifier

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.api.analytics
package com.tangem.features.send.api.analytics
import com.tangem.core.analytics.models.AnalyticsEvent
import com.tangem.core.analytics.models.AnalyticsParam.Key.BLOCKCHAIN

View file

@ -0,0 +1,7 @@
package com.tangem.features.send.api.callbacks
import com.tangem.features.send.api.entity.FeeSelectorUM
interface FeeSelectorModelCallback {
fun onFeeResult(feeSelectorUM: FeeSelectorUM)
}

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.api.deeplink
package com.tangem.features.send.api.deeplink
import kotlinx.coroutines.CoroutineScope

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.api.entity
package com.tangem.features.send.api.entity
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.api.entity
package com.tangem.features.send.api.entity
import androidx.compose.runtime.Immutable
import com.tangem.blockchain.common.Amount
@ -12,8 +12,7 @@ import com.tangem.domain.appcurrency.model.AppCurrency
import com.tangem.domain.models.currency.CryptoCurrencyStatus
import com.tangem.domain.transaction.error.GetFeeError
import com.tangem.domain.transaction.models.TransactionFeeExtended
import com.tangem.features.send.v2.api.R
import com.tangem.features.send.v2.api.entity.FeeItem.*
import com.tangem.features.send.api.R
import kotlinx.collections.immutable.ImmutableList
import java.math.BigDecimal
import java.math.BigInteger
@ -46,12 +45,12 @@ sealed class FeeSelectorUM {
fun toAnalyticType(): AnalyticsParam.FeeType = when (fees) {
is TransactionFee.Single -> AnalyticsParam.FeeType.Fixed
is TransactionFee.Choosable -> when (selectedFeeItem) {
is Suggested,
is Custom,
is FeeItem.Suggested,
is FeeItem.Custom,
-> AnalyticsParam.FeeType.Custom
is Fast -> AnalyticsParam.FeeType.Max
is Market, is FeeItem.Loading -> AnalyticsParam.FeeType.Normal
is Slow -> AnalyticsParam.FeeType.Min
is FeeItem.Fast -> AnalyticsParam.FeeType.Max
is FeeItem.Market, is FeeItem.Loading -> AnalyticsParam.FeeType.Normal
is FeeItem.Slow -> AnalyticsParam.FeeType.Min
}
}
}

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.api.entity
package com.tangem.features.send.api.entity
sealed class PredefinedValues {
data object Empty : PredefinedValues()

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.api.entry
package com.tangem.features.send.api.entry
import com.tangem.core.decompose.navigation.Route

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.api.params
package com.tangem.features.send.api.params
import arrow.core.Either
import com.tangem.blockchain.common.transaction.Fee
@ -8,9 +8,9 @@ import com.tangem.domain.models.currency.CryptoCurrencyStatus
import com.tangem.domain.models.wallet.UserWalletId
import com.tangem.domain.transaction.error.GetFeeError
import com.tangem.domain.transaction.models.TransactionFeeExtended
import com.tangem.features.send.v2.api.analytics.CommonSendAnalyticEvents
import com.tangem.features.send.v2.api.callbacks.FeeSelectorModelCallback
import com.tangem.features.send.v2.api.entity.FeeSelectorUM
import com.tangem.features.send.api.analytics.CommonSendAnalyticEvents
import com.tangem.features.send.api.callbacks.FeeSelectorModelCallback
import com.tangem.features.send.api.entity.FeeSelectorUM
sealed class FeeSelectorParams {
abstract val state: FeeSelectorUM

View file

@ -1,11 +1,11 @@
package com.tangem.features.send.v2.api.subcomponents.amount.analytics
package com.tangem.features.send.api.subcomponents.amount.analytics
import com.tangem.core.analytics.models.AnalyticsEvent
import com.tangem.core.analytics.models.AnalyticsParam.Key.BLOCKCHAIN
import com.tangem.core.analytics.models.AnalyticsParam.Key.SOURCE
import com.tangem.core.analytics.models.AnalyticsParam.Key.TOKEN_PARAM
import com.tangem.core.analytics.models.AnalyticsParam.Key.TYPE
import com.tangem.features.send.v2.api.analytics.CommonSendAnalyticEvents
import com.tangem.features.send.api.analytics.CommonSendAnalyticEvents
sealed class CommonSendAmountAnalyticEvents(
category: String,

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.api.subcomponents.destination
package com.tangem.features.send.api.subcomponents.destination
/**
* Common route for destination

View file

@ -1,8 +1,8 @@
package com.tangem.features.send.v2.api.subcomponents.destination
package com.tangem.features.send.api.subcomponents.destination
import com.tangem.core.decompose.context.AppComponentContext
import com.tangem.core.ui.decompose.ComposableContentComponent
import com.tangem.features.send.v2.api.subcomponents.destination.entity.DestinationUM
import com.tangem.features.send.api.subcomponents.destination.entity.DestinationUM
interface SendDestinationBlockComponent : ComposableContentComponent {

View file

@ -1,9 +1,9 @@
package com.tangem.features.send.v2.api.subcomponents.destination
package com.tangem.features.send.api.subcomponents.destination
import com.tangem.common.ui.navigationButtons.NavigationModelCallback
import com.tangem.core.decompose.factory.ComponentFactory
import com.tangem.core.ui.decompose.ComposableContentComponent
import com.tangem.features.send.v2.api.subcomponents.destination.entity.DestinationUM
import com.tangem.features.send.api.subcomponents.destination.entity.DestinationUM
interface SendDestinationComponent : ComposableContentComponent {

View file

@ -1,11 +1,11 @@
package com.tangem.features.send.v2.api.subcomponents.destination
package com.tangem.features.send.api.subcomponents.destination
import com.tangem.core.ui.extensions.TextReference
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.wallet.UserWalletId
import com.tangem.features.send.v2.api.analytics.CommonSendAnalyticEvents
import com.tangem.features.send.v2.api.entity.PredefinedValues
import com.tangem.features.send.v2.api.subcomponents.destination.entity.DestinationUM
import com.tangem.features.send.api.analytics.CommonSendAnalyticEvents
import com.tangem.features.send.api.entity.PredefinedValues
import com.tangem.features.send.api.subcomponents.destination.entity.DestinationUM
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.StateFlow

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.api.subcomponents.destination.entity
package com.tangem.features.send.api.subcomponents.destination.entity
import androidx.annotation.DrawableRes
import androidx.compose.runtime.Immutable
@ -11,8 +11,8 @@ import com.tangem.domain.models.wallet.UserWalletId
@Immutable
data class DestinationRecipientListUM(
val id: String,
val title: TextReference = TextReference.Companion.EMPTY,
val subtitle: TextReference = TextReference.Companion.EMPTY,
val title: TextReference = TextReference.EMPTY,
val subtitle: TextReference = TextReference.EMPTY,
val accountTitleUM: AccountTitleUM.Account? = null,
val timestamp: TextReference? = null,
val subtitleEndOffset: Int = 0,

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.api.subcomponents.destination.entity
package com.tangem.features.send.api.subcomponents.destination.entity
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.runtime.Immutable

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.api.subcomponents.destination.entity
package com.tangem.features.send.api.subcomponents.destination.entity
import androidx.compose.runtime.Immutable
import kotlinx.collections.immutable.ImmutableList

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.api.subcomponents.feeSelector
package com.tangem.features.send.api.subcomponents.feeSelector
import kotlinx.coroutines.flow.Flow

View file

@ -1,6 +1,6 @@
package com.tangem.features.send.v2.api.subcomponents.feeSelector
package com.tangem.features.send.api.subcomponents.feeSelector
import com.tangem.features.send.v2.api.subcomponents.feeSelector.entity.FeeSelectorData
import com.tangem.features.send.api.subcomponents.feeSelector.entity.FeeSelectorData
import kotlinx.coroutines.flow.Flow
interface FeeSelectorReloadTrigger {

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.api.subcomponents.feeSelector.analytics
package com.tangem.features.send.api.subcomponents.feeSelector.analytics
import com.tangem.core.analytics.models.AnalyticsEvent
import com.tangem.core.analytics.models.AnalyticsParam
@ -7,7 +7,7 @@ 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.SOURCE
import com.tangem.core.analytics.models.AnalyticsParam.Key.TOKEN_PARAM
import com.tangem.features.send.v2.api.analytics.CommonSendAnalyticEvents.CommonSendSource
import com.tangem.features.send.api.analytics.CommonSendAnalyticEvents
sealed class CommonSendFeeAnalyticEvents(
category: String,
@ -21,7 +21,7 @@ sealed class CommonSendFeeAnalyticEvents(
data class SelectedFee(
override val categoryName: String,
val feeType: AnalyticsParam.FeeType,
val source: CommonSendSource,
val source: CommonSendAnalyticEvents.CommonSendSource,
val feeToken: String,
val blockchain: String,
) : CommonSendFeeAnalyticEvents(

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.api.subcomponents.feeSelector.entity
package com.tangem.features.send.api.subcomponents.feeSelector.entity
data class FeeSelectorData(
val isRemoveSuggestedFee: Boolean = false,

View file

@ -1,11 +1,11 @@
package com.tangem.features.send.v2.api.subcomponents.feeSelector.utils
package com.tangem.features.send.api.subcomponents.feeSelector.utils
import com.tangem.blockchain.common.transaction.TransactionFee
import com.tangem.core.ui.utils.parseBigDecimal
import com.tangem.core.ui.utils.parseToBigDecimal
import com.tangem.domain.models.currency.CryptoCurrencyStatus
import com.tangem.features.send.v2.api.entity.FeeItem
import com.tangem.features.send.v2.api.entity.FeeSelectorUM
import com.tangem.features.send.api.entity.FeeItem
import com.tangem.features.send.api.entity.FeeSelectorUM
import com.tangem.utils.extensions.isZero
import java.math.BigDecimal
import java.math.RoundingMode

View file

@ -1,11 +1,11 @@
package com.tangem.features.send.v2.api.subcomponents.notifications
package com.tangem.features.send.api.subcomponents.notifications
import com.tangem.features.send.v2.api.SendNotificationsComponent.Params.NotificationData
import com.tangem.features.send.api.SendNotificationsComponent
import kotlinx.coroutines.flow.Flow
interface SendNotificationsUpdateListener {
/** Flow triggers notifications update */
val updateTriggerFlow: Flow<NotificationData>
val updateTriggerFlow: Flow<SendNotificationsComponent.Params.NotificationData>
/** Flow returns whether there is error notifications */
val hasErrorFlow: Flow<Boolean>

View file

@ -0,0 +1,11 @@
package com.tangem.features.send.api.subcomponents.notifications
import com.tangem.features.send.api.SendNotificationsComponent
interface SendNotificationsUpdateTrigger {
/** Trigger return callback with check result */
suspend fun callbackHasError(hasError: Boolean)
/** Trigger fee check reload */
suspend fun triggerUpdate(data: SendNotificationsComponent.Params.NotificationData)
}

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.api.utils
package com.tangem.features.send.api.utils
import com.tangem.blockchain.common.Amount
import com.tangem.blockchain.common.transaction.Fee
@ -8,7 +8,7 @@ import com.tangem.core.ui.format.bigdecimal.fee
import com.tangem.core.ui.format.bigdecimal.fiat
import com.tangem.core.ui.format.bigdecimal.format
import com.tangem.domain.appcurrency.model.AppCurrency
import com.tangem.features.send.v2.api.R
import com.tangem.features.send.api.R
import com.tangem.utils.StringsSigns.COMA_SIGN
fun getTronTokenFeeSendingText(fee: Fee.Tron, fiatFee: String, fiatSending: TextReference): TextReference {

View file

@ -1,7 +1,8 @@
package com.tangem.features.send.v2.api.subcomponents.feeSelector.utils
package com.tangem.features.send.api.subcomponents.feeSelector.utils
import com.google.common.truth.Truth.assertThat
import com.tangem.domain.models.currency.CryptoCurrencyStatus
import com.tangem.features.send.api.subcomponents.feeSelector.utils.FeeCalculationUtils
import io.mockk.mockk
import org.junit.jupiter.api.Test
import java.math.BigDecimal

View file

@ -8,11 +8,11 @@ plugins {
}
android {
namespace = "com.tangem.features.send.v2.impl"
namespace = "com.tangem.features.send.impl"
}
dependencies {
/** Api */
implementation(projects.features.sendV2.api)
implementation(projects.features.send.api)
implementation(projects.features.txhistory.api)
implementation(projects.features.nft.api)
implementation(projects.features.swapV2.api)

View file

@ -1,6 +1,6 @@
package com.tangem.features.send.v2
package com.tangem.features.send
import com.tangem.features.send.v2.api.SendFeatureToggles
import com.tangem.features.send.api.SendFeatureToggles
import javax.inject.Inject
internal class DefaultSendFeatureToggles @Inject constructor() : SendFeatureToggles

View file

@ -1,7 +1,7 @@
package com.tangem.features.send.v2.common
package com.tangem.features.send.common
import com.tangem.core.decompose.navigation.Route
import com.tangem.features.send.v2.api.subcomponents.destination.DestinationRoute
import com.tangem.features.send.api.subcomponents.destination.DestinationRoute
import kotlinx.serialization.Serializable
internal sealed class CommonSendRoute : Route {

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.common
package com.tangem.features.send.common
import com.tangem.utils.coroutines.AppCoroutineScope
import com.tangem.domain.models.currency.CryptoCurrency

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.common
package com.tangem.features.send.common
import com.tangem.common.ui.alerts.TransactionErrorDialogFactory
import com.tangem.core.decompose.di.ModelScoped
@ -7,7 +7,7 @@ import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.message.DialogMessage
import com.tangem.core.ui.message.EventMessageAction
import com.tangem.domain.transaction.error.SendTransactionError
import com.tangem.features.send.v2.impl.R
import com.tangem.features.send.impl.R
import javax.inject.Inject
@ModelScoped

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.common.ui
package com.tangem.features.send.common.ui
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
@ -15,8 +15,8 @@ import com.tangem.core.ui.format.bigdecimal.crypto
import com.tangem.core.ui.format.bigdecimal.fee
import com.tangem.core.ui.format.bigdecimal.format
import com.tangem.core.ui.res.TangemTheme
import com.tangem.features.send.v2.api.entity.FeeSelectorUM
import com.tangem.features.send.v2.impl.R
import com.tangem.features.send.api.entity.FeeSelectorUM
import com.tangem.features.send.impl.R
@Composable
fun FeeBlockSuccess(feeSelectorUM: FeeSelectorUM) {

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.common.ui
package com.tangem.features.send.common.ui
import androidx.compose.animation.*
import androidx.compose.foundation.background
@ -21,8 +21,8 @@ import com.tangem.core.ui.decompose.ComposableContentComponent
import com.tangem.core.ui.extensions.TextReference
import com.tangem.core.ui.extensions.resolveReference
import com.tangem.core.ui.res.TangemTheme
import com.tangem.features.send.v2.common.CommonSendRoute
import com.tangem.features.send.v2.common.ui.state.ConfirmUM
import com.tangem.features.send.common.CommonSendRoute
import com.tangem.features.send.common.ui.state.ConfirmUM
@Composable
internal fun SendContent(

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.common.ui
package com.tangem.features.send.common.ui
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Column
@ -14,7 +14,7 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.res.painterResource
import com.tangem.core.ui.extensions.stringResourceSafe
import com.tangem.core.ui.res.TangemTheme
import com.tangem.features.send.v2.impl.R
import com.tangem.features.send.impl.R
import kotlinx.coroutines.delay
private const val TAP_HELP_KEY = "TAP_HELP_KEY"

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.common.ui.state
package com.tangem.features.send.common.ui.state
import androidx.compose.runtime.Immutable
import com.tangem.common.ui.notifications.NotificationUM

View file

@ -1,10 +1,10 @@
package com.tangem.features.send.v2.common.utils
package com.tangem.features.send.common.utils
import com.arkivanov.decompose.router.stack.ChildStack
import com.arkivanov.decompose.value.Value
import com.tangem.core.decompose.navigation.Router
import com.tangem.core.ui.decompose.ComposableContentComponent
import com.tangem.features.send.v2.common.CommonSendRoute
import com.tangem.features.send.common.CommonSendRoute
/**
* Workaround to try fix duplicate route crash

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.deeplink
package com.tangem.features.send.deeplink
import arrow.core.Option
import arrow.core.getOrElse
@ -12,7 +12,7 @@ import com.tangem.domain.account.supplier.SingleAccountListSupplier
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.wallet.UserWalletId
import com.tangem.domain.wallets.usecase.GetSelectedWalletSyncUseCase
import com.tangem.features.send.v2.api.deeplink.SellRedirectDeepLinkHandler
import com.tangem.features.send.api.deeplink.SellRedirectDeepLinkHandler
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject

View file

@ -1,7 +1,7 @@
package com.tangem.features.send.v2.deeplink.di
package com.tangem.features.send.deeplink.di
import com.tangem.features.send.v2.api.deeplink.SellRedirectDeepLinkHandler
import com.tangem.features.send.v2.deeplink.DefaultSellRedirectDeepLinkHandler
import com.tangem.features.send.api.deeplink.SellRedirectDeepLinkHandler
import com.tangem.features.send.deeplink.DefaultSellRedirectDeepLinkHandler
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn

View file

@ -1,10 +1,10 @@
package com.tangem.features.send.v2.di
package com.tangem.features.send.di
import com.tangem.core.decompose.di.ModelComponent
import com.tangem.core.decompose.model.Model
import com.tangem.features.send.v2.subcomponents.amount.model.SendAmountModel
import com.tangem.features.send.v2.subcomponents.destination.model.SendDestinationModel
import com.tangem.features.send.v2.subcomponents.notifications.model.NotificationsModel
import com.tangem.features.send.subcomponents.amount.model.SendAmountModel
import com.tangem.features.send.subcomponents.destination.model.SendDestinationModel
import com.tangem.features.send.subcomponents.notifications.model.NotificationsModel
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn

View file

@ -1,11 +1,15 @@
package com.tangem.features.send.v2.di
package com.tangem.features.send.di
import com.tangem.features.send.v2.DefaultSendFeatureToggles
import com.tangem.features.send.v2.api.*
import com.tangem.features.send.v2.entrypoint.DefaultSendEntryPointComponent
import com.tangem.features.send.v2.send.DefaultSendComponent
import com.tangem.features.send.v2.sendnft.DefaultNFTSendComponent
import com.tangem.features.send.v2.subcomponents.notifications.DefaultSendNotificationsComponent
import com.tangem.features.send.DefaultSendFeatureToggles
import com.tangem.features.send.api.NFTSendComponent
import com.tangem.features.send.api.SendComponent
import com.tangem.features.send.api.SendEntryPointComponent
import com.tangem.features.send.api.SendFeatureToggles
import com.tangem.features.send.api.SendNotificationsComponent
import com.tangem.features.send.entrypoint.DefaultSendEntryPointComponent
import com.tangem.features.send.send.DefaultSendComponent
import com.tangem.features.send.sendnft.DefaultNFTSendComponent
import com.tangem.features.send.subcomponents.notifications.DefaultSendNotificationsComponent
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.entrypoint
package com.tangem.features.send.entrypoint
import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.layout.fillMaxSize
@ -24,11 +24,11 @@ import com.tangem.core.decompose.model.getOrCreateModel
import com.tangem.core.decompose.navigation.inner.InnerRouter
import com.tangem.core.ui.decompose.ComposableContentComponent
import com.tangem.features.managetokens.component.ChooseManagedTokensComponent
import com.tangem.features.send.v2.api.SendComponent
import com.tangem.features.send.v2.api.SendEntryPointComponent
import com.tangem.features.send.v2.api.analytics.CommonSendAnalyticEvents
import com.tangem.features.send.v2.api.entry.SendEntryRoute
import com.tangem.features.send.v2.entrypoint.model.SendEntryPointModel
import com.tangem.features.send.api.SendComponent
import com.tangem.features.send.api.SendEntryPointComponent
import com.tangem.features.send.api.analytics.CommonSendAnalyticEvents
import com.tangem.features.send.api.entry.SendEntryRoute
import com.tangem.features.send.entrypoint.model.SendEntryPointModel
import com.tangem.features.swap.v2.api.SendWithSwapComponent
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory

View file

@ -1,8 +1,8 @@
package com.tangem.features.send.v2.entrypoint.di
package com.tangem.features.send.entrypoint.di
import com.tangem.core.decompose.di.ModelComponent
import com.tangem.core.decompose.model.Model
import com.tangem.features.send.v2.entrypoint.model.SendEntryPointModel
import com.tangem.features.send.entrypoint.model.SendEntryPointModel
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.entrypoint.model
package com.tangem.features.send.entrypoint.model
import com.tangem.common.ui.notifications.NotificationId
import com.tangem.core.analytics.api.AnalyticsEventHandler
@ -7,10 +7,10 @@ import com.tangem.core.decompose.model.Model
import com.tangem.core.decompose.navigation.Router
import com.tangem.domain.notifications.ShouldShowNotificationUseCase
import com.tangem.features.managetokens.component.ChooseManagedTokensComponent
import com.tangem.features.send.v2.api.SendComponent
import com.tangem.features.send.v2.api.analytics.CommonSendAnalyticEvents
import com.tangem.features.send.v2.api.entry.SendEntryRoute
import com.tangem.features.send.v2.subcomponents.amount.SendAmountUpdateTrigger
import com.tangem.features.send.api.SendComponent
import com.tangem.features.send.api.analytics.CommonSendAnalyticEvents
import com.tangem.features.send.api.entry.SendEntryRoute
import com.tangem.features.send.subcomponents.amount.SendAmountUpdateTrigger
import com.tangem.features.swap.v2.api.SendWithSwapComponent
import com.tangem.features.swap.v2.api.subcomponents.SwapAmountUpdateTrigger
import com.tangem.utils.coroutines.CoroutineDispatcherProvider

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.feeselector
package com.tangem.features.send.feeselector
import androidx.compose.foundation.clickable
import androidx.compose.runtime.Composable
@ -12,12 +12,12 @@ import com.tangem.core.decompose.context.AppComponentContext
import com.tangem.core.decompose.context.childByContext
import com.tangem.core.decompose.model.getOrCreateModel
import com.tangem.core.ui.extensions.conditional
import com.tangem.features.send.v2.api.FeeSelectorBlockComponent
import com.tangem.features.send.v2.api.FeeSelectorComponent
import com.tangem.features.send.v2.api.entity.FeeSelectorUM
import com.tangem.features.send.v2.api.params.FeeSelectorParams
import com.tangem.features.send.v2.feeselector.model.FeeSelectorBlockModel
import com.tangem.features.send.v2.feeselector.ui.FeeSelectorBlockContent
import com.tangem.features.send.api.FeeSelectorBlockComponent
import com.tangem.features.send.api.FeeSelectorComponent
import com.tangem.features.send.api.entity.FeeSelectorUM
import com.tangem.features.send.api.params.FeeSelectorParams
import com.tangem.features.send.feeselector.model.FeeSelectorBlockModel
import com.tangem.features.send.feeselector.ui.FeeSelectorBlockContent
import com.tangem.utils.extensions.isSingleItem
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.feeselector
package com.tangem.features.send.feeselector
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
@ -12,15 +12,15 @@ import com.tangem.core.decompose.context.childByContext
import com.tangem.core.decompose.model.getOrCreateModel
import com.tangem.core.decompose.navigation.inner.InnerRouter
import com.tangem.core.ui.decompose.ComposableContentComponent
import com.tangem.features.send.v2.api.FeeSelectorComponent
import com.tangem.features.send.v2.api.params.FeeSelectorParams
import com.tangem.features.send.v2.feeselector.component.FeeSelectorComponentParams
import com.tangem.features.send.v2.feeselector.component.extended.FeeExtendedSelectorComponent
import com.tangem.features.send.v2.feeselector.component.speed.FeeSpeedSelectorComponent
import com.tangem.features.send.v2.feeselector.component.token.FeeTokenSelectorComponent
import com.tangem.features.send.v2.feeselector.model.FeeSelectorModel
import com.tangem.features.send.v2.feeselector.route.FeeSelectorRoute
import com.tangem.features.send.v2.feeselector.ui.FeeSelectorModalBottomSheet
import com.tangem.features.send.api.FeeSelectorComponent
import com.tangem.features.send.api.params.FeeSelectorParams
import com.tangem.features.send.feeselector.component.FeeSelectorComponentParams
import com.tangem.features.send.feeselector.component.extended.FeeExtendedSelectorComponent
import com.tangem.features.send.feeselector.component.speed.FeeSpeedSelectorComponent
import com.tangem.features.send.feeselector.component.token.FeeTokenSelectorComponent
import com.tangem.features.send.feeselector.model.FeeSelectorModel
import com.tangem.features.send.feeselector.route.FeeSelectorRoute
import com.tangem.features.send.feeselector.ui.FeeSelectorModalBottomSheet
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject

View file

@ -1,10 +1,10 @@
package com.tangem.features.send.v2.feeselector
package com.tangem.features.send.feeselector
import com.tangem.features.send.v2.api.subcomponents.feeSelector.FeeSelectorCheckReloadListener
import com.tangem.features.send.v2.api.subcomponents.feeSelector.FeeSelectorCheckReloadTrigger
import com.tangem.features.send.v2.api.subcomponents.feeSelector.FeeSelectorReloadListener
import com.tangem.features.send.v2.api.subcomponents.feeSelector.FeeSelectorReloadTrigger
import com.tangem.features.send.v2.api.subcomponents.feeSelector.entity.FeeSelectorData
import com.tangem.features.send.api.subcomponents.feeSelector.FeeSelectorCheckReloadListener
import com.tangem.features.send.api.subcomponents.feeSelector.FeeSelectorCheckReloadTrigger
import com.tangem.features.send.api.subcomponents.feeSelector.FeeSelectorReloadListener
import com.tangem.features.send.api.subcomponents.feeSelector.FeeSelectorReloadTrigger
import com.tangem.features.send.api.subcomponents.feeSelector.entity.FeeSelectorData
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.SharedFlow
import javax.inject.Inject

View file

@ -0,0 +1,12 @@
package com.tangem.features.send.feeselector.component
import com.tangem.features.send.api.entity.FeeSelectorUM
import com.tangem.features.send.api.params.FeeSelectorParams
import com.tangem.features.send.feeselector.model.FeeSelectorIntents
import kotlinx.coroutines.flow.MutableStateFlow
internal class FeeSelectorComponentParams(
val parentParams: FeeSelectorParams.FeeSelectorDetailsParams,
val state: MutableStateFlow<FeeSelectorUM>,
val intents: FeeSelectorIntents,
)

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.feeselector.component.extended
package com.tangem.features.send.feeselector.component.extended
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
@ -7,9 +7,9 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.tangem.core.decompose.context.AppComponentContext
import com.tangem.core.decompose.model.getOrCreateModel
import com.tangem.core.ui.decompose.ComposableContentComponent
import com.tangem.features.send.v2.feeselector.component.FeeSelectorComponentParams
import com.tangem.features.send.v2.feeselector.component.extended.model.FeeExtendedSelectorModel
import com.tangem.features.send.v2.feeselector.component.extended.ui.FeeExtendedSelectorContent
import com.tangem.features.send.feeselector.component.FeeSelectorComponentParams
import com.tangem.features.send.feeselector.component.extended.model.FeeExtendedSelectorModel
import com.tangem.features.send.feeselector.component.extended.ui.FeeExtendedSelectorContent
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject

View file

@ -1,9 +1,9 @@
package com.tangem.features.send.v2.feeselector.component.extended.entity
package com.tangem.features.send.feeselector.component.extended.entity
import androidx.compose.runtime.Immutable
import com.tangem.core.ui.components.token.state.TokenItemState
import com.tangem.features.send.v2.api.entity.FeeItem
import com.tangem.features.send.v2.api.entity.FeeSelectorUM
import com.tangem.features.send.api.entity.FeeItem
import com.tangem.features.send.api.entity.FeeSelectorUM
@Immutable
data class FeeExtendedSelectorUM(

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.feeselector.component.extended.model
package com.tangem.features.send.feeselector.component.extended.model
import androidx.compose.runtime.Stable
import arrow.core.getOrElse
@ -8,10 +8,10 @@ import com.tangem.core.decompose.model.ParamsContainer
import com.tangem.core.decompose.navigation.Router
import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase
import com.tangem.domain.appcurrency.model.AppCurrency
import com.tangem.features.send.v2.api.entity.FeeSelectorUM
import com.tangem.features.send.v2.feeselector.component.FeeSelectorComponentParams
import com.tangem.features.send.v2.feeselector.component.extended.entity.FeeExtendedSelectorUM
import com.tangem.features.send.v2.feeselector.route.FeeSelectorRoute
import com.tangem.features.send.api.entity.FeeSelectorUM
import com.tangem.features.send.feeselector.component.FeeSelectorComponentParams
import com.tangem.features.send.feeselector.component.extended.entity.FeeExtendedSelectorUM
import com.tangem.features.send.feeselector.route.FeeSelectorRoute
import com.tangem.utils.Provider
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import kotlinx.coroutines.flow.*

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.feeselector.component.extended.model
package com.tangem.features.send.feeselector.component.extended.model
import com.tangem.common.ui.tokens.TokenItemStateConverter
import com.tangem.core.ui.components.icons.IconTint
@ -9,7 +9,7 @@ import com.tangem.core.ui.format.bigdecimal.fiat
import com.tangem.core.ui.format.bigdecimal.format
import com.tangem.domain.appcurrency.model.AppCurrency
import com.tangem.domain.models.currency.CryptoCurrencyStatus
import com.tangem.features.send.v2.impl.R
import com.tangem.features.send.impl.R
import com.tangem.utils.Provider
import com.tangem.utils.converter.Converter

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.feeselector.component.extended.ui
package com.tangem.features.send.feeselector.component.extended.ui
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
@ -33,9 +33,13 @@ import com.tangem.domain.appcurrency.model.AppCurrency
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.currency.CryptoCurrencyStatus
import com.tangem.domain.models.network.Network
import com.tangem.features.send.v2.api.entity.*
import com.tangem.features.send.v2.feeselector.component.extended.entity.FeeExtendedSelectorUM
import com.tangem.features.send.v2.feeselector.component.speed.ui.RegularFeeItemContent
import com.tangem.features.send.api.entity.FeeExtraInfo
import com.tangem.features.send.api.entity.FeeFiatRateUM
import com.tangem.features.send.api.entity.FeeItem
import com.tangem.features.send.api.entity.FeeNonce
import com.tangem.features.send.api.entity.FeeSelectorUM
import com.tangem.features.send.feeselector.component.extended.entity.FeeExtendedSelectorUM
import com.tangem.features.send.feeselector.component.speed.ui.RegularFeeItemContent
import kotlinx.collections.immutable.persistentListOf
import java.math.BigDecimal

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.feeselector.component.speed
package com.tangem.features.send.feeselector.component.speed
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
@ -7,10 +7,10 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.tangem.core.decompose.context.AppComponentContext
import com.tangem.core.decompose.model.getOrCreateModel
import com.tangem.core.ui.decompose.ComposableContentComponent
import com.tangem.features.send.v2.api.entity.FeeSelectorUM
import com.tangem.features.send.v2.feeselector.component.FeeSelectorComponentParams
import com.tangem.features.send.v2.feeselector.component.speed.model.FeeSpeedSelectorModel
import com.tangem.features.send.v2.feeselector.component.speed.ui.FeeSpeedSelectorContent
import com.tangem.features.send.api.entity.FeeSelectorUM
import com.tangem.features.send.feeselector.component.FeeSelectorComponentParams
import com.tangem.features.send.feeselector.component.speed.model.FeeSpeedSelectorModel
import com.tangem.features.send.feeselector.component.speed.ui.FeeSpeedSelectorContent
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject

View file

@ -1,8 +1,8 @@
package com.tangem.features.send.v2.feeselector.component.speed
package com.tangem.features.send.feeselector.component.speed
import androidx.compose.runtime.Stable
import com.tangem.features.send.v2.feeselector.model.FeeSelectorIntents
import com.tangem.features.send.v2.feeselector.model.StubFeeSelectorIntents
import com.tangem.features.send.feeselector.model.FeeSelectorIntents
import com.tangem.features.send.feeselector.model.StubFeeSelectorIntents
@Stable
internal interface FeeSpeedSelectorIntents : FeeSelectorIntents {

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.feeselector.component.speed.model
package com.tangem.features.send.feeselector.component.speed.model
import androidx.compose.runtime.Stable
import com.tangem.common.TangemBlogUrlBuilder
@ -6,10 +6,10 @@ import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.Model
import com.tangem.core.decompose.model.ParamsContainer
import com.tangem.core.navigation.url.UrlOpener
import com.tangem.features.send.v2.api.entity.FeeSelectorUM
import com.tangem.features.send.v2.feeselector.component.FeeSelectorComponentParams
import com.tangem.features.send.v2.feeselector.component.speed.FeeSpeedSelectorIntents
import com.tangem.features.send.v2.feeselector.model.FeeSelectorIntents
import com.tangem.features.send.api.entity.FeeSelectorUM
import com.tangem.features.send.feeselector.component.FeeSelectorComponentParams
import com.tangem.features.send.feeselector.component.speed.FeeSpeedSelectorIntents
import com.tangem.features.send.feeselector.model.FeeSelectorIntents
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.feeselector.component.speed.ui
package com.tangem.features.send.feeselector.component.speed.ui
import android.content.res.Configuration
import androidx.annotation.DrawableRes
@ -54,10 +54,15 @@ import com.tangem.domain.appcurrency.model.AppCurrency
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.currency.CryptoCurrencyStatus
import com.tangem.domain.models.network.Network
import com.tangem.features.send.v2.api.entity.*
import com.tangem.features.send.v2.feeselector.component.speed.FeeSpeedSelectorIntents
import com.tangem.features.send.v2.feeselector.component.speed.StubFeeSpeedSelectorIntents
import com.tangem.features.send.v2.impl.R
import com.tangem.features.send.api.entity.CustomFeeFieldUM
import com.tangem.features.send.api.entity.FeeExtraInfo
import com.tangem.features.send.api.entity.FeeFiatRateUM
import com.tangem.features.send.api.entity.FeeItem
import com.tangem.features.send.api.entity.FeeNonce
import com.tangem.features.send.api.entity.FeeSelectorUM
import com.tangem.features.send.feeselector.component.speed.FeeSpeedSelectorIntents
import com.tangem.features.send.feeselector.component.speed.StubFeeSpeedSelectorIntents
import com.tangem.features.send.impl.R
import com.tangem.utils.StringsSigns
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.feeselector.component.token
package com.tangem.features.send.feeselector.component.token
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
@ -7,9 +7,9 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.tangem.core.decompose.context.AppComponentContext
import com.tangem.core.decompose.model.getOrCreateModel
import com.tangem.core.ui.decompose.ComposableContentComponent
import com.tangem.features.send.v2.feeselector.component.FeeSelectorComponentParams
import com.tangem.features.send.v2.feeselector.component.token.model.FeeTokenSelectorModel
import com.tangem.features.send.v2.feeselector.component.token.ui.FeeTokenSelectorContent
import com.tangem.features.send.feeselector.component.FeeSelectorComponentParams
import com.tangem.features.send.feeselector.component.token.model.FeeTokenSelectorModel
import com.tangem.features.send.feeselector.component.token.ui.FeeTokenSelectorContent
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject

View file

@ -1,8 +1,8 @@
package com.tangem.features.send.v2.feeselector.component.token
package com.tangem.features.send.feeselector.component.token
import androidx.compose.runtime.Stable
import com.tangem.features.send.v2.feeselector.model.FeeSelectorIntents
import com.tangem.features.send.v2.feeselector.model.StubFeeSelectorIntents
import com.tangem.features.send.feeselector.model.FeeSelectorIntents
import com.tangem.features.send.feeselector.model.StubFeeSelectorIntents
@Stable
internal interface FeeTokenSelectorIntents : FeeSelectorIntents {

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.feeselector.component.token.entity
package com.tangem.features.send.feeselector.component.token.entity
import com.tangem.core.ui.components.token.state.TokenItemState

View file

@ -1,6 +1,6 @@
package com.tangem.features.send.v2.feeselector.component.token.entity
package com.tangem.features.send.feeselector.component.token.entity
import com.tangem.features.send.v2.api.entity.FeeSelectorUM
import com.tangem.features.send.api.entity.FeeSelectorUM
import kotlinx.collections.immutable.ImmutableList
internal data class FeeTokenSelectorUM(

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.feeselector.component.token.model
package com.tangem.features.send.feeselector.component.token.model
import com.tangem.common.ui.tokens.TokenItemStateConverter
import com.tangem.core.ui.components.token.state.TokenItemState
@ -8,8 +8,8 @@ import com.tangem.core.ui.format.bigdecimal.fiat
import com.tangem.core.ui.format.bigdecimal.format
import com.tangem.domain.appcurrency.model.AppCurrency
import com.tangem.domain.models.currency.CryptoCurrencyStatus
import com.tangem.features.send.v2.feeselector.component.token.entity.FeeTokenItemState
import com.tangem.features.send.v2.impl.R
import com.tangem.features.send.feeselector.component.token.entity.FeeTokenItemState
import com.tangem.features.send.impl.R
import com.tangem.utils.Provider
import com.tangem.utils.converter.Converter
import com.tangem.utils.extensions.isZero

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.feeselector.component.token.model
package com.tangem.features.send.feeselector.component.token.model
import androidx.compose.runtime.Stable
import arrow.core.getOrElse
@ -10,12 +10,12 @@ import com.tangem.core.navigation.url.UrlOpener
import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase
import com.tangem.domain.appcurrency.model.AppCurrency
import com.tangem.domain.models.currency.CryptoCurrencyStatus
import com.tangem.features.send.v2.api.entity.FeeSelectorUM
import com.tangem.features.send.v2.feeselector.component.FeeSelectorComponentParams
import com.tangem.features.send.v2.feeselector.component.token.FeeTokenSelectorIntents
import com.tangem.features.send.v2.feeselector.component.token.entity.FeeTokenItemState
import com.tangem.features.send.v2.feeselector.component.token.entity.FeeTokenSelectorUM
import com.tangem.features.send.v2.feeselector.model.FeeSelectorIntents
import com.tangem.features.send.api.entity.FeeSelectorUM
import com.tangem.features.send.feeselector.component.FeeSelectorComponentParams
import com.tangem.features.send.feeselector.component.token.FeeTokenSelectorIntents
import com.tangem.features.send.feeselector.component.token.entity.FeeTokenItemState
import com.tangem.features.send.feeselector.component.token.entity.FeeTokenSelectorUM
import com.tangem.features.send.feeselector.model.FeeSelectorIntents
import com.tangem.utils.Provider
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import kotlinx.collections.immutable.persistentListOf

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.feeselector.component.token.ui
package com.tangem.features.send.feeselector.component.token.ui
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
@ -36,12 +36,16 @@ import com.tangem.domain.appcurrency.model.AppCurrency
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.currency.CryptoCurrencyStatus
import com.tangem.domain.models.network.Network
import com.tangem.features.send.v2.api.entity.*
import com.tangem.features.send.v2.feeselector.component.token.FeeTokenSelectorIntents
import com.tangem.features.send.v2.feeselector.component.token.StubFeeTokenSelectorIntents
import com.tangem.features.send.v2.feeselector.component.token.entity.FeeTokenItemState
import com.tangem.features.send.v2.feeselector.component.token.entity.FeeTokenSelectorUM
import com.tangem.features.send.v2.impl.R
import com.tangem.features.send.api.entity.FeeExtraInfo
import com.tangem.features.send.api.entity.FeeFiatRateUM
import com.tangem.features.send.api.entity.FeeItem
import com.tangem.features.send.api.entity.FeeNonce
import com.tangem.features.send.api.entity.FeeSelectorUM
import com.tangem.features.send.feeselector.component.token.FeeTokenSelectorIntents
import com.tangem.features.send.feeselector.component.token.StubFeeTokenSelectorIntents
import com.tangem.features.send.feeselector.component.token.entity.FeeTokenItemState
import com.tangem.features.send.feeselector.component.token.entity.FeeTokenSelectorUM
import com.tangem.features.send.impl.R
import com.tangem.utils.StringsSigns
import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toImmutableList

View file

@ -1,14 +1,14 @@
package com.tangem.features.send.v2.feeselector.di
package com.tangem.features.send.feeselector.di
import com.tangem.features.send.v2.api.FeeSelectorBlockComponent
import com.tangem.features.send.v2.api.FeeSelectorComponent
import com.tangem.features.send.v2.api.subcomponents.feeSelector.FeeSelectorCheckReloadListener
import com.tangem.features.send.v2.api.subcomponents.feeSelector.FeeSelectorCheckReloadTrigger
import com.tangem.features.send.v2.api.subcomponents.feeSelector.FeeSelectorReloadListener
import com.tangem.features.send.v2.api.subcomponents.feeSelector.FeeSelectorReloadTrigger
import com.tangem.features.send.v2.feeselector.DefaultFeeSelectorBlockComponent
import com.tangem.features.send.v2.feeselector.DefaultFeeSelectorComponent
import com.tangem.features.send.v2.feeselector.DefaultFeeSelectorReloadTrigger
import com.tangem.features.send.api.FeeSelectorBlockComponent
import com.tangem.features.send.api.FeeSelectorComponent
import com.tangem.features.send.api.subcomponents.feeSelector.FeeSelectorCheckReloadListener
import com.tangem.features.send.api.subcomponents.feeSelector.FeeSelectorCheckReloadTrigger
import com.tangem.features.send.api.subcomponents.feeSelector.FeeSelectorReloadListener
import com.tangem.features.send.api.subcomponents.feeSelector.FeeSelectorReloadTrigger
import com.tangem.features.send.feeselector.DefaultFeeSelectorBlockComponent
import com.tangem.features.send.feeselector.DefaultFeeSelectorComponent
import com.tangem.features.send.feeselector.DefaultFeeSelectorReloadTrigger
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn

View file

@ -1,12 +1,12 @@
package com.tangem.features.send.v2.feeselector.di
package com.tangem.features.send.feeselector.di
import com.tangem.core.decompose.di.ModelComponent
import com.tangem.core.decompose.model.Model
import com.tangem.features.send.v2.feeselector.component.extended.model.FeeExtendedSelectorModel
import com.tangem.features.send.v2.feeselector.model.FeeSelectorBlockModel
import com.tangem.features.send.v2.feeselector.component.speed.model.FeeSpeedSelectorModel
import com.tangem.features.send.v2.feeselector.component.token.model.FeeTokenSelectorModel
import com.tangem.features.send.v2.feeselector.model.FeeSelectorModel
import com.tangem.features.send.feeselector.component.extended.model.FeeExtendedSelectorModel
import com.tangem.features.send.feeselector.component.speed.model.FeeSpeedSelectorModel
import com.tangem.features.send.feeselector.component.token.model.FeeTokenSelectorModel
import com.tangem.features.send.feeselector.model.FeeSelectorBlockModel
import com.tangem.features.send.feeselector.model.FeeSelectorModel
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.feeselector.model
package com.tangem.features.send.feeselector.model
import com.tangem.blockchain.common.transaction.TransactionFee
import com.tangem.core.decompose.di.ModelScoped
@ -7,10 +7,10 @@ import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.wrappedList
import com.tangem.core.ui.message.DialogMessage
import com.tangem.core.ui.message.EventMessageAction
import com.tangem.features.send.v2.api.entity.FeeItem
import com.tangem.features.send.v2.api.entity.FeeSelectorUM
import com.tangem.features.send.v2.api.subcomponents.feeSelector.utils.FeeCalculationUtils
import com.tangem.features.send.v2.impl.R
import com.tangem.features.send.api.entity.FeeItem
import com.tangem.features.send.api.entity.FeeSelectorUM
import com.tangem.features.send.api.subcomponents.feeSelector.utils.FeeCalculationUtils
import com.tangem.features.send.impl.R
import java.math.BigDecimal
import javax.inject.Inject

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.feeselector.model
package com.tangem.features.send.feeselector.model
import androidx.compose.runtime.Stable
import com.arkivanov.decompose.router.slot.SlotNavigation
@ -11,11 +11,11 @@ import com.tangem.core.decompose.model.Model
import com.tangem.core.decompose.model.ParamsContainer
import com.tangem.core.navigation.url.UrlOpener
import com.tangem.domain.settings.NeverShowTapHelpUseCase
import com.tangem.features.send.v2.api.analytics.CommonSendAnalyticEvents
import com.tangem.features.send.v2.api.analytics.CommonSendAnalyticEvents.SendScreenSource
import com.tangem.features.send.v2.api.callbacks.FeeSelectorModelCallback
import com.tangem.features.send.v2.api.entity.FeeSelectorUM
import com.tangem.features.send.v2.api.params.FeeSelectorParams
import com.tangem.features.send.api.analytics.CommonSendAnalyticEvents
import com.tangem.features.send.api.analytics.CommonSendAnalyticEvents.SendScreenSource
import com.tangem.features.send.api.callbacks.FeeSelectorModelCallback
import com.tangem.features.send.api.entity.FeeSelectorUM
import com.tangem.features.send.api.params.FeeSelectorParams
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch

View file

@ -1,8 +1,8 @@
package com.tangem.features.send.v2.feeselector.model
package com.tangem.features.send.feeselector.model
import androidx.compose.runtime.Stable
import com.tangem.domain.models.currency.CryptoCurrencyStatus
import com.tangem.features.send.v2.api.entity.FeeItem
import com.tangem.features.send.api.entity.FeeItem
@Stable
internal interface FeeSelectorIntents {

View file

@ -1,4 +1,4 @@
package com.tangem.features.send.v2.feeselector.model
package com.tangem.features.send.feeselector.model
import arrow.core.Either
import arrow.core.flatMap
@ -20,17 +20,24 @@ import com.tangem.domain.transaction.usecase.IsFeeApproximateUseCase
import com.tangem.domain.transaction.usecase.gasless.GetAvailableFeeTokensUseCase
import com.tangem.domain.transaction.usecase.gasless.IsGaslessFeeSupportedForNetwork
import com.tangem.domain.wallets.usecase.GetUserWalletUseCase
import com.tangem.features.send.v2.api.analytics.CommonSendAnalyticEvents.NonceInserted
import com.tangem.features.send.v2.api.entity.FeeItem
import com.tangem.features.send.v2.api.entity.FeeNonce
import com.tangem.features.send.v2.api.entity.FeeSelectorUM
import com.tangem.features.send.v2.api.params.FeeSelectorParams
import com.tangem.features.send.v2.api.subcomponents.feeSelector.FeeSelectorCheckReloadListener
import com.tangem.features.send.v2.api.subcomponents.feeSelector.FeeSelectorCheckReloadTrigger
import com.tangem.features.send.v2.api.subcomponents.feeSelector.FeeSelectorReloadListener
import com.tangem.features.send.v2.api.subcomponents.feeSelector.analytics.CommonSendFeeAnalyticEvents
import com.tangem.features.send.v2.api.subcomponents.feeSelector.analytics.CommonSendFeeAnalyticEvents.GasPriceInserter
import com.tangem.features.send.v2.feeselector.model.transformers.*
import com.tangem.features.send.api.analytics.CommonSendAnalyticEvents.NonceInserted
import com.tangem.features.send.api.entity.FeeItem
import com.tangem.features.send.api.entity.FeeNonce
import com.tangem.features.send.api.entity.FeeSelectorUM
import com.tangem.features.send.api.params.FeeSelectorParams
import com.tangem.features.send.api.subcomponents.feeSelector.FeeSelectorCheckReloadListener
import com.tangem.features.send.api.subcomponents.feeSelector.FeeSelectorCheckReloadTrigger
import com.tangem.features.send.api.subcomponents.feeSelector.FeeSelectorReloadListener
import com.tangem.features.send.api.subcomponents.feeSelector.analytics.CommonSendFeeAnalyticEvents
import com.tangem.features.send.api.subcomponents.feeSelector.analytics.CommonSendFeeAnalyticEvents.GasPriceInserter
import com.tangem.features.send.feeselector.model.transformers.FeeItemSelectedTransformer
import com.tangem.features.send.feeselector.model.transformers.FeeSelectorCustomValueChangedTransformer
import com.tangem.features.send.feeselector.model.transformers.FeeSelectorErrorTransformer
import com.tangem.features.send.feeselector.model.transformers.FeeSelectorLoadedTransformer
import com.tangem.features.send.feeselector.model.transformers.FeeSelectorLoadingTransformer
import com.tangem.features.send.feeselector.model.transformers.FeeSelectorNonceChangeTransformer
import com.tangem.features.send.feeselector.model.transformers.FeeSelectorRemoveSuggestedTransformer
import com.tangem.features.send.feeselector.model.transformers.FeeSelectorTokenSelectedTransformer
import com.tangem.utils.coroutines.JobHolder
import com.tangem.utils.coroutines.saveIn
import com.tangem.utils.transformer.update

Some files were not shown because too many files have changed in this diff Show more