Updated on 2026-08-14
This commit is contained in:
parent
110ff5c745
commit
e7b7c086bb
27 changed files with 373 additions and 102 deletions
|
|
@ -1,6 +1,7 @@
|
|||
package com.tangem.features.send.common
|
||||
|
||||
import com.tangem.core.decompose.navigation.Route
|
||||
import com.tangem.features.send.api.subcomponents.amount.AmountRoute
|
||||
import com.tangem.features.send.api.subcomponents.destination.DestinationRoute
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
|
|
@ -31,5 +32,5 @@ internal sealed class CommonSendRoute : Route {
|
|||
@Serializable
|
||||
data class Amount(
|
||||
override val isEditMode: Boolean,
|
||||
) : CommonSendRoute()
|
||||
) : CommonSendRoute(), AmountRoute
|
||||
}
|
||||
|
|
@ -10,7 +10,7 @@ import com.tangem.features.managetokens.component.ChooseManagedTokensComponent
|
|||
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.send.api.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
|
||||
|
|
|
|||
|
|
@ -30,6 +30,8 @@ import com.tangem.core.ui.res.TangemTheme
|
|||
import com.tangem.domain.models.account.derivationIndex
|
||||
import com.tangem.features.send.api.SendComponent
|
||||
import com.tangem.features.send.api.analytics.CommonSendAnalyticEvents
|
||||
import com.tangem.features.send.api.subcomponents.amount.SendAmountComponent
|
||||
import com.tangem.features.send.api.subcomponents.amount.SendAmountComponentParams
|
||||
import com.tangem.features.send.api.subcomponents.destination.SendDestinationComponent
|
||||
import com.tangem.features.send.api.subcomponents.destination.SendDestinationComponentParams
|
||||
import com.tangem.features.send.api.subcomponents.destination.entity.DestinationUM
|
||||
|
|
@ -41,14 +43,12 @@ import com.tangem.features.send.impl.R
|
|||
import com.tangem.features.send.send.confirm.SendConfirmComponent
|
||||
import com.tangem.features.send.send.model.SendModel
|
||||
import com.tangem.features.send.send.success.SendConfirmSuccessComponent
|
||||
import com.tangem.features.send.subcomponents.amount.SendAmountComponent
|
||||
import com.tangem.features.send.subcomponents.amount.SendAmountComponentParams
|
||||
import com.tangem.features.send.subcomponents.amount.DefaultSendAmountComponent
|
||||
import com.tangem.features.send.subcomponents.destination.DefaultSendDestinationBlockComponent
|
||||
import dagger.assisted.Assisted
|
||||
import dagger.assisted.AssistedFactory
|
||||
import dagger.assisted.AssistedInject
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
import kotlinx.coroutines.flow.filterIsInstance
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
|
|
@ -57,6 +57,7 @@ internal class DefaultSendComponent @AssistedInject constructor(
|
|||
@Assisted appComponentContext: AppComponentContext,
|
||||
@Assisted private val params: SendComponent.Params,
|
||||
private val analyticsEventHandler: AnalyticsEventHandler,
|
||||
private val amountComponentFactory: SendAmountComponent.Factory,
|
||||
private val feeSelectorComponentFactory: FeeSelectorBlockComponent.Factory,
|
||||
private val sendDestinationComponentFactory: SendDestinationComponent.Factory,
|
||||
) : SendComponent, AppComponentContext by appComponentContext {
|
||||
|
|
@ -113,7 +114,7 @@ internal class DefaultSendComponent @AssistedInject constructor(
|
|||
activeComponent.updateState(model.uiState.value)
|
||||
}
|
||||
}
|
||||
is SendAmountComponent -> {
|
||||
is DefaultSendAmountComponent -> {
|
||||
analyticsEventHandler.send(
|
||||
CommonSendAnalyticEvents.AmountScreenOpened(
|
||||
categoryName = model.analyticCategoryName,
|
||||
|
|
@ -180,11 +181,11 @@ internal class DefaultSendComponent @AssistedInject constructor(
|
|||
)
|
||||
|
||||
private fun getAmountComponent(factoryContext: AppComponentContext): ComposableContentComponent {
|
||||
return SendAmountComponent(
|
||||
appComponentContext = factoryContext,
|
||||
return amountComponentFactory.create(
|
||||
context = factoryContext,
|
||||
params = SendAmountComponentParams.AmountParams(
|
||||
state = model.uiState.value.amountUM,
|
||||
currentRoute = model.currentRoute.asStateFlow(),
|
||||
currentRoute = model.currentRoute.filterIsInstance<CommonSendRoute.Amount>(),
|
||||
isBalanceHidingFlow = model.isBalanceHiddenFlow,
|
||||
analyticsCategoryName = model.analyticCategoryName,
|
||||
appCurrency = model.appCurrency,
|
||||
|
|
|
|||
|
|
@ -27,8 +27,8 @@ import com.tangem.features.send.common.ui.state.ConfirmUM
|
|||
import com.tangem.features.send.send.confirm.model.SendConfirmModel
|
||||
import com.tangem.features.send.send.confirm.ui.SendConfirmContent
|
||||
import com.tangem.features.send.send.ui.state.SendUM
|
||||
import com.tangem.features.send.subcomponents.amount.SendAmountBlockComponent
|
||||
import com.tangem.features.send.subcomponents.amount.SendAmountComponentParams
|
||||
import com.tangem.features.send.subcomponents.amount.DefaultSendAmountBlockComponent
|
||||
import com.tangem.features.send.api.subcomponents.amount.SendAmountComponentParams
|
||||
import com.tangem.features.send.subcomponents.destination.DefaultSendDestinationBlockComponent
|
||||
import com.tangem.features.send.subcomponents.notifications.DefaultSendNotificationsComponent
|
||||
import com.tangem.utils.extensions.orZero
|
||||
|
|
@ -60,7 +60,7 @@ internal class SendConfirmComponent(
|
|||
onClick = model::showEditDestination,
|
||||
)
|
||||
|
||||
private val amountBlockComponent = SendAmountBlockComponent(
|
||||
private val amountBlockComponent = DefaultSendAmountBlockComponent(
|
||||
appComponentContext = child("sendConfirmAmountBlock"),
|
||||
params = SendAmountComponentParams.AmountBlockParams(
|
||||
state = model.uiState.value.amountUM,
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@ import com.tangem.domain.txhistory.usecase.GetExplorerTransactionUrlUseCase
|
|||
import com.tangem.domain.utils.convertToSdkAmount
|
||||
import com.tangem.features.send.api.analytics.CommonSendAnalyticEvents
|
||||
import com.tangem.features.send.api.analytics.CommonSendAnalyticEvents.SendScreenSource
|
||||
import com.tangem.features.send.api.subcomponents.amount.SendAmountReduceTrigger
|
||||
import com.tangem.features.send.api.subcomponents.destination.entity.DestinationUM
|
||||
import com.tangem.features.send.api.subcomponents.feeSelector.FeeSelectorCheckReloadListener
|
||||
import com.tangem.features.send.api.subcomponents.feeSelector.FeeSelectorCheckReloadTrigger
|
||||
|
|
@ -69,7 +70,6 @@ import com.tangem.features.send.send.confirm.model.transformers.SendConfirmSendi
|
|||
import com.tangem.features.send.send.confirm.model.transformers.SendConfirmSentStateTransformer
|
||||
import com.tangem.features.send.send.confirm.model.transformers.SendConfirmationNotificationsTransformerV2
|
||||
import com.tangem.features.send.send.ui.state.SendUM
|
||||
import com.tangem.features.send.subcomponents.amount.SendAmountReduceTrigger
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
import com.tangem.utils.extensions.orZero
|
||||
import com.tangem.utils.extensions.stripZeroPlainString
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ import com.tangem.features.send.api.subcomponents.feeSelector.FeeSelectorBlockCo
|
|||
import com.tangem.features.send.common.ui.state.ConfirmUM
|
||||
import com.tangem.features.send.common.ui.tapHelp
|
||||
import com.tangem.features.send.send.ui.state.SendUM
|
||||
import com.tangem.features.send.subcomponents.amount.SendAmountBlockComponent
|
||||
import com.tangem.features.send.subcomponents.amount.DefaultSendAmountBlockComponent
|
||||
import com.tangem.features.send.subcomponents.destination.DefaultSendDestinationBlockComponent
|
||||
import com.tangem.features.send.subcomponents.notifications
|
||||
import com.tangem.features.send.subcomponents.notifications.DefaultSendNotificationsComponent
|
||||
|
|
@ -31,7 +31,7 @@ private const val BLOCKS_KEY = "BLOCKS_KEY"
|
|||
internal fun SendConfirmContent(
|
||||
sendUM: SendUM,
|
||||
destinationBlockComponent: DefaultSendDestinationBlockComponent,
|
||||
amountBlockComponent: SendAmountBlockComponent,
|
||||
amountBlockComponent: DefaultSendAmountBlockComponent,
|
||||
feeSelectorBlockComponent: FeeSelectorBlockComponent,
|
||||
notificationsComponent: DefaultSendNotificationsComponent,
|
||||
notificationsUM: ImmutableList<NotificationUM>,
|
||||
|
|
@ -73,7 +73,7 @@ internal fun SendConfirmContent(
|
|||
|
||||
private fun LazyListScope.blocks(
|
||||
destinationBlockComponent: DefaultSendDestinationBlockComponent,
|
||||
amountBlockComponent: SendAmountBlockComponent,
|
||||
amountBlockComponent: DefaultSendAmountBlockComponent,
|
||||
feeSelectorBlockComponent: FeeSelectorBlockComponent,
|
||||
) {
|
||||
item(key = BLOCKS_KEY) {
|
||||
|
|
|
|||
|
|
@ -41,13 +41,15 @@ import com.tangem.domain.transaction.usecase.GetFeeUseCase
|
|||
import com.tangem.domain.transaction.usecase.gasless.GetFeeForGaslessUseCase
|
||||
import com.tangem.domain.transaction.usecase.gasless.GetFeeForTokenUseCase
|
||||
import com.tangem.domain.utils.convertToSdkAmount
|
||||
import com.tangem.domain.wallets.models.GetUserWalletError
|
||||
import com.tangem.domain.wallets.models.errors.GetUserWalletError
|
||||
import com.tangem.domain.wallets.usecase.GetUserWalletUseCase
|
||||
import com.tangem.features.send.api.SendComponent
|
||||
import com.tangem.features.send.api.analytics.CommonSendAnalyticEvents
|
||||
import com.tangem.features.send.api.analytics.CommonSendAnalyticEvents.SendScreenSource
|
||||
import com.tangem.features.send.api.entity.PredefinedValues
|
||||
import com.tangem.features.send.api.entity.isFromMainScreenQr
|
||||
import com.tangem.features.send.api.subcomponents.amount.SendAmountComponent
|
||||
import com.tangem.features.send.api.subcomponents.amount.SendAmountUpdateTrigger
|
||||
import com.tangem.features.send.api.subcomponents.destination.SendDestinationComponent
|
||||
import com.tangem.features.send.api.subcomponents.destination.entity.DestinationUM
|
||||
import com.tangem.features.send.api.subcomponents.feeSelector.entity.FeeSelectorUM
|
||||
|
|
@ -58,8 +60,6 @@ import com.tangem.features.send.send.analytics.SendAnalyticEvents
|
|||
import com.tangem.features.send.send.confirm.SendConfirmComponent
|
||||
import com.tangem.features.send.send.success.SendConfirmSuccessComponent
|
||||
import com.tangem.features.send.send.ui.state.SendUM
|
||||
import com.tangem.features.send.subcomponents.amount.SendAmountComponent
|
||||
import com.tangem.features.send.subcomponents.amount.SendAmountUpdateTrigger
|
||||
import com.tangem.features.send.subcomponents.destination.model.transformers.SendDestinationInitialStateTransformer
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
import com.tangem.utils.coroutines.JobHolder
|
||||
|
|
|
|||
|
|
@ -8,18 +8,22 @@ import com.tangem.common.ui.amountScreen.models.AmountState
|
|||
import com.tangem.common.ui.amountScreen.ui.AmountBlockV2
|
||||
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.api.entity.PredefinedValues
|
||||
import com.tangem.features.send.api.subcomponents.amount.SendAmountBlockComponent
|
||||
import com.tangem.features.send.api.subcomponents.amount.SendAmountComponentParams
|
||||
import com.tangem.features.send.subcomponents.amount.model.SendAmountModel
|
||||
import dagger.assisted.Assisted
|
||||
import dagger.assisted.AssistedFactory
|
||||
import dagger.assisted.AssistedInject
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
|
||||
internal class SendAmountBlockComponent(
|
||||
appComponentContext: AppComponentContext,
|
||||
private val params: SendAmountComponentParams.AmountBlockParams,
|
||||
val onResult: (AmountState) -> Unit,
|
||||
val onClick: () -> Unit,
|
||||
) : ComposableContentComponent, AppComponentContext by appComponentContext {
|
||||
internal class DefaultSendAmountBlockComponent @AssistedInject constructor(
|
||||
@Assisted appComponentContext: AppComponentContext,
|
||||
@Assisted private val params: SendAmountComponentParams.AmountBlockParams,
|
||||
@Assisted val onResult: (AmountState) -> Unit,
|
||||
@Assisted val onClick: () -> Unit,
|
||||
) : SendAmountBlockComponent, AppComponentContext by appComponentContext {
|
||||
|
||||
private val model: SendAmountModel = getOrCreateModel(params = params)
|
||||
|
||||
|
|
@ -29,7 +33,7 @@ internal class SendAmountBlockComponent(
|
|||
}.launchIn(componentScope)
|
||||
}
|
||||
|
||||
fun updateState(amountUM: AmountState) = model.updateState(amountUM)
|
||||
override fun updateState(amountUM: AmountState) = model.updateState(amountUM)
|
||||
|
||||
@Composable
|
||||
override fun Content(modifier: Modifier) {
|
||||
|
|
@ -44,4 +48,14 @@ internal class SendAmountBlockComponent(
|
|||
modifier = modifier,
|
||||
)
|
||||
}
|
||||
|
||||
@AssistedFactory
|
||||
interface Factory : SendAmountBlockComponent.Factory {
|
||||
override fun create(
|
||||
context: AppComponentContext,
|
||||
params: SendAmountComponentParams.AmountBlockParams,
|
||||
onClick: () -> Unit,
|
||||
onResult: (AmountState) -> Unit,
|
||||
): DefaultSendAmountBlockComponent
|
||||
}
|
||||
}
|
||||
|
|
@ -5,22 +5,24 @@ import androidx.compose.runtime.getValue
|
|||
import androidx.compose.ui.Modifier
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import com.tangem.common.ui.amountScreen.models.AmountState
|
||||
import com.tangem.common.ui.navigationButtons.NavigationModelCallback
|
||||
import com.tangem.core.decompose.context.AppComponentContext
|
||||
import com.tangem.core.decompose.model.getOrCreateModel
|
||||
import com.tangem.core.ui.decompose.ComposableContentComponent
|
||||
import com.tangem.domain.wallets.models.GetUserWalletError
|
||||
import com.tangem.features.send.api.subcomponents.amount.SendAmountComponent
|
||||
import com.tangem.features.send.api.subcomponents.amount.SendAmountComponentParams
|
||||
import com.tangem.features.send.subcomponents.amount.model.SendAmountModel
|
||||
import com.tangem.features.send.subcomponents.amount.ui.SendAmountContent
|
||||
import dagger.assisted.Assisted
|
||||
import dagger.assisted.AssistedFactory
|
||||
import dagger.assisted.AssistedInject
|
||||
|
||||
internal class SendAmountComponent(
|
||||
appComponentContext: AppComponentContext,
|
||||
private val params: SendAmountComponentParams.AmountParams,
|
||||
) : ComposableContentComponent, AppComponentContext by appComponentContext {
|
||||
internal class DefaultSendAmountComponent @AssistedInject constructor(
|
||||
@Assisted appComponentContext: AppComponentContext,
|
||||
@Assisted private val params: SendAmountComponentParams.AmountParams,
|
||||
) : SendAmountComponent, AppComponentContext by appComponentContext {
|
||||
|
||||
private val model: SendAmountModel = getOrCreateModel(params = params)
|
||||
|
||||
fun updateState(amountUM: AmountState) = model.updateState(amountUM)
|
||||
override fun updateState(amountUM: AmountState) = model.updateState(amountUM)
|
||||
|
||||
@Composable
|
||||
override fun Content(modifier: Modifier) {
|
||||
|
|
@ -35,10 +37,11 @@ internal class SendAmountComponent(
|
|||
)
|
||||
}
|
||||
|
||||
interface ModelCallback : NavigationModelCallback {
|
||||
fun onAmountResult(amountUM: AmountState, isResetPredefined: Boolean)
|
||||
fun onConvertToAnotherToken(lastAmount: String, isEnterInFiatSelected: Boolean)
|
||||
fun resetSendNavigation()
|
||||
fun onError(error: GetUserWalletError)
|
||||
@AssistedFactory
|
||||
interface Factory : SendAmountComponent.Factory {
|
||||
override fun create(
|
||||
context: AppComponentContext,
|
||||
params: SendAmountComponentParams.AmountParams,
|
||||
): DefaultSendAmountComponent
|
||||
}
|
||||
}
|
||||
|
|
@ -1,46 +1,15 @@
|
|||
package com.tangem.features.send.subcomponents.amount
|
||||
|
||||
import com.tangem.common.ui.amountScreen.converters.AmountReduceByTransformer.ReduceByData
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import com.tangem.features.send.api.subcomponents.amount.SendAmountReduceListener
|
||||
import com.tangem.features.send.api.subcomponents.amount.SendAmountReduceTrigger
|
||||
import com.tangem.features.send.api.subcomponents.amount.SendAmountUpdateListener
|
||||
import com.tangem.features.send.api.subcomponents.amount.SendAmountUpdateTrigger
|
||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||
import java.math.BigDecimal
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
/**
|
||||
* Trigger for reducing amount from another component
|
||||
*/
|
||||
interface SendAmountReduceTrigger {
|
||||
suspend fun triggerReduceBy(reduceBy: ReduceByData)
|
||||
suspend fun triggerReduceTo(reduceTo: BigDecimal)
|
||||
suspend fun triggerIgnoreReduce()
|
||||
}
|
||||
|
||||
/**
|
||||
* Trigger for reducing amount from another component
|
||||
*/
|
||||
interface SendAmountReduceListener {
|
||||
val reduceToTriggerFlow: Flow<BigDecimal>
|
||||
val reduceByTriggerFlow: Flow<ReduceByData>
|
||||
val ignoreReduceTriggerFlow: Flow<Unit>
|
||||
}
|
||||
|
||||
/**
|
||||
* Trigger amount change from another component.
|
||||
* Different from another triggers because it takes raw string instead of BigDecimal
|
||||
*/
|
||||
interface SendAmountUpdateTrigger {
|
||||
suspend fun triggerUpdateAmount(amountValue: String, isEnterInFiatSelected: Boolean?)
|
||||
}
|
||||
|
||||
/**
|
||||
* Trigger amount change from another component.
|
||||
* Different from another triggers because it takes raw string instead of BigDecimal
|
||||
*/
|
||||
interface SendAmountUpdateListener {
|
||||
val updateAmountTriggerFlow: Flow<Pair<String, Boolean?>>
|
||||
}
|
||||
|
||||
@Singleton
|
||||
internal class DefaultSendAmountReduceTrigger @Inject constructor() :
|
||||
SendAmountReduceTrigger,
|
||||
|
|
@ -1,60 +0,0 @@
|
|||
package com.tangem.features.send.subcomponents.amount
|
||||
|
||||
import com.tangem.common.ui.amountScreen.models.AmountState
|
||||
import com.tangem.domain.appcurrency.model.AppCurrency
|
||||
import com.tangem.domain.models.account.Account
|
||||
import com.tangem.domain.models.currency.CryptoCurrency
|
||||
import com.tangem.domain.models.currency.CryptoCurrencyStatus
|
||||
import com.tangem.domain.models.wallet.UserWallet
|
||||
import com.tangem.domain.models.wallet.UserWalletId
|
||||
import com.tangem.features.send.api.analytics.CommonSendAnalyticEvents
|
||||
import com.tangem.features.send.api.entity.PredefinedValues
|
||||
import com.tangem.features.send.common.CommonSendRoute
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
|
||||
internal sealed class SendAmountComponentParams {
|
||||
|
||||
abstract val state: AmountState
|
||||
abstract val analyticsCategoryName: String
|
||||
abstract val analyticsSendSource: CommonSendAnalyticEvents.CommonSendSource
|
||||
abstract val userWalletId: UserWalletId
|
||||
abstract val appCurrency: AppCurrency
|
||||
abstract val predefinedValues: PredefinedValues
|
||||
abstract val cryptoCurrency: CryptoCurrency
|
||||
abstract val cryptoCurrencyStatusFlow: StateFlow<CryptoCurrencyStatus>
|
||||
abstract val isBalanceHidingFlow: StateFlow<Boolean>
|
||||
abstract val accountFlow: StateFlow<Account?>
|
||||
abstract val isAccountModeFlow: StateFlow<Boolean>
|
||||
|
||||
data class AmountParams(
|
||||
override val state: AmountState,
|
||||
override val analyticsCategoryName: String,
|
||||
override val userWalletId: UserWalletId,
|
||||
override val appCurrency: AppCurrency,
|
||||
override val predefinedValues: PredefinedValues,
|
||||
override val cryptoCurrency: CryptoCurrency,
|
||||
override val cryptoCurrencyStatusFlow: StateFlow<CryptoCurrencyStatus>,
|
||||
override val isBalanceHidingFlow: StateFlow<Boolean>,
|
||||
override val analyticsSendSource: CommonSendAnalyticEvents.CommonSendSource,
|
||||
override val accountFlow: StateFlow<Account?>,
|
||||
override val isAccountModeFlow: StateFlow<Boolean>,
|
||||
val callback: SendAmountComponent.ModelCallback,
|
||||
val currentRoute: StateFlow<CommonSendRoute>,
|
||||
) : SendAmountComponentParams()
|
||||
|
||||
data class AmountBlockParams(
|
||||
override val state: AmountState,
|
||||
override val analyticsCategoryName: String,
|
||||
override val appCurrency: AppCurrency,
|
||||
override val userWalletId: UserWalletId,
|
||||
override val predefinedValues: PredefinedValues,
|
||||
override val cryptoCurrency: CryptoCurrency,
|
||||
override val cryptoCurrencyStatusFlow: StateFlow<CryptoCurrencyStatus>,
|
||||
override val isBalanceHidingFlow: StateFlow<Boolean>,
|
||||
override val analyticsSendSource: CommonSendAnalyticEvents.CommonSendSource,
|
||||
override val accountFlow: StateFlow<Account?>,
|
||||
override val isAccountModeFlow: StateFlow<Boolean>,
|
||||
val userWallet: UserWallet,
|
||||
val blockClickEnableFlow: StateFlow<Boolean>,
|
||||
) : SendAmountComponentParams()
|
||||
}
|
||||
|
|
@ -1,10 +1,9 @@
|
|||
package com.tangem.features.send.subcomponents.amount.di
|
||||
|
||||
import com.tangem.features.send.api.subcomponents.amount.*
|
||||
import com.tangem.features.send.subcomponents.amount.DefaultSendAmountBlockComponent
|
||||
import com.tangem.features.send.subcomponents.amount.DefaultSendAmountComponent
|
||||
import com.tangem.features.send.subcomponents.amount.DefaultSendAmountReduceTrigger
|
||||
import com.tangem.features.send.subcomponents.amount.SendAmountReduceListener
|
||||
import com.tangem.features.send.subcomponents.amount.SendAmountReduceTrigger
|
||||
import com.tangem.features.send.subcomponents.amount.SendAmountUpdateListener
|
||||
import com.tangem.features.send.subcomponents.amount.SendAmountUpdateTrigger
|
||||
import dagger.Binds
|
||||
import dagger.Module
|
||||
import dagger.hilt.InstallIn
|
||||
|
|
@ -15,6 +14,16 @@ import javax.inject.Singleton
|
|||
@Module
|
||||
internal interface SendAmountModule {
|
||||
|
||||
@Singleton
|
||||
@Binds
|
||||
fun provideSendAmountComponentFactory(impl: DefaultSendAmountComponent.Factory): SendAmountComponent.Factory
|
||||
|
||||
@Singleton
|
||||
@Binds
|
||||
fun provideSendAmountBlockComponentFactory(
|
||||
impl: DefaultSendAmountBlockComponent.Factory,
|
||||
): SendAmountBlockComponent.Factory
|
||||
|
||||
@Singleton
|
||||
@Binds
|
||||
fun provideSendAmountReduceTrigger(impl: DefaultSendAmountReduceTrigger): SendAmountReduceTrigger
|
||||
|
|
|
|||
|
|
@ -9,13 +9,13 @@ import com.tangem.common.ui.amountScreen.converters.field.AmountFieldSetMaxAmoun
|
|||
import com.tangem.common.ui.amountScreen.models.AmountParameters
|
||||
import com.tangem.common.ui.amountScreen.models.AmountState
|
||||
import com.tangem.common.ui.amountScreen.models.EnterAmountBoundary
|
||||
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
|
||||
import com.tangem.common.ui.navigationButtons.NavigationButton
|
||||
import com.tangem.common.ui.navigationButtons.NavigationUM
|
||||
import com.tangem.core.analytics.api.AnalyticsEventHandler
|
||||
import com.tangem.core.decompose.di.ModelScoped
|
||||
import com.tangem.core.decompose.model.Model
|
||||
import com.tangem.core.decompose.model.ParamsContainer
|
||||
import com.tangem.common.ui.components.currency.icon.converter.CryptoCurrencyToIconStateConverter
|
||||
import com.tangem.core.ui.extensions.WrappedList
|
||||
import com.tangem.core.ui.extensions.resourceReference
|
||||
import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase
|
||||
|
|
@ -29,19 +29,21 @@ import com.tangem.domain.wallets.usecase.GetUserWalletUseCase
|
|||
import com.tangem.domain.wallets.usecase.GetWalletsUseCase
|
||||
import com.tangem.features.send.api.entity.PredefinedValues
|
||||
import com.tangem.features.send.api.entity.isFromMainScreenQr
|
||||
import com.tangem.features.send.api.subcomponents.amount.AmountRoute
|
||||
import com.tangem.features.send.api.subcomponents.amount.SendAmountComponentParams
|
||||
import com.tangem.features.send.api.subcomponents.amount.SendAmountReduceListener
|
||||
import com.tangem.features.send.api.subcomponents.amount.SendAmountUpdateListener
|
||||
import com.tangem.features.send.api.subcomponents.amount.analytics.CommonSendAmountAnalyticEvents
|
||||
import com.tangem.features.send.api.subcomponents.amount.analytics.CommonSendAmountAnalyticEvents.SelectedCurrencyType
|
||||
import com.tangem.features.send.api.subcomponents.feeSelector.FeeSelectorReloadTrigger
|
||||
import com.tangem.features.send.common.CommonSendRoute
|
||||
import com.tangem.features.send.subcomponents.amount.SendAmountComponentParams
|
||||
import com.tangem.features.send.subcomponents.amount.SendAmountReduceListener
|
||||
import com.tangem.features.send.subcomponents.amount.SendAmountUpdateListener
|
||||
import com.tangem.features.send.impl.R
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
import com.tangem.utils.extensions.orZero
|
||||
import com.tangem.utils.isNullOrZero
|
||||
import com.tangem.utils.transformer.update
|
||||
import kotlinx.coroutines.flow.*
|
||||
import kotlinx.coroutines.launch
|
||||
import javax.inject.Inject
|
||||
import kotlin.properties.Delegates
|
||||
|
||||
|
|
@ -271,13 +273,17 @@ internal class SendAmountModel @Inject constructor(
|
|||
|
||||
override fun onConvertToAnotherToken() {
|
||||
val amountParams = params as? SendAmountComponentParams.AmountParams ?: return
|
||||
if (amountParams.currentRoute.value.isEditMode) {
|
||||
sendAmountAlertFactory.showResetSendingAlert {
|
||||
params.callback.resetSendNavigation()
|
||||
modelScope.launch {
|
||||
var isEditMode = false
|
||||
amountParams.currentRoute.collect { route -> isEditMode = route.isEditMode }
|
||||
if (isEditMode) {
|
||||
sendAmountAlertFactory.showResetSendingAlert {
|
||||
params.callback.resetSendNavigation()
|
||||
confirmConvertToToken()
|
||||
}
|
||||
} else {
|
||||
confirmConvertToToken()
|
||||
}
|
||||
} else {
|
||||
confirmConvertToToken()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -361,7 +367,9 @@ internal class SendAmountModel @Inject constructor(
|
|||
val params = params as? SendAmountComponentParams.AmountParams ?: return
|
||||
combine(
|
||||
flow = uiState,
|
||||
flow2 = params.currentRoute.filterIsInstance<CommonSendRoute.Amount>(),
|
||||
// Filter on the public AmountRoute interface (not the internal CommonSendRoute.Amount) so an
|
||||
// external host (e.g. staking) that supplies its own AmountRoute is not silently dropped here.
|
||||
flow2 = params.currentRoute.filterIsInstance<AmountRoute>(),
|
||||
transform = { state, route -> state to route },
|
||||
).onEach { (state, route) ->
|
||||
setSendWithSwapAvailability()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue