diff --git a/app/src/main/java/com/tangem/tap/di/domain/WalletsDomainModule.kt b/app/src/main/java/com/tangem/tap/di/domain/WalletsDomainModule.kt
index 92f1340058..7eb7a3d2cc 100644
--- a/app/src/main/java/com/tangem/tap/di/domain/WalletsDomainModule.kt
+++ b/app/src/main/java/com/tangem/tap/di/domain/WalletsDomainModule.kt
@@ -48,4 +48,16 @@ internal object WalletsDomainModule {
fun providesSelectWalletUseCase(walletsStateHolder: WalletsStateHolder): SelectWalletUseCase {
return SelectWalletUseCase(walletsStateHolder = walletsStateHolder)
}
+
+ @Provides
+ @ViewModelScoped
+ fun providesUpdateWalletUseCase(walletsStateHolder: WalletsStateHolder): UpdateWalletUseCase {
+ return UpdateWalletUseCase(walletsStateHolder = walletsStateHolder)
+ }
+
+ @Provides
+ @ViewModelScoped
+ fun providesDeleteWalletUseCase(walletsStateHolder: WalletsStateHolder): DeleteWalletUseCase {
+ return DeleteWalletUseCase(walletsStateHolder = walletsStateHolder)
+ }
}
\ No newline at end of file
diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml
index 843b3f4be1..820055db8d 100644
--- a/core/res/src/main/res/values-ru/strings.xml
+++ b/core/res/src/main/res/values-ru/strings.xml
@@ -96,6 +96,8 @@
Получить
Отклонить
Перезагрузить
+ Переименовать
+ Сбросить
Сохранить изменения
Искать
Поиск токенов
@@ -116,6 +118,7 @@
Транзакции
Перевод
Я понял
+ Необходима разблокировка
Недоступно
Да
Адрес контракта скопирован!
@@ -472,6 +475,8 @@
Tangem Twin
Это действие необратимо. У вас не будет доступа к старому кошельку.
Приложите twin-карту с номером %s и не убирайте до окончания операции
+ Используйте %s или отсканируйте карту, чтобы получить доступ к своему кошельку
+ Используйте %s или отсканируйте карту
Добавить новый кошелек
Вы уверены, что хотите удалить этот кошелек?
%d выбрано
diff --git a/core/res/src/main/res/values-zh-rTW/strings.xml b/core/res/src/main/res/values-zh-rTW/strings.xml
index 748251aefa..15209b8a9b 100644
--- a/core/res/src/main/res/values-zh-rTW/strings.xml
+++ b/core/res/src/main/res/values-zh-rTW/strings.xml
@@ -80,6 +80,8 @@
OK
主卡片
拒絕
+ 重新命名
+ 重置
保存設置
搜索
搜尋代幣
diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml
index 9d7e67dfea..755f6928a3 100644
--- a/core/res/src/main/res/values/strings.xml
+++ b/core/res/src/main/res/values/strings.xml
@@ -95,6 +95,8 @@
Receive
Reject
Reload
+ Rename
+ Reset
Save changes
Search
Search tokens
@@ -115,6 +117,7 @@
Transactions
Transfer
I understand
+ Unlock needed
Unreachable
Yes
Contract address copied!
@@ -463,6 +466,8 @@
Tangem Twin
This action is irreversible. You will not have access to the old wallet.
Tap the twin card with number %s and do not remove until the end of the operation
+ Use %s or scan a card to have an access to your wallet
+ Use %s or scan a card
Add new wallet
Are you sure you want to delete this wallet?
%d selected
diff --git a/domain/wallets/src/main/java/com/tangem/domain/wallets/models/DeleteWalletError.kt b/domain/wallets/src/main/java/com/tangem/domain/wallets/models/DeleteWalletError.kt
new file mode 100644
index 0000000000..6ed1ab11b9
--- /dev/null
+++ b/domain/wallets/src/main/java/com/tangem/domain/wallets/models/DeleteWalletError.kt
@@ -0,0 +1,6 @@
+package com.tangem.domain.wallets.models
+
+sealed interface DeleteWalletError {
+
+ object DataError : DeleteWalletError
+}
\ No newline at end of file
diff --git a/domain/wallets/src/main/java/com/tangem/domain/wallets/models/UpdateWalletError.kt b/domain/wallets/src/main/java/com/tangem/domain/wallets/models/UpdateWalletError.kt
new file mode 100644
index 0000000000..48a93dd33b
--- /dev/null
+++ b/domain/wallets/src/main/java/com/tangem/domain/wallets/models/UpdateWalletError.kt
@@ -0,0 +1,6 @@
+package com.tangem.domain.wallets.models
+
+sealed interface UpdateWalletError {
+
+ object DataError : UpdateWalletError
+}
\ No newline at end of file
diff --git a/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/DeleteWalletUseCase.kt b/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/DeleteWalletUseCase.kt
new file mode 100644
index 0000000000..e4102d98c2
--- /dev/null
+++ b/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/DeleteWalletUseCase.kt
@@ -0,0 +1,31 @@
+package com.tangem.domain.wallets.usecase
+
+import arrow.core.Either
+import arrow.core.left
+import arrow.core.right
+import com.tangem.common.doOnFailure
+import com.tangem.common.doOnSuccess
+import com.tangem.domain.wallets.legacy.WalletsStateHolder
+import com.tangem.domain.wallets.models.DeleteWalletError
+import com.tangem.domain.wallets.models.UserWalletId
+
+/**
+ * Use case for updating user wallet
+ *
+ * @property walletsStateHolder state holder for getting static initialized 'userWalletsListManager'
+ *
+[REDACTED_AUTHOR]
+ */
+class DeleteWalletUseCase(private val walletsStateHolder: WalletsStateHolder) {
+
+ suspend operator fun invoke(userWalletId: UserWalletId): Either {
+ val userWalletsListManager = walletsStateHolder.userWalletsListManager
+ ?: return DeleteWalletError.DataError.left()
+
+ userWalletsListManager.delete(userWalletIds = listOf(userWalletId))
+ .doOnSuccess { return Unit.right() }
+ .doOnFailure { return DeleteWalletError.DataError.left() }
+
+ return Unit.right()
+ }
+}
\ No newline at end of file
diff --git a/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/UpdateWalletUseCase.kt b/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/UpdateWalletUseCase.kt
new file mode 100644
index 0000000000..1990c26dda
--- /dev/null
+++ b/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/UpdateWalletUseCase.kt
@@ -0,0 +1,35 @@
+package com.tangem.domain.wallets.usecase
+
+import arrow.core.Either
+import arrow.core.left
+import arrow.core.right
+import com.tangem.common.doOnFailure
+import com.tangem.common.doOnSuccess
+import com.tangem.domain.wallets.legacy.WalletsStateHolder
+import com.tangem.domain.wallets.models.UpdateWalletError
+import com.tangem.domain.wallets.models.UserWallet
+import com.tangem.domain.wallets.models.UserWalletId
+
+/**
+ * Use case for updating user wallet
+ *
+ * @property walletsStateHolder state holder for getting static initialized 'userWalletsListManager'
+ *
+[REDACTED_AUTHOR]
+ */
+class UpdateWalletUseCase(private val walletsStateHolder: WalletsStateHolder) {
+
+ suspend operator fun invoke(
+ userWalletId: UserWalletId,
+ update: suspend (UserWallet) -> UserWallet,
+ ): Either {
+ val userWalletsListManager = walletsStateHolder.userWalletsListManager
+ ?: return UpdateWalletError.DataError.left()
+
+ userWalletsListManager.update(userWalletId, update)
+ .doOnSuccess { return Unit.right() }
+ .doOnFailure { return UpdateWalletError.DataError.left() }
+
+ return Unit.right()
+ }
+}
\ No newline at end of file
diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletClickIntents.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletClickIntents.kt
index 48d9423033..ccb9eeeb22 100644
--- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletClickIntents.kt
+++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletClickIntents.kt
@@ -2,7 +2,9 @@ package com.tangem.feature.wallet.presentation.wallet.viewmodels
import com.tangem.core.ui.components.transactions.intents.TxHistoryClickIntents
import com.tangem.domain.tokens.models.CryptoCurrency
+import com.tangem.domain.wallets.models.UserWalletId
+@Suppress("TooManyFunctions")
internal interface WalletClickIntents : TxHistoryClickIntents {
fun onBackClick()
@@ -36,4 +38,8 @@ internal interface WalletClickIntents : TxHistoryClickIntents {
fun onBottomSheetDismiss()
fun onTokenClick(currency: CryptoCurrency)
+
+ fun onRenameClick(userWalletId: UserWalletId, name: String)
+
+ fun onDeleteClick(userWalletId: UserWalletId)
}
\ No newline at end of file
diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt
index 44ed05d722..af6c22462d 100644
--- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt
+++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt
@@ -60,6 +60,8 @@ internal class WalletViewModel @Inject constructor(
private val saveWalletUseCase: SaveWalletUseCase,
private val getSelectedWalletUseCase: GetSelectedWalletUseCase,
private val selectWalletUseCase: SelectWalletUseCase,
+ private val updateWalletUseCase: UpdateWalletUseCase,
+ private val deleteWalletUseCase: DeleteWalletUseCase,
private val getBiometricsStatusUseCase: GetBiometricsStatusUseCase,
private val setAccessCodeRequestPolicyUseCase: SetAccessCodeRequestPolicyUseCase,
private val getAccessCodeSavingStatusUseCase: GetAccessCodeSavingStatusUseCase,
@@ -459,6 +461,18 @@ internal class WalletViewModel @Inject constructor(
router.openTokenDetails(currency = currency)
}
+ override fun onRenameClick(userWalletId: UserWalletId, name: String) {
+ viewModelScope.launch(dispatchers.io) {
+ updateWalletUseCase(userWalletId = userWalletId, update = { it.copy(name) })
+ }
+ }
+
+ override fun onDeleteClick(userWalletId: UserWalletId) {
+ viewModelScope.launch(dispatchers.io) {
+ deleteWalletUseCase(userWalletId)
+ }
+ }
+
private fun createSelectedAppCurrencyFlow(): StateFlow {
return getSelectedAppCurrencyUseCase()
.map { maybeAppCurrency ->