Updated on 2026-08-14

This commit is contained in:
Tangem 2023-07-11 22:21:20 +08:00
parent 80ac1d02c0
commit ffc38eb02d
11 changed files with 106 additions and 29 deletions

View file

@ -5,12 +5,18 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.tangem.common.doOnFailure
import com.tangem.common.doOnSuccess
import com.tangem.domain.card.ScanCardProcessor
import com.tangem.domain.tokens.GetTokenListUseCase
import com.tangem.feature.wallet.presentation.common.WalletPreviewData
import com.tangem.feature.wallet.presentation.router.InnerWalletRouter
import com.tangem.feature.wallet.presentation.wallet.state.WalletStateHolder
import com.tangem.feature.wallet.presentation.wallet.state.WalletTopBarConfig
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
import javax.inject.Inject
import kotlin.properties.Delegates
@ -23,6 +29,8 @@ import kotlin.properties.Delegates
internal class WalletViewModel @Inject constructor(
@Suppress("unused") // TODO: [REDACTED_JIRA]
private val getTokenListUseCase: GetTokenListUseCase,
private val scanCardProcessor: ScanCardProcessor,
private val dispatchers: CoroutineDispatcherProvider,
) : ViewModel() {
/** Feature router */
@ -34,16 +42,32 @@ internal class WalletViewModel @Inject constructor(
// TODO: [REDACTED_TASK_KEY] Use production data instead of WalletPreviewData
private fun getInitialState(): WalletStateHolder = WalletPreviewData.multicurrencyWalletScreenState.copy(
onBackClick = { router.popBackStack() },
topBarConfig = WalletTopBarConfig(
onScanCardClick = { router.openOrganizeTokensScreen() },
onMoreClick = { router.openDetailsScreen() },
),
onBackClick = ::onBackClick,
topBarConfig = createTopBarConfig(),
walletsListConfig = WalletPreviewData.multicurrencyWalletScreenState.walletsListConfig.copy(
onWalletChange = ::selectWallet,
),
)
private fun onBackClick() {
router.popBackStack()
}
private fun createTopBarConfig(): WalletTopBarConfig {
return WalletTopBarConfig(
onScanCardClick = ::onScanCardClick,
onMoreClick = { router.openDetailsScreen() },
)
}
private fun onScanCardClick() {
viewModelScope.launch(dispatchers.io) {
scanCardProcessor.scan(allowsRequestAccessCodeFromRepository = true)
.doOnSuccess { /* [REDACTED_TODO_COMMENT] */ }
.doOnFailure { /* [REDACTED_TODO_COMMENT] */ }
}
}
// TODO: [REDACTED_TASK_KEY] Use production data instead of WalletPreviewData
private fun selectWallet(index: Int) {
if (uiState.walletsListConfig.selectedWalletIndex == index) return