Skip to content

Commit cbbd639

Browse files
committed
Replace dialog with snackbar for showing error and success messages
1 parent 266b7f1 commit cbbd639

3 files changed

Lines changed: 49 additions & 48 deletions

File tree

feature/loan/src/commonMain/kotlin/com/mifos/feature/loan/loanChargeOff/LoanChargeOffScreen.kt

Lines changed: 46 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import androidclient.feature.loan.generated.resources.feature_loan_charge_off_pl
2121
import androidclient.feature.loan.generated.resources.feature_loan_charge_off_reason
2222
import androidclient.feature.loan.generated.resources.feature_loan_charge_off_submit
2323
import androidclient.feature.loan.generated.resources.feature_loan_charge_off_transaction_date
24+
import androidclient.feature.loan.generated.resources.feature_loan_loan_charges
2425
import androidclient.feature.loan.generated.resources.ok
2526
import androidx.compose.foundation.layout.Box
2627
import androidx.compose.foundation.layout.Column
@@ -34,14 +35,19 @@ import androidx.compose.foundation.verticalScroll
3435
import androidx.compose.material3.DatePicker
3536
import androidx.compose.material3.DatePickerDialog
3637
import androidx.compose.material3.ExperimentalMaterial3Api
38+
import androidx.compose.material3.Icon
39+
import androidx.compose.material3.IconButton
3740
import androidx.compose.material3.SelectableDates
41+
import androidx.compose.material3.SnackbarHostState
3842
import androidx.compose.material3.Text
3943
import androidx.compose.material3.TextButton
4044
import androidx.compose.material3.rememberDatePickerState
4145
import androidx.compose.runtime.Composable
4246
import androidx.compose.runtime.LaunchedEffect
4347
import androidx.compose.runtime.getValue
48+
import androidx.compose.runtime.mutableStateOf
4449
import androidx.compose.runtime.remember
50+
import androidx.compose.runtime.rememberCoroutineScope
4551
import androidx.compose.ui.Modifier
4652
import androidx.compose.ui.text.input.KeyboardType
4753
import androidx.lifecycle.compose.collectAsStateWithLifecycle
@@ -50,14 +56,17 @@ import com.mifos.core.common.utils.DateHelper
5056
import com.mifos.core.designsystem.component.MifosButton
5157
import com.mifos.core.designsystem.component.MifosDatePickerTextField
5258
import com.mifos.core.designsystem.component.MifosOutlinedTextField
59+
import com.mifos.core.designsystem.component.MifosScaffold
5360
import com.mifos.core.designsystem.component.MifosSweetError
5461
import com.mifos.core.designsystem.component.MifosTextFieldDropdown
62+
import com.mifos.core.designsystem.icon.MifosIcons
5563
import com.mifos.core.designsystem.theme.DesignToken
5664
import com.mifos.core.designsystem.theme.MifosTypography
5765
import com.mifos.core.ui.components.MifosAlertDialog
5866
import com.mifos.core.ui.components.MifosBreadcrumbNavBar
5967
import com.mifos.core.ui.components.MifosProgressIndicator
6068
import com.mifos.core.ui.util.EventsEffect
69+
import kotlinx.html.Entities
6170
import org.jetbrains.compose.resources.stringResource
6271
import org.koin.compose.viewmodel.koinViewModel
6372
import template.core.base.designsystem.theme.KptTheme
@@ -84,11 +93,6 @@ internal fun LoanChargeOffScreen(
8493
onAction = remember(viewModel) { { viewModel.trySendAction(it) } },
8594
navController = navController,
8695
)
87-
88-
LoanChargeOffDialog(
89-
state = state,
90-
onAction = remember(viewModel) { { viewModel.trySendAction(it) } },
91-
)
9296
}
9397

