From eef969ae57476c51cecd8334a95a290334290222 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 8 Jun 2026 16:39:52 +0100 Subject: [PATCH] Updated on 2026-08-14 --- features/address-book/impl/build.gradle.kts | 1 + .../component/DefaultAddressBookComponent.kt | 9 ++++++++- .../list/AddressBookListComponent.kt | 5 ++++- .../list/DefaultAddressBookListComponent.kt | 7 ++++--- .../list/contract/AddressBookListContract.kt | 16 ---------------- .../list/contract/AddressBookListUM.kt | 11 +++++++++++ .../list/model/AddressBookListModel.kt | 15 --------------- .../list/ui/AddressBookEmptyScreen.kt | 18 ++++++++++++++++-- 8 files changed, 44 insertions(+), 38 deletions(-) delete mode 100644 features/address-book/impl/src/main/kotlin/com/tangem/features/addressbook/list/contract/AddressBookListContract.kt create mode 100644 features/address-book/impl/src/main/kotlin/com/tangem/features/addressbook/list/contract/AddressBookListUM.kt diff --git a/features/address-book/impl/build.gradle.kts b/features/address-book/impl/build.gradle.kts index c36b2239ed..8ecab403c4 100644 --- a/features/address-book/impl/build.gradle.kts +++ b/features/address-book/impl/build.gradle.kts @@ -17,6 +17,7 @@ dependencies { /** Domain */ implementation(projects.domain.models) + implementation(projects.domain.addressBook) /** Core modules */ implementation(projects.core.configToggles) diff --git a/features/address-book/impl/src/main/kotlin/com/tangem/features/addressbook/component/DefaultAddressBookComponent.kt b/features/address-book/impl/src/main/kotlin/com/tangem/features/addressbook/component/DefaultAddressBookComponent.kt index 8a816cec10..96888bc360 100644 --- a/features/address-book/impl/src/main/kotlin/com/tangem/features/addressbook/component/DefaultAddressBookComponent.kt +++ b/features/address-book/impl/src/main/kotlin/com/tangem/features/addressbook/component/DefaultAddressBookComponent.kt @@ -51,7 +51,14 @@ internal class DefaultAddressBookComponent @AssistedInject constructor( when (config) { AddressBookRoute.List -> addressBookListComponentFactory.create( context = childByContext(componentContext), - params = AddressBookListComponent.Params, + params = AddressBookListComponent.Params( + onContactClick = { contactId -> + // TODO [REDACTED_TASK_KEY] router.push(EditContact(contactId)) + }, + onAddContactClick = { + // TODO [REDACTED_TASK_KEY] router.push(AddContact) + }, + ), ) } diff --git a/features/address-book/impl/src/main/kotlin/com/tangem/features/addressbook/list/AddressBookListComponent.kt b/features/address-book/impl/src/main/kotlin/com/tangem/features/addressbook/list/AddressBookListComponent.kt index 280b889082..0072a79d9f 100644 --- a/features/address-book/impl/src/main/kotlin/com/tangem/features/addressbook/list/AddressBookListComponent.kt +++ b/features/address-book/impl/src/main/kotlin/com/tangem/features/addressbook/list/AddressBookListComponent.kt @@ -7,5 +7,8 @@ internal interface AddressBookListComponent : ComposableContentComponent { interface Factory : ComponentFactory - data object Params + data class Params( + val onContactClick: (String) -> Unit, + val onAddContactClick: () -> Unit, + ) } \ No newline at end of file diff --git a/features/address-book/impl/src/main/kotlin/com/tangem/features/addressbook/list/DefaultAddressBookListComponent.kt b/features/address-book/impl/src/main/kotlin/com/tangem/features/addressbook/list/DefaultAddressBookListComponent.kt index a5ce1d1ea3..416edbd08c 100644 --- a/features/address-book/impl/src/main/kotlin/com/tangem/features/addressbook/list/DefaultAddressBookListComponent.kt +++ b/features/address-book/impl/src/main/kotlin/com/tangem/features/addressbook/list/DefaultAddressBookListComponent.kt @@ -6,7 +6,6 @@ import androidx.compose.ui.Modifier import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.tangem.core.decompose.context.AppComponentContext import com.tangem.core.decompose.model.getOrCreateModel -import com.tangem.features.addressbook.list.contract.AddressBookListEvent import com.tangem.features.addressbook.list.contract.AddressBookListUM import com.tangem.features.addressbook.list.model.AddressBookListModel import com.tangem.features.addressbook.list.ui.AddressBookEmptyScreen @@ -16,7 +15,7 @@ import dagger.assisted.AssistedInject internal class DefaultAddressBookListComponent @AssistedInject constructor( @Assisted context: AppComponentContext, - @Assisted params: AddressBookListComponent.Params, + @Assisted val params: AddressBookListComponent.Params, ) : AddressBookListComponent, AppComponentContext by context { private val model: AddressBookListModel = getOrCreateModel(params) @@ -26,9 +25,11 @@ internal class DefaultAddressBookListComponent @AssistedInject constructor( val state by model.state.collectAsStateWithLifecycle() when (state) { AddressBookListUM.Empty -> AddressBookEmptyScreen( - onAddContactClick = { model.onAction(event = AddressBookListEvent.NewContactClick) }, + onAddContactClick = params.onAddContactClick, + onBackClick = router::pop, modifier = modifier, ) + is AddressBookListUM.AddressList -> TODO("[REDACTED_TASK_KEY]") } } diff --git a/features/address-book/impl/src/main/kotlin/com/tangem/features/addressbook/list/contract/AddressBookListContract.kt b/features/address-book/impl/src/main/kotlin/com/tangem/features/addressbook/list/contract/AddressBookListContract.kt deleted file mode 100644 index 95f4736361..0000000000 --- a/features/address-book/impl/src/main/kotlin/com/tangem/features/addressbook/list/contract/AddressBookListContract.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.tangem.features.addressbook.list.contract - -import androidx.compose.runtime.Immutable - -@Immutable -internal sealed interface AddressBookListUM { - - data object Empty : AddressBookListUM -} - -internal sealed interface AddressBookListEvent { - data object NewContactClick : AddressBookListEvent - data class ContactClick(val contactId: String) : AddressBookListEvent - data class ChipClick(val walletId: String) : AddressBookListEvent - data class SearchInput(val query: String) : AddressBookListEvent -} \ No newline at end of file diff --git a/features/address-book/impl/src/main/kotlin/com/tangem/features/addressbook/list/contract/AddressBookListUM.kt b/features/address-book/impl/src/main/kotlin/com/tangem/features/addressbook/list/contract/AddressBookListUM.kt new file mode 100644 index 0000000000..3b50fcb3c1 --- /dev/null +++ b/features/address-book/impl/src/main/kotlin/com/tangem/features/addressbook/list/contract/AddressBookListUM.kt @@ -0,0 +1,11 @@ +package com.tangem.features.addressbook.list.contract + +import androidx.compose.runtime.Immutable +import com.tangem.domain.addressbook.model.Contact + +@Immutable +internal sealed class AddressBookListUM { + + data object Empty : AddressBookListUM() + data class AddressList(val contacts: List) : AddressBookListUM() +} \ No newline at end of file diff --git a/features/address-book/impl/src/main/kotlin/com/tangem/features/addressbook/list/model/AddressBookListModel.kt b/features/address-book/impl/src/main/kotlin/com/tangem/features/addressbook/list/model/AddressBookListModel.kt index 966a3b9205..224fa6edd0 100644 --- a/features/address-book/impl/src/main/kotlin/com/tangem/features/addressbook/list/model/AddressBookListModel.kt +++ b/features/address-book/impl/src/main/kotlin/com/tangem/features/addressbook/list/model/AddressBookListModel.kt @@ -2,9 +2,6 @@ package com.tangem.features.addressbook.list.model import com.tangem.core.decompose.di.ModelScoped import com.tangem.core.decompose.model.Model -import com.tangem.core.decompose.model.ParamsContainer -import com.tangem.features.addressbook.list.AddressBookListComponent -import com.tangem.features.addressbook.list.contract.AddressBookListEvent import com.tangem.features.addressbook.list.contract.AddressBookListUM import com.tangem.utils.coroutines.CoroutineDispatcherProvider import kotlinx.coroutines.flow.MutableStateFlow @@ -13,22 +10,10 @@ import javax.inject.Inject @ModelScoped internal class AddressBookListModel @Inject constructor( - paramsContainer: ParamsContainer, override val dispatchers: CoroutineDispatcherProvider, ) : Model() { - private val params: AddressBookListComponent.Params = paramsContainer.require() - val state: StateFlow = MutableStateFlow( AddressBookListUM.Empty, ) - - fun onAction(event: AddressBookListEvent) { - when (event) { - AddressBookListEvent.NewContactClick -> params - is AddressBookListEvent.ContactClick -> Unit - is AddressBookListEvent.ChipClick -> Unit - is AddressBookListEvent.SearchInput -> Unit - } - } } \ No newline at end of file diff --git a/features/address-book/impl/src/main/kotlin/com/tangem/features/addressbook/list/ui/AddressBookEmptyScreen.kt b/features/address-book/impl/src/main/kotlin/com/tangem/features/addressbook/list/ui/AddressBookEmptyScreen.kt index 5c39b70eee..0eb8eb4765 100644 --- a/features/address-book/impl/src/main/kotlin/com/tangem/features/addressbook/list/ui/AddressBookEmptyScreen.kt +++ b/features/address-book/impl/src/main/kotlin/com/tangem/features/addressbook/list/ui/AddressBookEmptyScreen.kt @@ -15,15 +15,29 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.tangem.core.ui.R import com.tangem.core.ui.components.PrimaryButtonIconEnd +import com.tangem.core.ui.components.appbar.TangemTopAppBar +import com.tangem.core.ui.components.appbar.models.TopAppBarButtonUM +import com.tangem.core.ui.extensions.resourceReference import com.tangem.core.ui.extensions.stringResourceSafe import com.tangem.core.ui.res.TangemTheme @Composable -internal fun AddressBookEmptyScreen(onAddContactClick: () -> Unit, modifier: Modifier = Modifier) { +internal fun AddressBookEmptyScreen( + onAddContactClick: () -> Unit, + onBackClick: () -> Unit, + modifier: Modifier = Modifier, +) { Column( modifier = modifier, horizontalAlignment = Alignment.CenterHorizontally, ) { + TangemTopAppBar( + modifier = Modifier.statusBarsPadding(), + title = resourceReference(R.string.address_book_title), + startButton = TopAppBarButtonUM.Back( + onBackClicked = onBackClick, + ), + ) NoContactInfo() PrimaryButtonIconEnd( modifier = Modifier @@ -84,5 +98,5 @@ private fun ContactImage() { @Preview(showBackground = true, widthDp = 360) @Preview(showBackground = true, widthDp = 360, uiMode = Configuration.UI_MODE_NIGHT_YES) private fun Preview_AddressBookEmptyScreen() { - AddressBookEmptyScreen(onAddContactClick = {}) + AddressBookEmptyScreen(onAddContactClick = {}, onBackClick = {}) } \ No newline at end of file