Updated on 2026-08-14

This commit is contained in:
Tangem 2026-06-19 20:01:38 +05:00
parent 4d75db3cdd
commit 22dc2eb3e9
57 changed files with 931 additions and 258 deletions

View file

@ -55,6 +55,13 @@ interface ChooseTokenBridge : ChooseTokenBridgeInternal {
isAppBarShown = false,
isShowSingleCurrencyWallets = true,
)
val Transfer = Settings(
title = resourceReference(R.string.common_transfer),
isShowMarketBlock = false,
isShowPaymentAccount = false,
isAppBarShown = false,
isShowSingleCurrencyWallets = true,
)
}
}

View file

@ -1,17 +1,20 @@
package com.tangem.features.commonfeatures.api.addfunds
package com.tangem.features.commonfeatures.api.managefunds
import com.tangem.core.decompose.factory.ComponentFactory
import com.tangem.core.ui.decompose.ComposableBottomSheetComponent
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.wallet.UserWalletId
interface AddFundsComponent : ComposableBottomSheetComponent {
interface ManageFundsComponent : ComposableBottomSheetComponent {
data class Params(
val launchMode: LaunchMode,
val onDismiss: () -> Unit,
val flowType: FlowType = FlowType.AddFunds,
)
enum class FlowType { AddFunds, Transfer }
sealed interface LaunchMode {
data class ChooseToken(val userWalletId: UserWalletId) : LaunchMode
@ -25,5 +28,5 @@ interface AddFundsComponent : ComposableBottomSheetComponent {
) : LaunchMode
}
interface Factory : ComponentFactory<Params, AddFundsComponent>
interface Factory : ComponentFactory<Params, ManageFundsComponent>
}

View file

@ -1,16 +0,0 @@
package com.tangem.features.commonfeatures.impl.addfunds.di
import com.tangem.features.commonfeatures.api.addfunds.AddFundsComponent
import com.tangem.features.commonfeatures.impl.addfunds.DefaultAddFundsComponent
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
@Module
@InstallIn(SingletonComponent::class)
internal interface AddFundsComponentModule {
@Binds
fun bindAddFundsComponentFactory(factory: DefaultAddFundsComponent.Factory): AddFundsComponent.Factory
}

View file

@ -1,35 +0,0 @@
package com.tangem.features.commonfeatures.impl.addfunds.model
import com.tangem.core.ui.extensions.TextReference
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.features.commonfeatures.impl.R
import com.tangem.core.ui.R as CoreR
internal data class AddFundsRouteUiSpec(
val title: TextReference,
val shouldApplyHorizontalPadding: Boolean,
val shouldFillHeight: Boolean,
)
internal fun AddFundsModel.UiRoute.uiSpec(): AddFundsRouteUiSpec = when (this) {
AddFundsModel.UiRoute.Loading -> AddFundsRouteUiSpec(
title = resourceReference(R.string.common_add_funds),
shouldApplyHorizontalPadding = false,
shouldFillHeight = false,
)
AddFundsModel.UiRoute.ChooseToken -> AddFundsRouteUiSpec(
title = resourceReference(R.string.common_add_funds),
shouldApplyHorizontalPadding = false,
shouldFillHeight = true,
)
AddFundsModel.UiRoute.UserPortfolio -> AddFundsRouteUiSpec(
title = resourceReference(R.string.common_add_funds),
shouldApplyHorizontalPadding = false,
shouldFillHeight = false,
)
AddFundsModel.UiRoute.TokenActions -> AddFundsRouteUiSpec(
title = resourceReference(CoreR.string.common_get_token),
shouldApplyHorizontalPadding = true,
shouldFillHeight = true,
)
}

View file

@ -1,4 +1,4 @@
package com.tangem.features.commonfeatures.impl.addfunds
package com.tangem.features.commonfeatures.impl.managefunds
import androidx.compose.animation.AnimatedContent
import androidx.compose.foundation.layout.fillMaxSize
@ -22,51 +22,56 @@ import com.tangem.core.ui.ds2.button.TangemButton
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemeRedesign
import com.tangem.core.ui.test.BaseBottomSheetTestTags
import com.tangem.features.commonfeatures.api.addfunds.AddFundsComponent
import com.tangem.features.commonfeatures.api.managefunds.ManageFundsComponent
import com.tangem.features.commonfeatures.api.choosetoken.ChooseTokenComponent
import com.tangem.features.commonfeatures.impl.addfunds.model.AddFundsModel
import com.tangem.features.commonfeatures.impl.addfunds.model.uiSpec
import com.tangem.features.commonfeatures.impl.managefunds.model.ManageFundsModel
import com.tangem.features.commonfeatures.impl.managefunds.model.uiSpec
import com.tangem.common.ui.markets.action.TokenActionsContext
import com.tangem.features.commonfeatures.impl.tokenactions.TokenActionsComponent
import com.tangem.features.commonfeatures.impl.userportfolio.UserPortfolioComponent
import com.tangem.features.commonfeatures.impl.R
import com.tangem.features.wallet.featuretoggles.WalletFeatureToggles
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import com.tangem.core.ui.R as CoreR
@Suppress("LongParameterList")
internal class DefaultAddFundsComponent @AssistedInject constructor(
internal class DefaultManageFundsComponent @AssistedInject constructor(
@Assisted appComponentContext: AppComponentContext,
@Assisted private val params: AddFundsComponent.Params,
@Assisted private val params: ManageFundsComponent.Params,
chooseTokenComponentFactory: ChooseTokenComponent.Factory,
tokenActionsComponentFactory: TokenActionsComponent.Factory,
userPortfolioComponentFactory: UserPortfolioComponent.Factory,
walletFeatureToggles: WalletFeatureToggles,
) : AppComponentContext by appComponentContext, AddFundsComponent {
) : AppComponentContext by appComponentContext, ManageFundsComponent {
private val model: AddFundsModel = getOrCreateModel(params)
private val model: ManageFundsModel = getOrCreateModel(params)
private val isCompactTokenActions: Boolean = params.launchMode is AddFundsComponent.LaunchMode.TokenActionsOnly
private val isCompactTokenActions: Boolean = params.launchMode is ManageFundsComponent.LaunchMode.TokenActionsOnly
private val isAddFundsStage1Enabled: Boolean = walletFeatureToggles.isAddFundsStage1Enabled
private val tokenActionsComponent: TokenActionsComponent by lazy {
tokenActionsComponentFactory.create(
context = child(key = "addFundsTokenActions"),
context = child(key = "manageFundsTokenActions"),
params = TokenActionsComponent.Params(
data = model.tokenActionsData,
callbacks = model,
bottomAction = model.currentBottomAction,
isRedesignForced = true,
isCompact = isCompactTokenActions,
context = when (model.flowType) {
ManageFundsComponent.FlowType.AddFunds -> TokenActionsContext.AddFunds
ManageFundsComponent.FlowType.Transfer -> TokenActionsContext.Transfer
},
),
)
}
private val chooseTokenComponent: ChooseTokenComponent? by lazy {
(params.launchMode as? AddFundsComponent.LaunchMode.ChooseToken)?.let {
(params.launchMode as? ManageFundsComponent.LaunchMode.ChooseToken)?.let {
chooseTokenComponentFactory.create(
context = child(key = "addFundsChooseToken"),
context = child(key = "manageFundsChooseToken"),
params = ChooseTokenComponent.Params(
bridge = model.chooseTokenBridge,
),
@ -76,7 +81,7 @@ internal class DefaultAddFundsComponent @AssistedInject constructor(
private val userPortfolioComponent: UserPortfolioComponent by lazy {
userPortfolioComponentFactory.create(
context = child(key = "addFundsUserPortfolio"),
context = child(key = "manageFundsUserPortfolio"),
params = UserPortfolioComponent.Params(
uiState = model.userPortfolioStateController.uiState,
callbacks = object : UserPortfolioComponent.Callbacks {
@ -94,8 +99,8 @@ internal class DefaultAddFundsComponent @AssistedInject constructor(
val canGoBack by model.canGoBack.collectAsStateWithLifecycle()
LaunchedEffect(route) {
if (route != AddFundsModel.UiRoute.UserPortfolio) return@LaunchedEffect
val mode = params.launchMode as? AddFundsComponent.LaunchMode.FilteredByRawId ?: return@LaunchedEffect
if (route != ManageFundsModel.UiRoute.UserPortfolio) return@LaunchedEffect
val mode = params.launchMode as? ManageFundsComponent.LaunchMode.FilteredByRawId ?: return@LaunchedEffect
model.userPortfolioStateController.updateAndWaitNotNullState(
allAvailableData = model.buildAvailableToAddDataForChooser(),
rawCurrencyId = mode.rawCurrencyId,
@ -111,10 +116,10 @@ internal class DefaultAddFundsComponent @AssistedInject constructor(
content = TangemBottomSheetConfigContent.Empty,
),
type = when (params.launchMode) {
is AddFundsComponent.LaunchMode.TokenActionsOnly -> TangemBottomSheetType.Modal
is AddFundsComponent.LaunchMode.ChooseToken -> TangemBottomSheetType.Default
is AddFundsComponent.LaunchMode.FilteredByRawId ->
if (route is AddFundsModel.UiRoute.TokenActions) {
is ManageFundsComponent.LaunchMode.TokenActionsOnly -> TangemBottomSheetType.Modal
is ManageFundsComponent.LaunchMode.ChooseToken -> TangemBottomSheetType.Default
is ManageFundsComponent.LaunchMode.FilteredByRawId ->
if (route is ManageFundsModel.UiRoute.TokenActions) {
TangemBottomSheetType.Default
} else {
TangemBottomSheetType.Modal
@ -122,7 +127,7 @@ internal class DefaultAddFundsComponent @AssistedInject constructor(
},
containerColor = TangemTheme.colors2.surface.level2,
title = {
AddFundsBottomSheetTitle(
ManageFundsBottomSheetTitle(
route = route,
canGoBack = canGoBack,
onBackClick = model::onBack,
@ -131,7 +136,7 @@ internal class DefaultAddFundsComponent @AssistedInject constructor(
},
content = {
val animatedContentModifier =
if (params.launchMode is AddFundsComponent.LaunchMode.ChooseToken) {
if (params.launchMode is ManageFundsComponent.LaunchMode.ChooseToken) {
Modifier.fillMaxSize()
} else {
Modifier
@ -139,11 +144,12 @@ internal class DefaultAddFundsComponent @AssistedInject constructor(
AnimatedContent(
targetState = route,
modifier = animatedContentModifier,
label = "AddFundsContentAnimation",
label = "ManageFundsContentAnimation",
) { animatedRoute ->
AddFundsRouteContent(
ManageFundsRouteContent(
route = animatedRoute,
shouldFillHeight = !isCompactTokenActions && animatedRoute.uiSpec().shouldFillHeight,
shouldFillHeight = !isCompactTokenActions &&
animatedRoute.uiSpec(model.flowType).shouldFillHeight,
)
}
},
@ -152,8 +158,8 @@ internal class DefaultAddFundsComponent @AssistedInject constructor(
}
@Composable
private fun AddFundsRouteContent(route: AddFundsModel.UiRoute, shouldFillHeight: Boolean) {
val spec = route.uiSpec()
private fun ManageFundsRouteContent(route: ManageFundsModel.UiRoute, shouldFillHeight: Boolean) {
val spec = route.uiSpec(model.flowType)
val horizontalPadding = if (spec.shouldApplyHorizontalPadding) {
Modifier.padding(horizontal = TangemTheme.dimens2.x4)
} else {
@ -164,33 +170,33 @@ internal class DefaultAddFundsComponent @AssistedInject constructor(
}
@Composable
private fun RenderRoute(route: AddFundsModel.UiRoute, modifier: Modifier = Modifier) {
private fun RenderRoute(route: ManageFundsModel.UiRoute, modifier: Modifier = Modifier) {
when (route) {
AddFundsModel.UiRoute.Loading -> Unit
AddFundsModel.UiRoute.ChooseToken -> chooseTokenComponent?.Content(modifier)
AddFundsModel.UiRoute.UserPortfolio -> CompositionLocalProvider(
ManageFundsModel.UiRoute.Loading -> Unit
ManageFundsModel.UiRoute.ChooseToken -> chooseTokenComponent?.Content(modifier)
ManageFundsModel.UiRoute.UserPortfolio -> CompositionLocalProvider(
LocalTangemBottomSheetContentBottomInset provides TangemTheme.dimens2.x4,
) {
userPortfolioComponent.Content(modifier)
}
AddFundsModel.UiRoute.TokenActions -> tokenActionsComponent.Content(modifier)
ManageFundsModel.UiRoute.TokenActions -> tokenActionsComponent.Content(modifier)
}
}
@Composable
private fun AddFundsBottomSheetTitle(
route: AddFundsModel.UiRoute,
private fun ManageFundsBottomSheetTitle(
route: ManageFundsModel.UiRoute,
canGoBack: Boolean,
onBackClick: () -> Unit,
onCloseClick: () -> Unit,
) {
TangemTopBar(
title = route.uiSpec().title,
title = route.uiSpec(model.flowType).title,
type = TangemTopBarType.BottomSheet,
startContent = if (canGoBack) {
{
TangemButton(
iconStart = TangemIconUM.Icon(iconRes = CoreR.drawable.ic_arrow_back_28),
iconStart = TangemIconUM.Icon(iconRes = R.drawable.ic_arrow_back_28),
onClick = onBackClick,
size = TangemButton.Size.X11,
variant = TangemButton.Variant.Material,
@ -202,7 +208,7 @@ internal class DefaultAddFundsComponent @AssistedInject constructor(
endContent = {
TangemButton(
modifier = Modifier.testTag(BaseBottomSheetTestTags.CLOSE_BUTTON),
iconStart = TangemIconUM.Icon(iconRes = CoreR.drawable.ic_close_24),
iconStart = TangemIconUM.Icon(iconRes = R.drawable.ic_close_24),
onClick = onCloseClick,
size = TangemButton.Size.X11,
variant = TangemButton.Variant.Material,
@ -221,7 +227,10 @@ internal class DefaultAddFundsComponent @AssistedInject constructor(
}
@AssistedFactory
interface Factory : AddFundsComponent.Factory {
override fun create(context: AppComponentContext, params: AddFundsComponent.Params): DefaultAddFundsComponent
interface Factory : ManageFundsComponent.Factory {
override fun create(
context: AppComponentContext,
params: ManageFundsComponent.Params,
): DefaultManageFundsComponent
}
}

View file

@ -1,23 +1,23 @@
package com.tangem.features.commonfeatures.impl.addfunds.analytics
package com.tangem.features.commonfeatures.impl.managefunds.analytics
import com.tangem.core.analytics.models.AnalyticsEvent
import com.tangem.core.analytics.models.AnalyticsParam
internal sealed class AddFundsAnalyticsEvent(
internal sealed class ManageFundsAnalyticsEvent(
event: String,
params: Map<String, String> = emptyMap(),
) : AnalyticsEvent(category = CATEGORY, event = event, params = params) {
class MethodScreenOpened(source: String) : AddFundsAnalyticsEvent(
class MethodScreenOpened(source: String) : ManageFundsAnalyticsEvent(
event = "Method Screen Opened",
params = mapOf(AnalyticsParam.SOURCE to source),
)
class ButtonBuy : AddFundsAnalyticsEvent(event = "Button - Buy")
class ButtonBuy : ManageFundsAnalyticsEvent(event = "Button - Buy")
class ButtonSwap : AddFundsAnalyticsEvent(event = "Button - Swap")
class ButtonSwap : ManageFundsAnalyticsEvent(event = "Button - Swap")
class ButtonReceive : AddFundsAnalyticsEvent(event = "Button - Receive")
class ButtonReceive : ManageFundsAnalyticsEvent(event = "Button - Receive")
companion object {
private const val CATEGORY = "Add Funds"

View file

@ -0,0 +1,16 @@
package com.tangem.features.commonfeatures.impl.managefunds.di
import com.tangem.features.commonfeatures.api.managefunds.ManageFundsComponent
import com.tangem.features.commonfeatures.impl.managefunds.DefaultManageFundsComponent
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
@Module
@InstallIn(SingletonComponent::class)
internal interface ManageFundsComponentModule {
@Binds
fun bindManageFundsComponentFactory(factory: DefaultManageFundsComponent.Factory): ManageFundsComponent.Factory
}

View file

@ -1,8 +1,8 @@
package com.tangem.features.commonfeatures.impl.addfunds.di
package com.tangem.features.commonfeatures.impl.managefunds.di
import com.tangem.core.decompose.di.ModelComponent
import com.tangem.core.decompose.model.Model
import com.tangem.features.commonfeatures.impl.addfunds.model.AddFundsModel
import com.tangem.features.commonfeatures.impl.managefunds.model.ManageFundsModel
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
@ -11,10 +11,10 @@ import dagger.multibindings.IntoMap
@Module
@InstallIn(ModelComponent::class)
internal interface AddFundsModelModule {
internal interface ManageFundsModelModule {
@Binds
@IntoMap
@ClassKey(AddFundsModel::class)
fun addFundsModel(model: AddFundsModel): Model
@ClassKey(ManageFundsModel::class)
fun manageFundsModel(model: ManageFundsModel): Model
}

View file

@ -1,4 +1,4 @@
package com.tangem.features.commonfeatures.impl.addfunds.model
package com.tangem.features.commonfeatures.impl.managefunds.model
import androidx.compose.runtime.Immutable
import com.tangem.blockchainsdk.compatibility.getTokenIdIfL2Network
@ -19,14 +19,14 @@ 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.wallets.usecase.GetUserWalletUseCase
import com.tangem.features.commonfeatures.api.addfunds.AddFundsComponent
import com.tangem.features.commonfeatures.api.managefunds.ManageFundsComponent
import com.tangem.features.commonfeatures.api.addtoportfolio.AvailableToAddData
import com.tangem.features.commonfeatures.api.addtoportfolio.AvailableToAddWallet
import com.tangem.features.commonfeatures.api.choosetoken.ChooseTokenAnalyticsPayload
import com.tangem.features.commonfeatures.api.choosetoken.ChooseTokenBridge
import com.tangem.features.commonfeatures.api.choosetoken.ChooseTokenResult
import com.tangem.features.commonfeatures.api.tokenactions.BottomAction
import com.tangem.features.commonfeatures.impl.addfunds.analytics.AddFundsAnalyticsEvent
import com.tangem.features.commonfeatures.impl.managefunds.analytics.ManageFundsAnalyticsEvent
import com.tangem.features.commonfeatures.impl.tokenactions.TokenActionsComponent
import com.tangem.features.commonfeatures.impl.userportfolio.state.UserPortfolioStateController
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
@ -37,7 +37,7 @@ import javax.inject.Inject
@ModelScoped
@Suppress("LongParameterList")
internal class AddFundsModel @Inject constructor(
internal class ManageFundsModel @Inject constructor(
paramsContainer: ParamsContainer,
chooseTokenBridgeFactory: ChooseTokenBridge.Factory,
userPortfolioStateControllerFactory: UserPortfolioStateController.Factory,
@ -50,8 +50,9 @@ internal class AddFundsModel @Inject constructor(
override val dispatchers: CoroutineDispatcherProvider,
) : Model(), TokenActionsComponent.Callbacks {
private val params = paramsContainer.require<AddFundsComponent.Params>()
val launchMode: AddFundsComponent.LaunchMode = params.launchMode
private val params = paramsContainer.require<ManageFundsComponent.Params>()
val launchMode: ManageFundsComponent.LaunchMode = params.launchMode
val flowType: ManageFundsComponent.FlowType = params.flowType
private val routeStack = MutableStateFlow(listOf<UiRoute>(UiRoute.Loading))
@ -95,7 +96,10 @@ internal class AddFundsModel @Inject constructor(
val chooseTokenBridge: ChooseTokenBridge by lazy {
chooseTokenBridgeFactory.create(
modelScope = modelScope,
settings = ChooseTokenBridge.Settings.AddFunds,
settings = when (flowType) {
ManageFundsComponent.FlowType.AddFunds -> ChooseTokenBridge.Settings.AddFunds
ManageFundsComponent.FlowType.Transfer -> ChooseTokenBridge.Settings.Transfer
},
analyticsPayload = setOf(ChooseTokenAnalyticsPayload.ScreensSources(SCREEN_SOURCE)),
)
}
@ -116,9 +120,9 @@ internal class AddFundsModel @Inject constructor(
init {
when (val mode = launchMode) {
is AddFundsComponent.LaunchMode.ChooseToken -> initChooseToken(mode)
is AddFundsComponent.LaunchMode.TokenActionsOnly -> initTokenActionsOnly(mode)
is AddFundsComponent.LaunchMode.FilteredByRawId -> initFilteredByRawId(mode)
is ManageFundsComponent.LaunchMode.ChooseToken -> initChooseToken(mode)
is ManageFundsComponent.LaunchMode.TokenActionsOnly -> initTokenActionsOnly(mode)
is ManageFundsComponent.LaunchMode.FilteredByRawId -> initFilteredByRawId(mode)
}
}
@ -143,9 +147,9 @@ internal class AddFundsModel @Inject constructor(
override fun onQuickActionClick(action: TokenActionsBSContentUM.Action, shouldDismiss: Boolean) {
val event = when (action) {
TokenActionsBSContentUM.Action.Buy -> AddFundsAnalyticsEvent.ButtonBuy()
TokenActionsBSContentUM.Action.Exchange -> AddFundsAnalyticsEvent.ButtonSwap()
TokenActionsBSContentUM.Action.Receive -> AddFundsAnalyticsEvent.ButtonReceive()
TokenActionsBSContentUM.Action.Buy -> ManageFundsAnalyticsEvent.ButtonBuy()
TokenActionsBSContentUM.Action.Exchange -> ManageFundsAnalyticsEvent.ButtonSwap()
TokenActionsBSContentUM.Action.Receive -> ManageFundsAnalyticsEvent.ButtonReceive()
else -> null
}
event?.let { analyticsEventHandler.send(it) }
@ -168,10 +172,10 @@ internal class AddFundsModel @Inject constructor(
)
}
private fun initChooseToken(mode: AddFundsComponent.LaunchMode.ChooseToken) {
private fun initChooseToken(mode: ManageFundsComponent.LaunchMode.ChooseToken) {
chooseTokenBridge.selectWalletTab(mode.userWalletId)
analyticsEventHandler.send(
AddFundsAnalyticsEvent.MethodScreenOpened(source = AddFundsAnalyticsEvent.SOURCE_MAIN_SCREEN),
ManageFundsAnalyticsEvent.MethodScreenOpened(source = ManageFundsAnalyticsEvent.SOURCE_MAIN_SCREEN),
)
replaceRoot(UiRoute.ChooseToken)
modelScope.launch {
@ -182,7 +186,7 @@ internal class AddFundsModel @Inject constructor(
}
}
private fun initTokenActionsOnly(mode: AddFundsComponent.LaunchMode.TokenActionsOnly) {
private fun initTokenActionsOnly(mode: ManageFundsComponent.LaunchMode.TokenActionsOnly) {
modelScope.launch {
val wallet = getUserWalletUseCase.invokeFlow(mode.userWalletId)
.mapNotNull { it.getOrNull() }
@ -206,7 +210,7 @@ internal class AddFundsModel @Inject constructor(
}
}
private fun initFilteredByRawId(mode: AddFundsComponent.LaunchMode.FilteredByRawId) {
private fun initFilteredByRawId(mode: ManageFundsComponent.LaunchMode.FilteredByRawId) {
modelScope.launch {
val entries = collectFilteredEntries(mode.rawCurrencyId)
when (entries.size) {

View file

@ -0,0 +1,38 @@
package com.tangem.features.commonfeatures.impl.managefunds.model
import com.tangem.core.ui.extensions.TextReference
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.features.commonfeatures.api.managefunds.ManageFundsComponent
import com.tangem.features.commonfeatures.impl.R
internal data class ManageFundsRouteUiSpec(
val title: TextReference,
val shouldApplyHorizontalPadding: Boolean,
val shouldFillHeight: Boolean,
)
internal fun ManageFundsModel.UiRoute.uiSpec(flowType: ManageFundsComponent.FlowType): ManageFundsRouteUiSpec {
val isTransfer = flowType == ManageFundsComponent.FlowType.Transfer
return when (this) {
ManageFundsModel.UiRoute.Loading -> ManageFundsRouteUiSpec(
title = resourceReference(if (isTransfer) R.string.common_choose_token else R.string.common_add_funds),
shouldApplyHorizontalPadding = false,
shouldFillHeight = false,
)
ManageFundsModel.UiRoute.ChooseToken -> ManageFundsRouteUiSpec(
title = resourceReference(R.string.common_choose_token),
shouldApplyHorizontalPadding = false,
shouldFillHeight = true,
)
ManageFundsModel.UiRoute.UserPortfolio -> ManageFundsRouteUiSpec(
title = resourceReference(R.string.common_add_funds),
shouldApplyHorizontalPadding = false,
shouldFillHeight = false,
)
ManageFundsModel.UiRoute.TokenActions -> ManageFundsRouteUiSpec(
title = resourceReference(if (isTransfer) R.string.common_transfer else R.string.common_get_token),
shouldApplyHorizontalPadding = true,
shouldFillHeight = true,
)
}
}

View file

@ -10,6 +10,7 @@ import com.arkivanov.decompose.router.slot.childSlot
import com.arkivanov.decompose.router.slot.dismiss
import com.tangem.common.ui.markets.action.CryptoCurrencyData
import com.tangem.common.ui.markets.action.TokenActionsBSContentUM
import com.tangem.common.ui.markets.action.TokenActionsContext
import com.tangem.core.decompose.context.AppComponentContext
import com.tangem.core.decompose.context.childByContext
import com.tangem.core.decompose.factory.ComponentFactory
@ -79,6 +80,7 @@ internal class TokenActionsComponent @AssistedInject constructor(
val bottomAction: Flow<BottomAction> = flowOf(BottomAction.None),
val isRedesignForced: Boolean = false,
val isCompact: Boolean = false,
val context: TokenActionsContext = TokenActionsContext.Markets,
)
interface Callbacks {

View file

@ -92,6 +92,7 @@ internal class TokenActionsUiBuilder @Inject constructor(
cryptoData = cryptoCurrencyData,
tokenActionsHandler = tokenActionsHandler,
isRedesignEnabled = false,
context = params.context,
),
bottomActionText = bottomActionText(bottomAction),
onBottomActionClick = {
@ -124,6 +125,7 @@ internal class TokenActionsUiBuilder @Inject constructor(
cryptoData = cryptoCurrencyData,
tokenActionsHandler = tokenActionsHandler,
isRedesignEnabled = true,
context = params.context,
),
bottomActionText = bottomActionText(bottomAction),
onBottomActionClick = {