Skip to content

Commit ece7c4a

Browse files
committed
Connect saving account item list to saving account detail Page
1 parent 9df7ef4 commit ece7c4a

File tree

8 files changed

+74
-25
lines changed

8 files changed

+74
-25
lines changed

core/ui/src/commonMain/kotlin/com/mifos/core/ui/components/MifosActionsListingCardComponent.kt

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -734,17 +734,19 @@ fun MifosActionsSavingsListingComponent(
734734
savingsProductName: String,
735735
lastActive: String,
736736
balance: String,
737+
isExpanded: Boolean,
738+
onExpandToggle: () -> Unit,
737739
menuList: List<Actions>,
738740
onActionClicked: (Actions) -> Unit,
739741
) {
740-
var isExpanded by rememberSaveable { mutableStateOf(false) }
741-
742742
Column {
743743
MifosActionsListingComponentOutline(
744744
isExpanded = isExpanded,
745745
) {
746746
Column(
747-
modifier = Modifier.padding(DesignToken.padding.large),
747+
modifier = Modifier.padding(DesignToken.padding.large).onClick {
748+
onExpandToggle()
749+
},
748750
) {
749751
MifosListingRowItemHeader(
750752
text = accountNo,
@@ -773,7 +775,7 @@ fun MifosActionsSavingsListingComponent(
773775
}
774776
}
775777

776-
if (isExpanded) {
778+
AnimatedVisibility(isExpanded) {
777779
Surface(
778780
modifier = Modifier.fillMaxWidth(),
779781
shape = RoundedCornerShape(
@@ -1139,6 +1141,8 @@ private fun PreviewMifosActionsSavingsListingComponent() {
11391141
else -> println("Action not Handled")
11401142
}
11411143
},
1144+
isExpanded = true,
1145+
onExpandToggle = {},
11421146
)
11431147
}
11441148
}

core/ui/src/commonMain/kotlin/com/mifos/core/ui/components/MifosAllUiComponentsPreview.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,8 @@ private fun PreviewMifosActionsSavingsListingComponent() {
167167
else -> println("Action not Handled")
168168
}
169169
},
170+
isExpanded = true,
171+
onExpandToggle = {},
170172
)
171173
}
172174
}

