Updated on 2026-08-14

This commit is contained in:
Tangem 2024-08-16 17:58:25 +04:00
parent a837544817
commit 09f69d5c32
11 changed files with 26 additions and 17 deletions

View file

@ -98,7 +98,7 @@ internal class HomeFragment : ComposeFragment(), StoreSubscriber<HomeState> {
viewModel.onSearchClick()
} else {
Analytics.send(IntroductionProcess.ButtonTokensList())
store.dispatchNavigationAction { push(AppRoute.ManageTokens(readOnlyContent = true)) }
store.dispatchNavigationAction { push(AppRoute.ManageTokens()) }
store.dispatch(TokensAction.SetArgs.ReadAccess)
}
},

View file

@ -61,7 +61,7 @@ internal class HomeViewModel @Inject constructor(
analyticsEventHandler.send(IntroductionProcess.ButtonTokensList())
store.dispatch(TokensAction.SetArgs.ReadAccess)
store.dispatchNavigationAction { push(AppRoute.ManageTokens(readOnlyContent = true)) }
store.dispatchNavigationAction { push(AppRoute.ManageTokens()) }
}
private fun scanCard() {

View file

@ -126,13 +126,7 @@ internal class ChildFactory @Inject constructor(
if (manageTokensToggles.isFeatureEnabled) {
route.asComponentChild(
contextProvider = contextProvider(route, contextFactory),
params = ManageTokensComponent.Params(
mode = if (route.readOnlyContent) {
ManageTokensComponent.Mode.READ_ONLY
} else {
ManageTokensComponent.Mode.MANAGE
},
),
params = ManageTokensComponent.Params(route.userWalletId),
componentFactory = manageTokensComponentFactory,
)
} else {

View file

@ -177,8 +177,8 @@ sealed class AppRoute(val path: String) : Route {
@Serializable
data class ManageTokens(
val readOnlyContent: Boolean,
) : AppRoute(path = "/manage_tokens/$readOnlyContent"), RouteBundleParams {
val userWalletId: UserWalletId? = null,
) : AppRoute(path = "/manage_tokens/$userWalletId"), RouteBundleParams {
override fun getBundle(): Bundle = bundle(serializer())
}

View file

@ -2,11 +2,11 @@ package com.tangem.features.managetokens.component
import com.tangem.core.decompose.factory.ComponentFactory
import com.tangem.core.ui.decompose.ComposableContentComponent
import com.tangem.domain.wallets.models.UserWalletId
interface ManageTokensComponent : ComposableContentComponent {
data class Params(val mode: Mode)
data class Params(val userWalletId: UserWalletId?)
enum class Mode { READ_ONLY, MANAGE, }
interface Factory : ComponentFactory<Params, ManageTokensComponent>
}

View file

@ -15,6 +15,7 @@ dependencies {
/* Project - API */
implementation(projects.features.walletSettings.api)
implementation(projects.features.manageTokens.api)
/* Project - Core */
implementation(projects.core.decompose)

View file

@ -8,6 +8,7 @@ import com.tangem.feature.walletsettings.component.WalletSettingsComponent
import com.tangem.feature.walletsettings.entity.WalletSettingsUM
import com.tangem.feature.walletsettings.ui.WalletSettingsScreen
import com.tangem.feature.walletsettings.utils.ItemsBuilder
import com.tangem.features.managetokens.ManageTokensToggles
internal class PreviewWalletSettingsComponent : WalletSettingsComponent {
@ -15,6 +16,9 @@ internal class PreviewWalletSettingsComponent : WalletSettingsComponent {
popBack = {},
items = ItemsBuilder(
router = DummyRouter(),
manageTokensToggles = object : ManageTokensToggles {
override val isFeatureEnabled: Boolean = true
},
).buildItems(
userWalletId = UserWalletId("011"),
userWalletName = "My Wallet",

View file

@ -9,6 +9,7 @@ import com.tangem.core.ui.extensions.stringReference
import com.tangem.domain.wallets.models.UserWalletId
import com.tangem.feature.walletsettings.entity.WalletSettingsItemUM
import com.tangem.feature.walletsettings.impl.R
import com.tangem.features.managetokens.ManageTokensToggles
import kotlinx.collections.immutable.PersistentList
import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toImmutableList
@ -17,6 +18,7 @@ import javax.inject.Inject
@ComponentScoped
internal class ItemsBuilder @Inject constructor(
private val router: Router,
private val manageTokensToggles: ManageTokensToggles,
) {
@Suppress("LongParameterList")
@ -50,6 +52,14 @@ internal class ItemsBuilder @Inject constructor(
id = "card",
description = resourceReference(R.string.settings_card_settings_footer),
blocks = buildList {
if (manageTokensToggles.isFeatureEnabled) {
BlockUM(
text = resourceReference(R.string.add_tokens_title),
iconRes = R.drawable.ic_tether_24,
onClick = { router.push(AppRoute.ManageTokens(userWalletId)) },
).let(::add)
}
if (isLinkMoreCardsAvailable) {
BlockUM(
text = resourceReference(R.string.details_row_title_create_backup),

View file

@ -139,8 +139,8 @@ internal class DefaultWalletRouter(
return router.stack.lastOrNull() is AppRoute.Wallet
}
override fun openManageTokensScreen() {
router.push(AppRoute.ManageTokens(readOnlyContent = false))
override fun openManageTokensScreen(userWalletId: UserWalletId) {
router.push(AppRoute.ManageTokens(userWalletId = userWalletId))
}
override fun openScanFailedDialog(onTryAgain: () -> Unit) {

View file

@ -54,7 +54,7 @@ internal interface InnerWalletRouter : WalletRouter {
fun isWalletLastScreen(): Boolean
/** Open manage tokens screen */
fun openManageTokensScreen()
fun openManageTokensScreen(userWalletId: UserWalletId)
/** Open scan failed dialog */
fun openScanFailedDialog(onTryAgain: () -> Unit)

View file

@ -90,7 +90,7 @@ internal class WalletContentClickIntentsImplementor @Inject constructor(
override fun onManageTokensClick() {
analyticsEventHandler.send(PortfolioEvent.ButtonManageTokens)
reduxStateHolder.dispatch(action = TokensAction.SetArgs.ManageAccess)
router.openManageTokensScreen()
router.openManageTokensScreen(userWalletId = stateHolder.getSelectedWalletId())
}
override fun onOrganizeTokensClick() {