Updated on 2026-08-14
This commit is contained in:
parent
e0b5ca0c4d
commit
ef438c3cd3
6 changed files with 55 additions and 22 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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<WalletViewModel>().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<OrganizeTokensViewModel>()
|
||||
.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() {
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
package com.tangem.feature.wallet.presentation.router
|
||||
|
||||
/**
|
||||
* Wallet feature screens
|
||||
*
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
enum class WalletScreens {
|
||||
WALLET, ORGANIZE_TOKENS
|
||||
}
|
||||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue