diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/organizetokens/OrganizeTokensViewModel.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/organizetokens/OrganizeTokensViewModel.kt index e81b764058..52f391935b 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/organizetokens/OrganizeTokensViewModel.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/organizetokens/OrganizeTokensViewModel.kt @@ -3,13 +3,16 @@ package com.tangem.feature.wallet.presentation.organizetokens import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue +import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.tangem.domain.wallets.models.UserWalletId import com.tangem.feature.wallet.presentation.common.WalletPreviewData import com.tangem.feature.wallet.presentation.organizetokens.OrganizeTokensStateHolder.DragConfig import com.tangem.feature.wallet.presentation.organizetokens.OrganizeTokensStateHolder.HeaderConfig import com.tangem.feature.wallet.presentation.organizetokens.utils.* import com.tangem.feature.wallet.presentation.router.InnerWalletRouter +import com.tangem.feature.wallet.presentation.router.WalletRoute import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.Dispatchers @@ -20,12 +23,17 @@ import kotlin.properties.Delegates // FIXME: Implemented with preview data @HiltViewModel -internal class OrganizeTokensViewModel @Inject constructor() : ViewModel() { +internal class OrganizeTokensViewModel @Inject constructor(savedStateHandle: SavedStateHandle) : ViewModel() { @Volatile private var movingItem: DraggableItem? = null var router: InnerWalletRouter by Delegates.notNull() + val userWalletId: UserWalletId by lazy { + val userWalletIdValue: String = checkNotNull(savedStateHandle[WalletRoute.userWalletIdKey]) + + UserWalletId(userWalletIdValue) + } var uiState: OrganizeTokensStateHolder by mutableStateOf(getInitialState()) private set diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/DefaultWalletRouter.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/DefaultWalletRouter.kt index 85fb11d43b..642d59b17b 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/DefaultWalletRouter.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/DefaultWalletRouter.kt @@ -1,6 +1,5 @@ package com.tangem.feature.wallet.presentation.router -import androidx.activity.compose.BackHandler import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @@ -9,12 +8,15 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager import androidx.hilt.navigation.compose.hiltViewModel import androidx.navigation.NavHostController +import androidx.navigation.NavType import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController +import androidx.navigation.navArgument import com.tangem.core.navigation.AppScreen import com.tangem.core.navigation.NavigationAction import com.tangem.core.navigation.NavigationStateHolder +import com.tangem.domain.wallets.models.UserWalletId import com.tangem.feature.wallet.presentation.WalletFragment import com.tangem.feature.wallet.presentation.organizetokens.OrganizeTokensScreen import com.tangem.feature.wallet.presentation.organizetokens.OrganizeTokensViewModel @@ -36,20 +38,23 @@ internal class DefaultWalletRouter(private val navigationStateHolder: Navigation NavHost( navController = rememberNavController().apply { navController = this }, - startDestination = WalletScreens.WALLET.name, + startDestination = WalletRoute.Wallet.route, ) { - composable(WalletScreens.WALLET.name) { + composable(WalletRoute.Wallet.route) { val viewModel = hiltViewModel().apply { router = this@DefaultWalletRouter } LocalLifecycleOwner.current.lifecycle.addObserver(observer = viewModel) WalletScreen(state = viewModel.uiState) } - composable(WalletScreens.ORGANIZE_TOKENS.name) { - BackHandler(onBack = ::popBackStack) - + composable( + WalletRoute.OrganizeTokens.route, + arguments = listOf(navArgument(WalletRoute.userWalletIdKey) { type = NavType.StringType }), + ) { val viewModel: OrganizeTokensViewModel = hiltViewModel() - .apply { router = this@DefaultWalletRouter } + .apply { + router = this@DefaultWalletRouter + } OrganizeTokensScreen( modifier = Modifier.systemBarsPadding(), @@ -73,8 +78,8 @@ internal class DefaultWalletRouter(private val navigationStateHolder: Navigation } } - override fun openOrganizeTokensScreen() { - navController.navigate(route = WalletScreens.ORGANIZE_TOKENS.name) + override fun openOrganizeTokensScreen(userWalletId: UserWalletId) { + navController.navigate(WalletRoute.OrganizeTokens.createRoute(userWalletId)) } override fun openDetailsScreen() { diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/InnerWalletRouter.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/InnerWalletRouter.kt index 866bbc9c3d..ef0a6a93b3 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/InnerWalletRouter.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/InnerWalletRouter.kt @@ -3,6 +3,7 @@ package com.tangem.feature.wallet.presentation.router import androidx.compose.runtime.Composable import androidx.compose.runtime.Stable import androidx.fragment.app.FragmentManager +import com.tangem.domain.wallets.models.UserWalletId import com.tangem.features.wallet.navigation.WalletRouter /** @@ -29,7 +30,7 @@ internal interface InnerWalletRouter : WalletRouter { fun popBackStack() /** Open organize tokens screen */ - fun openOrganizeTokensScreen() + fun openOrganizeTokensScreen(userWalletId: UserWalletId) /** Open details screen */ fun openDetailsScreen() diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/WalletRoute.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/WalletRoute.kt new file mode 100644 index 0000000000..2cb8a4a91c --- /dev/null +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/WalletRoute.kt @@ -0,0 +1,24 @@ +package com.tangem.feature.wallet.presentation.router + +import com.tangem.domain.wallets.models.UserWalletId + +/** + * Wallet feature screens + * + * @property route route string representation + * +[REDACTED_AUTHOR] + */ +internal sealed class WalletRoute(val route: String) { + + object Wallet : WalletRoute(route = "wallet") + + object OrganizeTokens : WalletRoute(route = "wallet/{$userWalletIdKey}/organize_tokens") { + + fun createRoute(userWalletId: UserWalletId) = "wallet/${userWalletId.stringValue}/organize_tokens" + } + + companion object { + const val userWalletIdKey = "userWalletId" + } +} \ No newline at end of file diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/WalletScreens.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/WalletScreens.kt deleted file mode 100644 index 0a74b766aa..0000000000 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/WalletScreens.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.tangem.feature.wallet.presentation.router - -/** - * Wallet feature screens - * -[REDACTED_AUTHOR] - */ -enum class WalletScreens { - WALLET, ORGANIZE_TOKENS -} \ No newline at end of file diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt index b8f0fabe8a..7dbc2e6af9 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt @@ -243,5 +243,10 @@ internal class WalletViewModel @Inject constructor( updateContentItems(index = uiState.walletsListConfig.selectedWalletIndex, isRefreshing = true) } - override fun onOrganizeTokensClick() = router.openOrganizeTokensScreen() + override fun onOrganizeTokensClick() { + val index = uiState.walletsListConfig.selectedWalletIndex + val walletId = uiState.walletsListConfig.wallets[index].id + + router.openOrganizeTokensScreen(walletId) + } } \ No newline at end of file