Updated on 2026-08-14

This commit is contained in:
Tangem 2024-07-30 11:37:27 +03:00
parent 6c6ce3d05e
commit 8c8c0ada45
6 changed files with 31 additions and 21 deletions

View file

@ -1,12 +1,12 @@
package com.tangem.tap.di.domain
import com.tangem.domain.redux.ReduxStateHolder
import com.tangem.domain.walletmanager.WalletManagersFacade
import com.tangem.domain.wallets.legacy.UserWalletsListManager
import com.tangem.domain.transaction.WalletAddressServiceRepository
import com.tangem.domain.transaction.usecase.ParseSharedAddressUseCase
import com.tangem.domain.transaction.usecase.ValidateWalletAddressUseCase
import com.tangem.domain.transaction.usecase.ValidateWalletMemoUseCase
import com.tangem.domain.walletmanager.WalletManagersFacade
import com.tangem.domain.wallets.legacy.UserWalletsListManager
import com.tangem.domain.wallets.repository.WalletNamesMigrationRepository
import com.tangem.domain.wallets.repository.WalletsRepository
import com.tangem.domain.wallets.usecase.*
@ -95,8 +95,11 @@ internal object WalletsDomainModule {
@Provides
@Singleton
fun providesRenameWalletUseCase(userWalletsListManager: UserWalletsListManager): RenameWalletUseCase {
return RenameWalletUseCase(userWalletsListManager = userWalletsListManager)
fun providesRenameWalletUseCase(
userWalletsListManager: UserWalletsListManager,
dispatchers: CoroutineDispatcherProvider,
): RenameWalletUseCase {
return RenameWalletUseCase(userWalletsListManager = userWalletsListManager, dispatchers = dispatchers)
}
@Provides

View file

@ -8,25 +8,32 @@ import com.tangem.domain.wallets.legacy.UserWalletsListManager
import com.tangem.domain.wallets.models.UpdateWalletError
import com.tangem.domain.wallets.models.UserWallet
import com.tangem.domain.wallets.models.UserWalletId
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import kotlinx.coroutines.withContext
/**
* Use case for rename user wallet
*
* @property userWalletsListManager user wallets list manager
*/
class RenameWalletUseCase(private val userWalletsListManager: UserWalletsListManager) {
class RenameWalletUseCase(
private val userWalletsListManager: UserWalletsListManager,
private val dispatchers: CoroutineDispatcherProvider,
) {
suspend operator fun invoke(userWalletId: UserWalletId, name: String): Either<UpdateWalletError, UserWallet> =
either {
val existingNames = userWalletsListManager.userWalletsSync
withContext(dispatchers.io) {
either {
val existingNames = userWalletsListManager.userWalletsSync
ensure(existingNames.none { it.name == name && it.walletId != userWalletId }) {
UpdateWalletError.NameAlreadyExists
}
ensure(existingNames.none { it.name == name && it.walletId != userWalletId }) {
UpdateWalletError.NameAlreadyExists
}
when (val result = userWalletsListManager.update(userWalletId) { it.copy(name = name) }) {
is CompletionResult.Failure -> raise(UpdateWalletError.DataError(result.error))
is CompletionResult.Success -> result.data
when (val result = userWalletsListManager.update(userWalletId) { it.copy(name = name) }) {
is CompletionResult.Failure -> raise(UpdateWalletError.DataError(result.error))
is CompletionResult.Success -> result.data
}
}
}
}

View file

@ -34,8 +34,8 @@ internal class DefaultRenameWalletComponent @AssistedInject constructor(
private val stateFlow: MutableStateFlow<RenameWalletUM> = MutableStateFlow(
value = RenameWalletUM(
walletNameValue = TextFieldValue(text = params.currentName),
isNameCorrect = false,
updateValue = ::updateValue,
isConfirmEnabled = false,
onConfirm = { renameWallet(params.userWalletId) },
),
)
@ -58,12 +58,14 @@ internal class DefaultRenameWalletComponent @AssistedInject constructor(
stateFlow.update {
it.copy(
walletNameValue = value,
isNameCorrect = value.text.isNotBlank() && value.text != currentWalletName,
isConfirmEnabled = value.text.isNotBlank() && value.text != currentWalletName,
)
}
}
private fun renameWallet(userWalletId: UserWalletId) = componentScope.launch {
stateFlow.update { it.copy(isConfirmEnabled = false) }
val newName = stateFlow.value.walletNameValue
val maybeError = renameWalletUseCase(userWalletId, newName.text).leftOrNull()
@ -71,9 +73,7 @@ internal class DefaultRenameWalletComponent @AssistedInject constructor(
Timber.e("Unable to rename wallet: $maybeError")
val message = when (maybeError) {
is UpdateWalletError.DataError -> resourceReference(
id = R.string.common_unknown_error,
)
is UpdateWalletError.DataError -> resourceReference(id = R.string.common_unknown_error)
is UpdateWalletError.NameAlreadyExists -> resourceReference(
id = R.string.user_wallet_list_rename_popup_error_already_exists,
formatArgs = wrappedList(newName),

View file

@ -10,7 +10,7 @@ internal class PreviewRenameWalletComponent : RenameWalletComponent {
private val previewState = RenameWalletUM(
walletNameValue = TextFieldValue(text = "My Wallet"),
isNameCorrect = false,
isConfirmEnabled = false,
updateValue = {},
onConfirm = {},
)

View file

@ -6,7 +6,7 @@ import androidx.compose.ui.text.input.TextFieldValue
@Immutable
internal data class RenameWalletUM(
val walletNameValue: TextFieldValue,
val isNameCorrect: Boolean,
val updateValue: (value: TextFieldValue) -> Unit,
val isConfirmEnabled: Boolean,
val onConfirm: () -> Unit,
)

View file

@ -23,7 +23,7 @@ internal fun RenameWalletDialog(model: RenameWalletUM, onDismiss: () -> Unit) {
fieldValue = value,
confirmButton = DialogButton(
title = stringResource(id = R.string.common_ok),
enabled = model.isNameCorrect,
enabled = model.isConfirmEnabled,
onClick = model.onConfirm,
),
dismissButton = DialogButton(