feature/client/src/commonMain/kotlin/com/mifos/feature/client/fixedDepositAccount/FixedDepositAccountScreen.kt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,18 @@ import androidx.compose.foundation.layout.padding
3030
import androidx.compose.foundation.layout.width
3131
import androidx.compose.foundation.layout.wrapContentHeight
3232
import androidx.compose.foundation.lazy.LazyColumn
33-
import androidx.compose.foundation.lazy.items
33+
import androidx.compose.foundation.lazy.itemsIndexed
3434
import androidx.compose.material3.AlertDialog
3535
import androidx.compose.material3.ExperimentalMaterial3Api
3636
import androidx.compose.material3.Icon
3737
import androidx.compose.material3.Text
3838
import androidx.compose.material3.TextButton
3939
import androidx.compose.runtime.Composable
4040
import androidx.compose.runtime.getValue
41+
import androidx.compose.runtime.mutableStateOf
4142
import androidx.compose.runtime.remember
43+
import androidx.compose.runtime.saveable.rememberSaveable
44+
import androidx.compose.runtime.setValue
4245
import androidx.compose.ui.Modifier
4346
import androidx.lifecycle.compose.collectAsStateWithLifecycle
4447
import androidx.navigation.NavController
@@ -132,6 +135,8 @@ fun FixedDepositAccountScaffold(
132135
modifier: Modifier = Modifier,
133136
onAction: (FixedDepositAccountAction) -> Unit,
134137
) {
138+
var expandedIndex by rememberSaveable { mutableStateOf(-1) }
139+
135140
MifosScaffold(
136141
onBackPressed = {
137142
onAction(FixedDepositAccountAction.NavigateBack)
@@ -185,7 +190,7 @@ fun FixedDepositAccountScaffold(
185190
MifosEmptyCard(msg = stringResource(Res.string.client_empty_card_message))
186191
} else {
187192
LazyColumn {
188-
items(state.fixedDepositAccount) { fixedDepositAccount ->
193+
itemsIndexed(state.fixedDepositAccount) { index, fixedDepositAccount ->
189194
MifosActionsSavingsListingComponent(
190195
accountNo = fixedDepositAccount.accountNo ?: notAvailableText,
191196
savingsProduct = stringResource(Res.string.client_product_fixed_deposit_account),
@@ -203,6 +208,10 @@ fun FixedDepositAccountScaffold(
203208
} else {
204209
notAvailableText
205210
},
211+
isExpanded = expandedIndex == index,
212+
onExpandToggle = {
213+
expandedIndex = if (expandedIndex == index) -1 else index
214+
},
206215
menuList = if (fixedDepositAccount.status?.submittedAndPendingApproval == true) {
207216
listOf(
208217
Actions.ViewAccount(MifosIcons.ShielOutlined),

feature/client/src/commonMain/kotlin/com/mifos/feature/client/navigation/ClientNavigation.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ import com.mifos.feature.note.notes.navigateToNoteScreen
9494
import com.mifos.feature.recurringDeposit.newRecurringDepositAccount.navigateToRecurringAccountRoute
9595
import com.mifos.feature.recurringDeposit.newRecurringDepositAccount.recurringAccountDestination
9696
import com.mifos.feature.savings.navigation.navigateToAddSavingsAccount
97+
import com.mifos.feature.savings.navigation.navigateToSavingsAccountApproval
9798
import com.mifos.feature.savings.navigation.navigateToSavingsAccountSummaryScreen
9899
import com.mifos.feature.savings.navigation.savingsDestination
99100
import com.mifos.feature.savings.savingsAccountv2.navigateToSavingsAccountRoute
@@ -287,8 +288,10 @@ fun NavGraphBuilder.clientNavGraph(
287288
)
288289
savingsAccountsDestination(
289290
navigateBack = navController::popBackStack,
290-
navigateToViewAccount = { },
291+
navigateToViewAccount = navController::navigateToSavingsAccountSummaryScreen,
291292
navController = navController,
293+
navigateToApproveAccount = navController::navigateToSavingsAccountApproval,
294+
292295
)
293296
clientCollateralDestination(
294297
onNavigateBack = navController::popBackStack,

feature/client/src/commonMain/kotlin/com/mifos/feature/client/recurringDepositAccount/RecurringDepositAccountScreen.kt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,18 @@ import androidx.compose.foundation.layout.padding
3030
import androidx.compose.foundation.layout.width
3131
import androidx.compose.foundation.layout.wrapContentHeight
3232
import androidx.compose.foundation.lazy.LazyColumn
33-
import androidx.compose.foundation.lazy.items
33+
import androidx.compose.foundation.lazy.itemsIndexed
3434
import androidx.compose.material3.AlertDialog
3535
import androidx.compose.material3.ExperimentalMaterial3Api
3636
import androidx.compose.material3.Icon
3737
import androidx.compose.material3.Text
3838
import androidx.compose.material3.TextButton
3939
import androidx.compose.runtime.Composable
4040
import androidx.compose.runtime.getValue
41+
import androidx.compose.runtime.mutableStateOf
4142
import androidx.compose.runtime.remember
43+
import androidx.compose.runtime.saveable.rememberSaveable
44+
import androidx.compose.runtime.setValue
4245
import androidx.compose.ui.Modifier
4346
import androidx.lifecycle.compose.collectAsStateWithLifecycle
4447
import androidx.navigation.NavController
@@ -132,6 +135,8 @@ internal fun RecurringDepositAccountScaffold(
132135
modifier: Modifier = Modifier,
133136
onAction: (RecurringDepositAccountAction) -> Unit,
134137
) {
138+
var expandedIndex by rememberSaveable { mutableStateOf(-1) }
139+
135140
MifosScaffold(
136141
onBackPressed = {
137142
onAction(RecurringDepositAccountAction.NavigateBack)
@@ -185,7 +190,7 @@ internal fun RecurringDepositAccountScaffold(
185190
MifosEmptyCard(msg = stringResource(Res.string.client_empty_card_message))
186191
} else {
187192
LazyColumn {
188-
items(state.recurringDepositAccounts) { recurringDeposit ->
193+
itemsIndexed(state.recurringDepositAccounts) { index, recurringDeposit ->
189194
MifosActionsSavingsListingComponent(
190195
accountNo = recurringDeposit.accountNo ?: notAvailableText,
191196
savingsProduct = stringResource(Res.string.client_product_recurring_deposit_account),
@@ -203,6 +208,10 @@ internal fun RecurringDepositAccountScaffold(
203208
} else {
204209
notAvailableText
205210
},
211+
isExpanded = expandedIndex == index,
212+
onExpandToggle = {
213+
expandedIndex = if (expandedIndex == index) -1 else index
214+
},
206215
menuList = if (recurringDeposit.status?.submittedAndPendingApproval == true) {
207216
listOf(
208217
Actions.ViewAccount(MifosIcons.Calendar),

feature/client/src/commonMain/kotlin/com/mifos/feature/client/savingsAccounts/SavingsAccounts.kt

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import androidx.compose.foundation.layout.fillMaxWidth
2828
import androidx.compose.foundation.layout.height
2929
import androidx.compose.foundation.layout.padding
3030
import androidx.compose.foundation.lazy.LazyColumn
31-
import androidx.compose.foundation.lazy.items
31+
import androidx.compose.foundation.lazy.itemsIndexed
3232
import androidx.compose.material3.AlertDialog
3333
import androidx.compose.material3.ExperimentalMaterial3Api
3434
import androidx.compose.material3.Icon
@@ -38,7 +38,10 @@ import androidx.compose.material3.Text
3838
import androidx.compose.material3.TextButton
3939
import androidx.compose.runtime.Composable
4040
import androidx.compose.runtime.getValue
41+
import androidx.compose.runtime.mutableStateOf
4142
import androidx.compose.runtime.remember
43+
import androidx.compose.runtime.saveable.rememberSaveable
44+
import androidx.compose.runtime.setValue
4245
import androidx.compose.ui.Modifier
4346
import androidx.compose.ui.unit.dp
4447
import androidx.lifecycle.compose.collectAsStateWithLifecycle
@@ -54,6 +57,7 @@ import com.mifos.core.ui.components.MifosBreadcrumbNavBar
5457
import com.mifos.core.ui.components.MifosProgressIndicator
5558
import com.mifos.core.ui.components.MifosSearchBar
5659
import com.mifos.core.ui.util.EventsEffect
60+
import com.mifos.room.entities.accounts.savings.SavingAccountDepositTypeEntity
5761
import org.jetbrains.compose.resources.painterResource
5862
import org.jetbrains.compose.resources.stringResource
5963
import org.koin.compose.viewmodel.koinViewModel
@@ -63,27 +67,28 @@ internal fun SavingsAccountsScreenRoute(
6367
navigateBack: () -> Unit,
6468
navController: NavController,
6569
viewModel: SavingsAccountsViewModel = koinViewModel(),
66-
navigateToViewAccount: (Int) -> Unit,
70+
navigateToViewAccount: (Int, SavingAccountDepositTypeEntity) -> Unit,
71+
navigateToApproveAccount: (Int) -> Unit,
6772
) {
6873
val state by viewModel.stateFlow.collectAsStateWithLifecycle()
6974

7075
EventsEffect(viewModel.eventFlow) { event ->
7176
when (event) {
7277
SavingsAccountEvent.NavigateBack -> navigateBack()
73-
is SavingsAccountEvent.ViewAccount -> navigateToViewAccount(2)
74-
SavingsAccountEvent.ApproveAccount -> {}
78+
is SavingsAccountEvent.ViewAccount -> navigateToViewAccount(event.accountId, event.accountType)
79+
is SavingsAccountEvent.ApproveAccount -> navigateToApproveAccount(event.accountId)
7580
}
7681
}
7782

78-
SavingsAccountsDialog(
83+
SavingsAccountsScreen(
7984
state = state,
8085
onAction = remember(viewModel) { { viewModel.trySendAction(it) } },
86+
navController = navController,
8187
)
8288

83-
SavingsAccountsScreen(
89+
SavingsAccountsDialog(
8490
state = state,
8591
onAction = remember(viewModel) { { viewModel.trySendAction(it) } },
86-
navController = navController,
8792
)
8893
}
8994

@@ -93,6 +98,8 @@ fun SavingsAccountsScreen(
9398
state: SavingsAccountState,
9499
navController: NavController,
95100
) {
101+
var expandedIndex by rememberSaveable { mutableStateOf(-1) }
102+
96103
MifosScaffold(
97104
title = stringResource(Res.string.update_default_account_title),
98105
onBackPressed = { onAction(SavingsAccountAction.NavigateBack) },
@@ -130,7 +137,7 @@ fun SavingsAccountsScreen(
130137
EmptySavingsCard()
131138
} else {
132139
LazyColumn {
133-
items(state.savingsAccounts) { savings ->
140+
itemsIndexed(state.savingsAccounts) { index, savings ->
134141
MifosActionsSavingsListingComponent(
135142
accountNo = savings.accountNo.toString(),
136143
savingsProduct = stringResource(Res.string.client_product_saving_account),
@@ -155,13 +162,14 @@ fun SavingsAccountsScreen(
155162
when (actions) {
156163
is Actions.ViewAccount -> onAction.invoke(
157164
SavingsAccountAction.ViewAccount(
158-
state.clientId,
165+
savings.id ?: 0,
166+
savings.depositType ?: SavingAccountDepositTypeEntity(),
159167
),
160168
)
161169

162170
is Actions.ApproveAccount -> onAction.invoke(
163171
SavingsAccountAction.ApproveAccount(
164-
state.clientId,
172+
savings.id ?: 0,
165173
),
166174
)
167175

@@ -175,6 +183,10 @@ fun SavingsAccountsScreen(
175183
} else {
176184
stringResource(Res.string.client_savings_not_avilable)
177185
},
186+
isExpanded = expandedIndex == index,
187+
onExpandToggle = {
188+
expandedIndex = if (expandedIndex == index) -1 else index
189+
},
178190
)
179191

180192
Spacer(modifier = Modifier.height(DesignToken.spacing.small))

feature/client/src/commonMain/kotlin/com/mifos/feature/client/savingsAccounts/SavingsAccountsRoute.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ package com.mifos.feature.client.savingsAccounts
1212
import androidx.navigation.NavController
1313
import androidx.navigation.NavGraphBuilder
1414
import androidx.navigation.compose.composable
15+
import com.mifos.room.entities.accounts.savings.SavingAccountDepositTypeEntity
1516
import kotlinx.serialization.Serializable
1617

1718
@Serializable
@@ -22,12 +23,14 @@ data class SavingsAccountsRoute(
2223
fun NavGraphBuilder.savingsAccountsDestination(
2324
navigateBack: () -> Unit,
2425
navController: NavController,
25-
navigateToViewAccount: (Int) -> Unit,
26+
navigateToViewAccount: (Int, SavingAccountDepositTypeEntity) -> Unit,
27+
navigateToApproveAccount: (Int) -> Unit,
2628
) {
2729
composable<SavingsAccountsRoute> {
2830
SavingsAccountsScreenRoute(
2931
navigateBack = navigateBack,
3032
navigateToViewAccount = navigateToViewAccount,
33+
navigateToApproveAccount = navigateToApproveAccount,
3134
navController = navController,
3235
)
3336
}

feature/client/src/commonMain/kotlin/com/mifos/feature/client/savingsAccounts/SavingsAccountsViewModel.kt

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,11 @@ internal class SavingsAccountsViewModel(
2929

3030
override fun handleAction(action: SavingsAccountAction) {
3131
when (action) {
32-
is SavingsAccountAction.ApproveAccount -> sendEvent(SavingsAccountEvent.ApproveAccount)
32+
is SavingsAccountAction.ApproveAccount -> sendEvent(
33+
SavingsAccountEvent.ApproveAccount(
34+
action.accountId,
35+
),
36+
)
3337

3438
SavingsAccountAction.ToggleFilter -> {
3539
mutableStateFlow.update {
@@ -44,7 +48,7 @@ internal class SavingsAccountsViewModel(
4448
}
4549

4650
is SavingsAccountAction.ViewAccount -> {
47-
sendEvent(SavingsAccountEvent.ViewAccount(state.clientId))
51+
sendEvent(SavingsAccountEvent.ViewAccount(action.accountId, action.accountType))
4852
}
4953

5054
SavingsAccountAction.Refresh -> {
@@ -125,8 +129,9 @@ data class SavingsAccountState(
125129

126130
sealed interface SavingsAccountEvent {
127131
data object NavigateBack : SavingsAccountEvent
128-
data object ApproveAccount : SavingsAccountEvent
129-
data class ViewAccount(val id: Int) : SavingsAccountEvent
132+
data class ApproveAccount(val accountId: Int) : SavingsAccountEvent
133+
data class ViewAccount(val accountId: Int, val accountType: SavingAccountDepositTypeEntity) :
134+
SavingsAccountEvent
130135
}
131136

132137
sealed interface SavingsAccountAction {
@@ -135,7 +140,9 @@ sealed interface SavingsAccountAction {
135140
data object ToggleFilter : SavingsAccountAction
136141
data object Refresh : SavingsAccountAction
137142
data class ApproveAccount(val accountId: Int) : SavingsAccountAction
138-
data class ViewAccount(val accountId: Int) : SavingsAccountAction
143+
data class ViewAccount(val accountId: Int, val accountType: SavingAccountDepositTypeEntity) :
144+
SavingsAccountAction
145+
139146
data class UpdateSearchValue(val query: String) : SavingsAccountAction
140147
data object OnSearchClick : SavingsAccountAction
141148
data object CloseDialog : SavingsAccountAction

0 commit comments

Comments
 (0)