@@ -14,7 +14,6 @@ import androidclient.feature.data_table.generated.resources.feature_data_table_a
1414import androidclient.feature.data_table.generated.resources.feature_data_table_dismiss
1515import androidclient.feature.data_table.generated.resources.feature_data_table_save
1616import androidclient.feature.data_table.generated.resources.feature_data_table_select_date
17- import androidclient.feature.data_table.generated.resources.feature_data_table_something_went_wrong
1817import androidx.compose.foundation.layout.Box
1918import androidx.compose.foundation.layout.Column
2019import androidx.compose.foundation.layout.Row
@@ -58,6 +57,7 @@ import com.mifos.core.designsystem.component.MifosTextFieldDropdown
5857import com.mifos.core.ui.components.MifosProgressIndicator
5958import com.mifos.room.entities.client.ClientPayloadEntity
6059import com.mifos.room.entities.noncore.DataTableEntity
60+ import org.jetbrains.compose.resources.getString
6161import org.jetbrains.compose.resources.stringResource
6262import org.jetbrains.compose.ui.tooling.preview.Preview
6363import org.koin.compose.viewmodel.koinViewModel
@@ -71,39 +71,36 @@ fun DataTableListScreen(
7171 clientCreated : (ClientPayloadEntity , Boolean ) -> Unit ,
7272 viewModel : DataTableListViewModel = koinViewModel(),
7373) {
74- val dataTables = viewModel.arg.dataTableList
75- val requestType = viewModel.arg.requestType
76- val payload = viewModel.arg.payload
77- val uiState by viewModel.dataTableListUiState.collectAsStateWithLifecycle()
78- val userStatus by viewModel.userStatus.collectAsStateWithLifecycle()
79- val dataTableList by viewModel.dataTableList.collectAsStateWithLifecycle()
74+ val state by viewModel.stateFlow.collectAsStateWithLifecycle()
75+ val snackBarHostState = remember { SnackbarHostState () }
8076
8177 LaunchedEffect (key1 = Unit ) {
82- viewModel.initArgs(dataTables, requestType, payload)
78+ viewModel.eventFlow.collect { event ->
79+ when (event) {
80+ DataTableListEvent .NavigateBack -> onBackPressed()
81+ is DataTableListEvent .ClientCreated -> clientCreated(event.client, state.userStatus)
82+ is DataTableListEvent .ShowMessage ->
83+ snackBarHostState.showSnackbar(getString(event.message))
84+ }
85+ }
8386 }
8487
8588 DataTableListScreen (
86- uiState = uiState ,
87- dataTableList = dataTableList ? : listOf () ,
89+ state = state ,
90+ snackBarHostState = snackBarHostState ,
8891 onBackPressed = onBackPressed,
89- clientCreated = { client -> clientCreated(client, userStatus) },
90- onSaveClicked = { viewModel.processDataTable() },
91- onFieldChanged = viewModel::updateFieldValue,
92+ onAction = viewModel::trySendAction,
9293 )
9394}
9495
9596@Composable
9697fun DataTableListScreen (
97- uiState : DataTableListUiState ,
98- dataTableList : List < DataTableEntity > ,
98+ state : DataTableListState ,
99+ snackBarHostState : SnackbarHostState ,
99100 onBackPressed : () -> Unit ,
100- clientCreated : (ClientPayloadEntity ) -> Unit ,
101- onSaveClicked : () -> Unit ,
102- onFieldChanged : (tableIndex: Int , columnName: String , value: Any ) -> Unit ,
101+ onAction : (DataTableListAction ) -> Unit ,
103102 modifier : Modifier = Modifier ,
104103) {
105- val snackBarHostState = remember { SnackbarHostState () }
106-
107104 MifosScaffold (
108105 title = stringResource(Res .string.feature_data_table_associated_datatables),
109106 onBackPressed = onBackPressed,
@@ -115,37 +112,16 @@ fun DataTableListScreen(
115112 .fillMaxSize(),
116113 ) {
117114 DataTableListContent (
118- dataTableList = dataTableList,
119- onSaveClicked = onSaveClicked,
120- onFieldChanged = onFieldChanged,
115+ dataTableList = state.dataTableList,
116+ onSaveClicked = { onAction(DataTableListAction .OnSaveClicked ) },
117+ onFieldChanged = { tableIndex, columnName, value ->
118+ onAction(DataTableListAction .OnFieldChanged (tableIndex, columnName, value))
119+ },
121120 modifier = Modifier .fillMaxWidth(),
122121 )
123122
124- when (uiState) {
125- is DataTableListUiState .ShowMessage -> {
126- val message = when {
127- uiState.message != null -> stringResource(uiState.message)
128- else -> stringResource(Res .string.feature_data_table_something_went_wrong)
129- }
130- LaunchedEffect (message) {
131- snackBarHostState.showSnackbar(message = message)
132- }
133- }
134-
135- is DataTableListUiState .Loading -> MifosProgressIndicator ()
136- is DataTableListUiState .Success -> {
137- uiState.client?.let { client ->
138- clientCreated(client)
139- } ? : run {
140- if (uiState.message != null ) {
141- val message = stringResource(uiState.message)
142- LaunchedEffect (key1 = message) {
143- snackBarHostState.showSnackbar(message)
144- onBackPressed()
145- }
146- }
147- }
148- }
123+ if (state.screenState == DataTableListState .ScreenState .Loading ) {
124+ MifosProgressIndicator ()
149125 }
150126 }
151127 }
@@ -356,11 +332,9 @@ fun TableColumnHeader(
356332@Composable
357333fun DataTableListScreenPreview () {
358334 DataTableListScreen (
359- uiState = DataTableListUiState . Success (),
360- dataTableList = listOf () ,
335+ state = DataTableListState (),
336+ snackBarHostState = remember { SnackbarHostState () } ,
361337 onBackPressed = { },
362- clientCreated = { },
363- onSaveClicked = { },
364- onFieldChanged = { _, _, _ -> },
338+ onAction = { },
365339 )
366340}
0 commit comments