Updated on 2026-08-14

This commit is contained in:
Tangem 2024-05-28 19:05:46 +08:00
parent 10ba20b045
commit c849c203b1
6 changed files with 134 additions and 5 deletions

View file

@ -4,6 +4,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf
import androidx.compose.ui.Modifier
import androidx.fragment.app.viewModels
import com.tangem.core.navigation.NavigationAction
import com.tangem.core.ui.UiDependencies
import com.tangem.core.ui.screen.ComposeFragment
@ -19,7 +20,7 @@ internal class ResetCardFragment : ComposeFragment(), StoreSubscriber<DetailsSta
@Inject
override lateinit var uiDependencies: UiDependencies
private val viewModel = ResetCardViewModel(store)
private val viewModel: ResetCardViewModel by viewModels()
private var screenState: MutableState<ResetCardScreenState> =
mutableStateOf(ResetCardScreenState.InitialState)

View file

@ -1,13 +1,32 @@
package com.tangem.tap.features.details.ui.resetcard
import com.tangem.tap.common.redux.AppState
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import arrow.core.raise.either
import com.tangem.domain.card.DeleteSavedAccessCodesUseCase
import com.tangem.domain.card.ResetCardUseCase
import com.tangem.domain.wallets.models.UserWallet
import com.tangem.domain.wallets.usecase.DeleteWalletUseCase
import com.tangem.domain.wallets.usecase.GetSelectedWalletSyncUseCase
import com.tangem.tap.common.extensions.onUserWalletSelected
import com.tangem.tap.features.details.redux.CardSettingsState
import com.tangem.tap.features.details.redux.DetailsAction
import com.tangem.tap.features.details.ui.cardsettings.TextReference
import com.tangem.tap.features.details.ui.resetcard.featuretoggles.ResetCardFeatureToggles
import com.tangem.tap.features.details.ui.utils.toResetCardDescriptionText
import org.rekotlin.Store
import com.tangem.tap.store
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
import javax.inject.Inject
internal class ResetCardViewModel(private val store: Store<AppState>) {
@HiltViewModel
internal class ResetCardViewModel @Inject constructor(
private val resetCardFeatureToggles: ResetCardFeatureToggles,
private val getSelectedWalletSyncUseCase: GetSelectedWalletSyncUseCase,
private val resetCardUseCase: ResetCardUseCase,
private val deleteSavedAccessCodesUseCase: DeleteSavedAccessCodesUseCase,
private val deleteWalletUseCase: DeleteWalletUseCase,
) : ViewModel() {
fun updateState(state: CardSettingsState?): ResetCardScreenState.ResetCardScreenContent {
val descriptionText = state?.cardInfo
@ -45,7 +64,31 @@ internal class ResetCardViewModel(private val store: Store<AppState>) {
private fun onLastWarningDialogResetClicked() {
store.dispatch(DetailsAction.ResetToFactory.LastWarningDialogVisibility(isShown = false))
store.dispatch(DetailsAction.ResetToFactory.Proceed)
if (resetCardFeatureToggles.isFullResetEnabled) {
makeFullReset()
} else {
store.dispatch(DetailsAction.ResetToFactory.Proceed)
}
}
private fun makeFullReset() {
val currentUserWallet = getSelectedWalletSyncUseCase().getOrNull() ?: return
viewModelScope.launch {
resetCurrentCard(userWallet = currentUserWallet).onRight {
val newSelectedWallet = getSelectedWalletSyncUseCase().getOrNull()
if (newSelectedWallet != null) {
store.onUserWalletSelected(newSelectedWallet)
}
}
}
}
private suspend fun resetCurrentCard(userWallet: UserWallet) = either {
resetCardUseCase(userWallet.scanResponse.card).bind()
deleteSavedAccessCodesUseCase(userWallet.cardId).bind()
deleteWalletUseCase(userWallet.walletId).bind()
}
private fun onLastWarningDialogDismiss() {