Skip to content

Commit 12600c9

Browse files
refactor(data-table): migrate DataTableListViewModel to BaseViewModel
Fold the separate ui-state, data-table-list, form-values and user-status flows into a single DataTableListState exposed via stateFlow, move navigation and client-created results to one-shot events, and drive field updates and save through handleAction. DataTableListScreen now consumes stateFlow/eventFlow and dispatches via trySendAction. Removes the standalone DataTableListUiState.
1 parent 9ccb162 commit 12600c9

3 files changed

Lines changed: 159 additions & 146 deletions

File tree

feature/data-table/src/commonMain/kotlin/com/mifos/feature/dataTable/dataTableList/DataTableListScreen.kt

Lines changed: 27 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import androidclient.feature.data_table.generated.resources.feature_data_table_a
1414
import androidclient.feature.data_table.generated.resources.feature_data_table_dismiss
1515
import androidclient.feature.data_table.generated.resources.feature_data_table_save
1616
import 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
1817
import androidx.compose.foundation.layout.Box
1918
import androidx.compose.foundation.layout.Column
2019
import androidx.compose.foundation.layout.Row
@@ -58,6 +57,7 @@ import com.mifos.core.designsystem.component.MifosTextFieldDropdown
5857
import com.mifos.core.ui.components.MifosProgressIndicator
5958
import com.mifos.room.entities.client.ClientPayloadEntity
6059
import com.mifos.room.entities.noncore.DataTableEntity
60+
import org.jetbrains.compose.resources.getString
6161
import org.jetbrains.compose.resources.stringResource
6262
import org.jetbrains.compose.ui.tooling.preview.Preview
6363
import 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
9697
fun 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
357333
fun 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
}

feature/data-table/src/commonMain/kotlin/com/mifos/feature/dataTable/dataTableList/DataTableListUiState.kt

Lines changed: 0 additions & 26 deletions
This file was deleted.

0 commit comments

Comments
 (0)