Updated on 2026-08-14
This commit is contained in:
parent
6c6ce3d05e
commit
8c8c0ada45
6 changed files with 31 additions and 21 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ internal class PreviewRenameWalletComponent : RenameWalletComponent {
|
|||
|
||||
private val previewState = RenameWalletUM(
|
||||
walletNameValue = TextFieldValue(text = "My Wallet"),
|
||||
isNameCorrect = false,
|
||||
isConfirmEnabled = false,
|
||||
updateValue = {},
|
||||
onConfirm = {},
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
)
|
||||
|
|
@ -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(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue