From 38832b551c2efd5feaf31293f87448cc1c3106ef Mon Sep 17 00:00:00 2001 From: Biplab Dutta Date: Thu, 26 Jun 2025 22:33:31 +0530 Subject: [PATCH] fix(feature:client): resolve early empty state and dialog layout in identifiers --- .../ClientIdentifiersScreen.kt | 1 - .../ClientIdentifiersViewModel.kt | 26 ++++++++++--------- .../ClientIdentifiersDialogScreen.kt | 5 ++++ .../client/clientList/ClientListScreen.kt | 3 ++- 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientIdentifiers/ClientIdentifiersScreen.kt b/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientIdentifiers/ClientIdentifiersScreen.kt index b9cd43bb53b..84746de8240 100644 --- a/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientIdentifiers/ClientIdentifiersScreen.kt +++ b/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientIdentifiers/ClientIdentifiersScreen.kt @@ -227,7 +227,6 @@ private fun ClientIdentifiersItem( onDocumentClicked: (Int) -> Unit, ) { var showMenu by remember { mutableStateOf(false) } - val lightGreen = MaterialTheme.colorScheme.tertiaryContainer // Or define a custom one ElevatedCard( modifier = Modifier.padding(8.dp), diff --git a/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientIdentifiers/ClientIdentifiersViewModel.kt b/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientIdentifiers/ClientIdentifiersViewModel.kt index 7cc7a8870ef..2d5d25a3838 100644 --- a/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientIdentifiers/ClientIdentifiersViewModel.kt +++ b/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientIdentifiers/ClientIdentifiersViewModel.kt @@ -21,7 +21,6 @@ import com.mifos.core.data.repository.ClientIdentifiersRepository import com.mifos.core.domain.useCases.DeleteIdentifierUseCase import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.flow.catch import kotlinx.coroutines.launch class ClientIdentifiersViewModel( @@ -47,18 +46,21 @@ class ClientIdentifiersViewModel( } fun loadIdentifiers(clientId: Int) = viewModelScope.launch { - _clientIdentifiersUiState.value = - ClientIdentifiersUiState.Loading - clientIdentifiersRepository.getClientIdentifiers(clientId) - .catch { - _clientIdentifiersUiState.value = - ClientIdentifiersUiState.Error( - Res.string.feature_client_failed_to_load_client_identifiers, - ) - }.collect { - _clientIdentifiersUiState.value = - ClientIdentifiersUiState.ClientIdentifiers(it.data ?: emptyList()) + clientIdentifiersRepository.getClientIdentifiers(clientId).collect { result -> + when (result) { + is DataState.Error -> + _clientIdentifiersUiState.value = + ClientIdentifiersUiState.Error(Res.string.feature_client_failed_to_load_client_identifiers) + + is DataState.Loading -> + _clientIdentifiersUiState.value = + ClientIdentifiersUiState.Loading + + is DataState.Success -> + _clientIdentifiersUiState.value = + ClientIdentifiersUiState.ClientIdentifiers(result.data) } + } } fun deleteIdentifier(clientId: Int, identifierId: Int) = viewModelScope.launch { diff --git a/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientIdentifiersDialog/ClientIdentifiersDialogScreen.kt b/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientIdentifiersDialog/ClientIdentifiersDialogScreen.kt index 0cdf643da85..932c0fc0717 100644 --- a/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientIdentifiersDialog/ClientIdentifiersDialogScreen.kt +++ b/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientIdentifiersDialog/ClientIdentifiersDialogScreen.kt @@ -19,6 +19,7 @@ import androidclient.feature.client.generated.resources.feature_client_identifie import androidclient.feature.client.generated.resources.feature_client_identifier_message_field_required import androidclient.feature.client.generated.resources.feature_client_identifier_submit import androidclient.feature.client.generated.resources.feature_client_identifier_unique_id +import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -111,6 +112,10 @@ internal fun ClientIdentifiersDialogScreen( color = MaterialTheme.colorScheme.surface, ) { Box( + modifier = Modifier + .height(425.dp) + .fillMaxWidth() + .background(MaterialTheme.colorScheme.surface), contentAlignment = Alignment.Center, ) { Column(modifier = Modifier.padding(20.dp)) { diff --git a/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientList/ClientListScreen.kt b/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientList/ClientListScreen.kt index af41c25cdc2..b14a7886407 100644 --- a/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientList/ClientListScreen.kt +++ b/feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientList/ClientListScreen.kt @@ -58,6 +58,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.backhandler.BackHandler import androidx.compose.ui.draw.clip import androidx.compose.ui.unit.dp +import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.paging.PagingData import com.mifos.core.designsystem.component.MifosScaffold import com.mifos.core.designsystem.component.MifosSweetError @@ -85,7 +86,7 @@ internal fun ClientListScreen( LaunchedEffect(key1 = true) { viewModel.getClientList() } - val isRefreshing by viewModel.isRefreshing.collectAsState() + val isRefreshing by viewModel.isRefreshing.collectAsStateWithLifecycle() val pullToRefreshState = rememberPullToRefreshState() val snackbarHostState = remember { SnackbarHostState() }