Updated on 2026-08-14
This commit is contained in:
parent
3e47825909
commit
1f00384c0c
22 changed files with 59 additions and 63 deletions
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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() },
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -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) },
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue