Updated on 2026-08-14

This commit is contained in:
Tangem 2026-07-03 12:29:53 +01:00
parent 3e47825909
commit 1f00384c0c
22 changed files with 59 additions and 63 deletions

View file

@ -14,7 +14,7 @@ internal object ContactMatcher {
fun match(contacts: List<Contact>, networkId: String): List<MatchedContact> {
return contacts.mapNotNull { contact ->
val entries = contact.addressEntries.filter { it.networkId.value == networkId }
val entries = contact.addresses.filter { it.networkId.value == networkId }
if (entries.isEmpty()) return@mapNotNull null
MatchedContact(

View file

@ -180,7 +180,7 @@ internal class EditContactModel @Inject constructor(
stateController.update(UpdateContactNameTransformer(name = contact.name.value))
CryptoPortfolioIcon.Color.entries.firstOrNull { it.name == contact.iconColor }
?.let { stateController.update(SelectContactColorTransformer(color = it)) }
val addresses = ContactAddressEntriesConverter().toValidatedAddresses(contact.addressEntries)
val addresses = ContactAddressEntriesConverter().toValidatedAddresses(contact.addresses)
stateController.update(SetValidatedAddressesTransformer(addresses = addresses, maxAddresses = MAX_ADDRESSES))
}
@ -298,7 +298,7 @@ internal class EditContactModel @Inject constructor(
if (saveJob?.isActive == true) return
val userWallet = selectedWallet.value ?: return
val ui = stateController.uiState.value
val addressEntries = ContactAddressEntriesConverter().convert(ui.addresses)
val addresses = ContactAddressEntriesConverter().convert(ui.addresses)
val existing = loadedContact.value
saveJob = modelScope.launch {
@ -308,14 +308,14 @@ internal class EditContactModel @Inject constructor(
contact = existing,
name = ui.name,
iconColor = ui.colors.selected.name,
addressEntries = addressEntries,
addresses = addresses,
)
} else {
saveContactInteractor.createContact(
userWallet = userWallet,
name = ui.name,
iconColor = ui.colors.selected.name,
addressEntries = addressEntries,
addresses = addresses,
)
}
result.fold(
@ -514,7 +514,7 @@ internal class EditContactModel @Inject constructor(
private fun Contact.toSnapshot(): EditSnapshot = EditSnapshot(
name = name.value,
colorName = iconColor,
addresses = ContactAddressEntriesConverter().toValidatedAddresses(addressEntries)
addresses = ContactAddressEntriesConverter().toValidatedAddresses(addresses)
.map { it.address to it.networkIds.toSet() },
)

View file

@ -23,7 +23,7 @@ internal class DefaultContactConverter(
color = CryptoPortfolioIcon.Color.entries.firstOrNull { it.name == contact.iconColor }
?: CryptoPortfolioIcon.Color.Azure,
),
networkAddressCount = contact.addressEntries.size,
networkAddressCount = contact.addresses.size,
onClick = { onContactClick(contact.id.value) },
)
}

View file

@ -81,7 +81,7 @@ internal class ContactMatcherTest {
iconColor = iconColor,
createdAt = "2026-06-10T14:30:00.000Z",
updatedAt = "2026-06-10T14:30:00.000Z",
addressEntries = entries.toList(),
addresses = entries.toList(),
)
private fun entry(address: String, networkId: String, memo: String? = null): AddressEntry = AddressEntry(

View file

@ -526,7 +526,7 @@ internal class EditContactModelTest {
userWallet = walletA,
name = "Satoshi",
iconColor = any(),
addressEntries = any(),
addresses = any(),
)
}
verify(exactly = 1) {
@ -830,7 +830,7 @@ internal class EditContactModelTest {
val walletA = createWallet(id = "aa", name = "Wallet A")
setupWallets(wallets = listOf(walletA), selected = walletA)
val contact = existingContact(walletId = "aa", name = "Alice", address = "0xAAA").copy(
addressEntries = listOf(
addresses = listOf(
AddressEntry(
id = AddressEntryId("e-1"),
address = "0xAAA",
@ -891,7 +891,7 @@ internal class EditContactModelTest {
iconColor = CryptoPortfolioIcon.Color.Azure.name,
createdAt = "2026-01-01T00:00:00.000Z",
updatedAt = "2026-01-01T00:00:00.000Z",
addressEntries = listOf(
addresses = listOf(
AddressEntry(
id = AddressEntryId("e-1"),
address = address,

View file

@ -2,7 +2,6 @@ package com.tangem.features.addressbook.list.model
import com.google.common.truth.Truth.assertThat
import com.tangem.core.decompose.model.MutableParamsContainer
import com.tangem.core.decompose.model.ParamsContainer
import com.tangem.core.decompose.navigation.Router
import com.tangem.domain.addressbook.interactor.GetVerifiedContactsInteractor
import com.tangem.domain.addressbook.model.AddressEntry
@ -129,7 +128,7 @@ internal class AddressBookListModelTest {
iconColor = CryptoPortfolioIcon.Color.Azure.name,
createdAt = TIMESTAMP,
updatedAt = TIMESTAMP,
addressEntries = listOf(
addresses = listOf(
AddressEntry(
id = AddressEntryId("e-$id"),
address = "0xABC",

View file

@ -165,7 +165,7 @@ internal class UpdateAddressBookListContentTransformerTest {
iconColor = "Azure",
createdAt = "2026-06-10T14:30:00.000Z",
updatedAt = "2026-06-10T14:30:00.000Z",
addressEntries = listOf(
addresses = listOf(
AddressEntry(
id = AddressEntryId(name),
address = "addr-$name",

View file

@ -124,7 +124,7 @@ internal class SendDestinationModel @Inject constructor(
if (address.contactName != null) return@combine false // sent via a contact
val networkId = cryptoCurrency.network.rawId
contactList.none { contact ->
contact.addressEntries.any {
contact.addresses.any {
it.networkId.value == networkId && it.address.equals(address.actualAddress, ignoreCase = true)
}
}
@ -481,7 +481,7 @@ internal class SendDestinationModel @Inject constructor(
private fun findContactByAddress(address: String): Contact? {
val networkId = cryptoCurrency.network.rawId
return contacts.value.firstOrNull { contact ->
contact.addressEntries.any { entry ->
contact.addresses.any { entry ->
entry.networkId.value == networkId && entry.address.equals(address, ignoreCase = true)
}
}

View file

@ -489,7 +489,7 @@ internal class SendDestinationModelTest {
iconColor = "#FFFFFF",
createdAt = "2026-01-01T00:00:00.000Z",
updatedAt = "2026-01-01T00:00:00.000Z",
addressEntries = listOf(
addresses = listOf(
AddressEntry(
id = AddressEntryId("e1"),
address = address,