9498
@Composable
@@ -98,33 +102,47 @@ private fun LoanChargeOffScreenContent(
98102
navController: NavController,
99103
modifier: Modifier = Modifier,
100104
) {
101-
Column(
102-
modifier = modifier.fillMaxSize(),
103-
) {
104-
MifosBreadcrumbNavBar(navController)
105+
val snackbarHostState = remember { SnackbarHostState() }
106+
val snackbarMessage = state.snackbarMessage?.let { stringResource(it) }
107+
LaunchedEffect(snackbarMessage) {
108+
snackbarMessage?.let {
109+
snackbarHostState.showSnackbar(it)
110+
}
111+
}
105112

106-
Box(
107-
modifier = Modifier
108-
.fillMaxSize()
109-
.padding(horizontal = KptTheme.spacing.md),
113+
MifosScaffold(
114+
title = stringResource(Res.string.feature_loan_charge_off),
115+
onBackPressed = { onAction(LoanChargeOffAction.NavigateBack) },
116+
snackbarHostState = snackbarHostState,
117+
) {
118+
Column(
119+
modifier = modifier.fillMaxSize(),
110120
) {
111-
when (state.viewState) {
112-
is LoanChargeOffState.ViewState.Loading -> {
113-
MifosProgressIndicator()
114-
}
121+
MifosBreadcrumbNavBar(navController)
115122

116-
is LoanChargeOffState.ViewState.Error -> {
117-
MifosSweetError(
118-
message = stringResource(state.viewState.message),
119-
onclick = { onAction(LoanChargeOffAction.OnRetry) },
120-
)
121-
}
123+
Box(
124+
modifier = Modifier
125+
.fillMaxSize()
126+
.padding(horizontal = KptTheme.spacing.md),
127+
) {
128+
when (state.viewState) {
129+
is LoanChargeOffState.ViewState.Loading -> {
130+
MifosProgressIndicator()
131+
}
132+
133+
is LoanChargeOffState.ViewState.Error -> {
134+
MifosSweetError(
135+
message = stringResource(state.viewState.message),
136+
onclick = { onAction(LoanChargeOffAction.OnRetry) },
137+
)
138+
}
122139

123-
is LoanChargeOffState.ViewState.Success -> {
124-
LoanChargeOffForm(
125-
state = state,
126-
onAction = onAction,
127-
)
140+
is LoanChargeOffState.ViewState.Success -> {
141+
LoanChargeOffForm(
142+
state = state,
143+
onAction = onAction,
144+
)
145+
}
128146
}
129147
}
130148
}
@@ -254,18 +272,3 @@ private fun LoanChargeOffForm(
254272
Spacer(modifier = Modifier.height(KptTheme.spacing.md))
255273
}
256274
}
257-
258-
@Composable
259-
private fun LoanChargeOffDialog(
260-
state: LoanChargeOffState,
261-
onAction: (LoanChargeOffAction) -> Unit,
262-
) {
263-
if (state.dialogMessage != null) {
264-
MifosAlertDialog(
265-
onConfirmation = { onAction(LoanChargeOffAction.DismissDialog) },
266-
dialogText = stringResource(state.dialogMessage),
267-
onDismissRequest = {},
268-
dismissText = null,
269-
)
270-
}
271-
}

feature/loan/src/commonMain/kotlin/com/mifos/feature/loan/loanChargeOff/LoanChargeOffState.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ constructor(
2525
val showDatePicker: Boolean = false,
2626
val isReasonError: Boolean = false,
2727
val isSubmitting: Boolean = false,
28-
val dialogMessage: StringResource? = null,
28+
val snackbarMessage: StringResource? = null,
2929
) {
3030
sealed interface ViewState {
3131
data object Loading : ViewState

feature/loan/src/commonMain/kotlin/com/mifos/feature/loan/loanChargeOff/LoanChargeOffViewModel.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ internal class LoanChargeOffViewModel(
9595
mutableStateFlow.update {
9696
it.copy(
9797
isSubmitting = false,
98-
dialogMessage = Res.string.feature_loan_charge_off_failed,
98+
snackbarMessage = Res.string.feature_loan_charge_off_failed,
9999
)
100100
}
101101
}
@@ -110,7 +110,7 @@ internal class LoanChargeOffViewModel(
110110
mutableStateFlow.update {
111111
it.copy(
112112
isSubmitting = false,
113-
dialogMessage = Res.string.feature_loan_charge_off_success,
113+
snackbarMessage = Res.string.feature_loan_charge_off_success,
114114
)
115115
}
116116
sendEvent(LoanChargeOffEvent.ChargeOffSuccess)
@@ -138,7 +138,6 @@ internal class LoanChargeOffViewModel(
138138
when (action) {
139139
LoanChargeOffAction.NavigateBack -> sendEvent(LoanChargeOffEvent.NavigateBack)
140140
LoanChargeOffAction.OnRetry -> loadTemplate()
141-
LoanChargeOffAction.DismissDialog -> mutableStateFlow.update { it.copy(dialogMessage = null) }
142141
is LoanChargeOffAction.ReasonSelected -> handleReasonSelection(action.index)
143142

144143
is LoanChargeOffAction.TransactionDateChanged ->
@@ -172,7 +171,6 @@ sealed interface LoanChargeOffEvent {
172171
sealed interface LoanChargeOffAction {
173172
data object NavigateBack : LoanChargeOffAction
174173
data object OnRetry : LoanChargeOffAction
175-
data object DismissDialog : LoanChargeOffAction
176174
data class ReasonSelected(val index: Int) : LoanChargeOffAction
177175
data class TransactionDateChanged(val dateMillis: Long) : LoanChargeOffAction
178176
data class ExternalIdChanged(val value: String) : LoanChargeOffAction

0 commit comments

Comments
 (0)