Updated on 2026-08-14
This commit is contained in:
parent
75eee9698c
commit
1e29b39eec
2 changed files with 42 additions and 23 deletions
|
|
@ -247,7 +247,7 @@ class DetailsMiddleware {
|
|||
deleteSavedAccessCodes()
|
||||
store.inject(DaggerGraphState::walletsRepository).saveShouldSaveUserWallets(item = false)
|
||||
|
||||
store.dispatchNavigationAction { popTo<AppRoute.Home>() }
|
||||
store.dispatchNavigationAction { replaceAll(AppRoute.Home) }
|
||||
|
||||
return CompletionResult.Success(Unit)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,17 +1,22 @@
|
|||
package com.tangem.features.details.utils
|
||||
|
||||
import arrow.core.raise.*
|
||||
import arrow.core.recover
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import arrow.core.raise.Raise
|
||||
import arrow.core.raise.ensureNotNull
|
||||
import arrow.core.raise.fold
|
||||
import arrow.core.raise.recover
|
||||
import com.tangem.common.routing.AppRoute
|
||||
import com.tangem.core.analytics.models.AnalyticsParam
|
||||
import com.tangem.core.decompose.di.ComponentScoped
|
||||
import com.tangem.core.decompose.navigation.Router
|
||||
import com.tangem.core.decompose.navigation.popTo
|
||||
import com.tangem.core.decompose.ui.UiMessageSender
|
||||
import com.tangem.core.ui.components.SimpleOkDialog
|
||||
import com.tangem.core.ui.extensions.TextReference
|
||||
import com.tangem.core.ui.extensions.isNullOrEmpty
|
||||
import com.tangem.core.ui.extensions.resourceReference
|
||||
import com.tangem.core.ui.extensions.stringReference
|
||||
import com.tangem.core.ui.message.ContentMessage
|
||||
import com.tangem.core.ui.message.SnackbarMessage
|
||||
import com.tangem.domain.card.ScanCardProcessor
|
||||
import com.tangem.domain.models.scan.ScanResponse
|
||||
|
|
@ -21,7 +26,7 @@ import com.tangem.domain.wallets.models.SaveWalletError
|
|||
import com.tangem.domain.wallets.models.UserWallet
|
||||
import com.tangem.domain.wallets.usecase.GenerateWalletNameUseCase
|
||||
import com.tangem.domain.wallets.usecase.SaveWalletUseCase
|
||||
import com.tangem.domain.wallets.usecase.SelectWalletUseCase
|
||||
import com.tangem.domain.wallets.usecase.ShouldSaveUserWalletsSyncUseCase
|
||||
import com.tangem.features.details.impl.R
|
||||
import javax.inject.Inject
|
||||
|
||||
|
|
@ -31,7 +36,7 @@ internal class UserWalletSaver @Inject constructor(
|
|||
private val scanCardProcessor: ScanCardProcessor,
|
||||
private val saveWalletUseCase: SaveWalletUseCase,
|
||||
private val generateWalletNameUseCase: GenerateWalletNameUseCase,
|
||||
private val selectWalletUseCase: SelectWalletUseCase,
|
||||
private val shouldSaveUserWalletsSyncUseCase: ShouldSaveUserWalletsSyncUseCase,
|
||||
private val reduxStateHolder: ReduxStateHolder,
|
||||
private val messageSender: UiMessageSender,
|
||||
private val router: Router,
|
||||
|
|
@ -43,8 +48,6 @@ internal class UserWalletSaver @Inject constructor(
|
|||
val userWallet = createUserWallet(response)
|
||||
|
||||
saveWallet(userWallet)
|
||||
|
||||
router.popTo<AppRoute.Wallet>()
|
||||
},
|
||||
recover = { error ->
|
||||
val message = error.message
|
||||
|
|
@ -56,28 +59,44 @@ internal class UserWalletSaver @Inject constructor(
|
|||
)
|
||||
|
||||
private suspend fun Raise<Error>.saveWallet(userWallet: UserWallet) {
|
||||
saveWalletUseCase(userWallet).recover { error ->
|
||||
when (error) {
|
||||
is SaveWalletError.WalletAlreadySaved -> selectUserWallet(userWallet)
|
||||
is SaveWalletError.DataError -> {
|
||||
val messageRef = ensureNotNull(error.messageId?.let(::resourceReference)) {
|
||||
Error.Unknown
|
||||
fold(
|
||||
block = { saveWalletUseCase(userWallet).bind() },
|
||||
recover = { error ->
|
||||
when (error) {
|
||||
is SaveWalletError.WalletAlreadySaved -> {
|
||||
if (shouldSaveUserWalletsSyncUseCase()) {
|
||||
selectUserWallet()
|
||||
} else {
|
||||
router.popTo<AppRoute.Wallet>()
|
||||
}
|
||||
}
|
||||
is SaveWalletError.DataError -> {
|
||||
val messageRef = ensureNotNull(error.messageId?.let(::resourceReference)) {
|
||||
Error.Unknown
|
||||
}
|
||||
|
||||
raise(Error.Message(messageRef))
|
||||
raise(Error.Message(messageRef))
|
||||
}
|
||||
}
|
||||
}
|
||||
}.bind()
|
||||
},
|
||||
transform = {
|
||||
// call only if wallet is successfully saved
|
||||
reduxStateHolder.onUserWalletSelected(userWallet)
|
||||
|
||||
reduxStateHolder.onUserWalletSelected(userWallet)
|
||||
router.popTo<AppRoute.Wallet>()
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
private suspend fun Raise<Error>.selectUserWallet(userWallet: UserWallet) {
|
||||
withError({ Error.Unknown }) {
|
||||
selectWalletUseCase(userWallet.walletId).bind()
|
||||
}
|
||||
|
||||
router.popTo<AppRoute.Wallet>()
|
||||
private fun selectUserWallet() {
|
||||
messageSender.send(
|
||||
message = ContentMessage { onDismiss ->
|
||||
SimpleOkDialog(
|
||||
message = stringResource(id = R.string.user_wallet_list_error_wallet_already_saved),
|
||||
onDismissDialog = onDismiss,
|
||||
)
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
private suspend fun Raise<Error>.createUserWallet(response: ScanResponse): UserWallet {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue