Skip to content

Commit b13eda8

Browse files
feat: home ui & viewModel (#2860)
1 parent 963e586 commit b13eda8

File tree

24 files changed

+910
-1276
lines changed

24 files changed

+910
-1276
lines changed

cmp-navigation/src/commonMain/kotlin/cmp/navigation/authenticated/AuthenticatedNavigation.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import androidx.navigation.navigation
1818
import cmp.navigation.authenticatednavbar.AuthenticatedNavbarRoute
1919
import cmp.navigation.authenticatednavbar.authenticatedNavbarGraph
2020
import kotlinx.serialization.Serializable
21+
import org.mifos.mobile.feature.notification.navigation.navigateToNotificationScreen
22+
import org.mifos.mobile.feature.notification.navigation.notificationDestination
2123

2224
@Serializable
2325
internal data object AuthenticatedGraphRoute
@@ -33,7 +35,13 @@ internal fun NavGraphBuilder.authenticatedGraph(
3335
navigation<AuthenticatedGraphRoute>(
3436
startDestination = AuthenticatedNavbarRoute,
3537
) {
36-
authenticatedNavbarGraph()
38+
authenticatedNavbarGraph(
39+
navigateToNotificationScreen = navController::navigateToNotificationScreen,
40+
)
41+
42+
notificationDestination(
43+
navigateBack = navController::popBackStack,
44+
)
3745
}
3846
}
3947

cmp-navigation/src/commonMain/kotlin/cmp/navigation/authenticatednavbar/AuthenticatedNavbarNavigation.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,12 @@ internal fun NavController.navigateToAuthenticatedNavBar(navOptions: NavOptions?
2424
navigate(route = AuthenticatedNavbarRoute, navOptions = navOptions)
2525
}
2626

27-
internal fun NavGraphBuilder.authenticatedNavbarGraph() {
27+
internal fun NavGraphBuilder.authenticatedNavbarGraph(
28+
navigateToNotificationScreen: () -> Unit,
29+
) {
2830
composableWithStayTransitions<AuthenticatedNavbarRoute> {
29-
AuthenticatedNavbarNavigationScreen()
31+
AuthenticatedNavbarNavigationScreen(
32+
navigateToNotificationScreen = navigateToNotificationScreen,
33+
)
3034
}
3135
}

cmp-navigation/src/commonMain/kotlin/cmp/navigation/authenticatednavbar/AuthenticatedNavbarNavigationScreen.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ import org.mifos.mobile.navigation.generated.resources.not_connected
5050

5151
@Composable
5252
internal fun AuthenticatedNavbarNavigationScreen(
53+
navigateToNotificationScreen: () -> Unit,
5354
modifier: Modifier = Modifier,
5455
navController: NavHostController = rememberMifosNavController(
5556
name = "AuthenticatedNavbarScreen",
@@ -98,12 +99,14 @@ internal fun AuthenticatedNavbarNavigationScreen(
9899
onAction = remember(viewModel) {
99100
{ viewModel.trySendAction(it) }
100101
},
102+
navigateToNotificationScreen = navigateToNotificationScreen,
101103
)
102104
}
103105

104106
@Composable
105107
internal fun AuthenticatedNavbarNavigationScreenContent(
106108
navController: NavHostController,
109+
navigateToNotificationScreen: () -> Unit,
107110
modifier: Modifier = Modifier,
108111
snackbarHostState: SnackbarHostState = remember { SnackbarHostState() },
109112
onAction: (AuthenticatedNavBarAction) -> Unit,
@@ -156,9 +159,8 @@ internal fun AuthenticatedNavbarNavigationScreenContent(
156159
// TODO Add top level destination screens
157160

158161
homeDestination(
159-
onNavigate = {},
160-
callHelpline = {},
161-
mailHelpline = {},
162+
navigateToDestinationScreen = { },
163+
navigateToNotificationScreen = navigateToNotificationScreen,
162164
)
163165

164166
userprofileNavGraph(navController, {})

core/data/src/commonMain/kotlin/org/mifos/mobile/core/data/repositoryImpl/HomeRepositoryImp.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,9 @@ class HomeRepositoryImp(
2828
private val ioDispatcher: CoroutineDispatcher,
2929
) : HomeRepository {
3030

31-
override fun clientAccounts(clientId: Long): Flow<DataState<ClientAccounts>> {
32-
return dataManager.clientsApi.getClientAccounts(clientId)
31+
override fun clientAccounts(clientId: Long): Flow<DataState<ClientAccounts>> =
32+
dataManager.clientsApi.getClientAccounts(clientId)
3333
.asDataStateFlow().flowOn(ioDispatcher)
34-
}
3534

3635
override fun currentClient(clientId: Long): Flow<DataState<Client>> {
3736
return dataManager.clientsApi.getClientForId(clientId)

core/designsystem/src/commonMain/kotlin/org/mifos/mobile/core/designsystem/component/MifosTopBar.kt

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import androidx.compose.material3.Text
2424
import androidx.compose.material3.TopAppBar
2525
import androidx.compose.material3.TopAppBarDefaults
2626
import androidx.compose.runtime.Composable
27+
import androidx.compose.ui.Alignment
2728
import androidx.compose.ui.Modifier
2829
import androidx.compose.ui.draw.clip
2930
import androidx.compose.ui.draw.shadow
@@ -117,11 +118,13 @@ fun MifosRoundedTopAppBar(
117118
) {
118119
TopAppBar(
119120
title = {
120-
Text(
121-
text = title,
122-
style = MifosTypography.titleMedium,
123-
color = MaterialTheme.colorScheme.onBackground,
124-
)
121+
if (brandIcon == null) {
122+
Text(
123+
text = title,
124+
style = MifosTypography.titleMedium,
125+
color = MaterialTheme.colorScheme.onBackground,
126+
)
127+
}
125128
},
126129
actions = actions,
127130
navigationIcon = {
@@ -133,7 +136,8 @@ fun MifosRoundedTopAppBar(
133136
painter = painterResource(brandIcon),
134137
contentDescription = "Brand Icon",
135138
modifier = Modifier
136-
.size(344.dp, 40.dp),
139+
.size(96.dp, 28.dp)
140+
.align(Alignment.TopStart),
137141
)
138142
}
139143
} else {

core/designsystem/src/commonMain/kotlin/org/mifos/mobile/core/designsystem/icon/MifosIcons.kt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,21 @@ import androidx.compose.material.icons.rounded.Home
5454
import androidx.compose.material.icons.rounded.SwapHoriz
5555
import androidx.compose.ui.graphics.vector.ImageVector
5656
import fluent.ui.system.icons.FluentIcons
57+
import fluent.ui.system.icons.filled.ChatBubblesQuestion
58+
import fluent.ui.system.icons.filled.ChatHistory
59+
import fluent.ui.system.icons.filled.CoinMultiple
60+
import fluent.ui.system.icons.filled.ContactCardRibbon
61+
import fluent.ui.system.icons.filled.DataWhisker
5762
import fluent.ui.system.icons.filled.Document
5863
import fluent.ui.system.icons.filled.ErrorCircle
5964
import fluent.ui.system.icons.filled.Eye
65+
import fluent.ui.system.icons.filled.Feed
6066
import fluent.ui.system.icons.filled.Grid
6167
import fluent.ui.system.icons.filled.MoneyHand
6268
import fluent.ui.system.icons.filled.Person
69+
import fluent.ui.system.icons.filled.Receipt
70+
import fluent.ui.system.icons.filled.Wallet
71+
import fluent.ui.system.icons.regular.Alert
6372
import fluent.ui.system.icons.regular.Calendar
6473
import fluent.ui.system.icons.regular.CardUi
6574
import fluent.ui.system.icons.regular.CheckmarkCircle
@@ -68,6 +77,7 @@ import fluent.ui.system.icons.regular.Eye
6877
import fluent.ui.system.icons.regular.EyeOff
6978
import fluent.ui.system.icons.regular.Image
7079
import fluent.ui.system.icons.regular.Info
80+
import fluent.ui.system.icons.regular.Search
7181

7282
object MifosIcons {
7383
val Paid: ImageVector = Icons.Default.Paid
@@ -133,4 +143,16 @@ object MifosIcons {
133143
val PersonTabFilled = FluentIcons.Filled.Person
134144

135145
val Chevron = FluentIcons.Regular.ChevronLeft
146+
147+
val Alert = FluentIcons.Regular.Alert
148+
val SearchNew = FluentIcons.Regular.Search
149+
150+
val SavingsAccount = FluentIcons.Filled.Wallet
151+
val LoanAccount = FluentIcons.Filled.CoinMultiple
152+
val ShareAccount = FluentIcons.Filled.DataWhisker
153+
val ApplyForLoan = FluentIcons.Filled.Receipt
154+
val TransactionHistory = FluentIcons.Filled.ChatHistory
155+
val Charges = FluentIcons.Filled.Feed
156+
val Beneficiary = FluentIcons.Filled.ContactCardRibbon
157+
val Faq = FluentIcons.Filled.ChatBubblesQuestion
136158
}

core/designsystem/src/commonMain/kotlin/org/mifos/mobile/core/designsystem/theme/Type.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,14 @@ object MifosTypography {
251251
fontWeight = FontWeight(500),
252252
)
253253

254+
val titleMediumEmphasized: TextStyle
255+
@Composable get() = TextStyle(
256+
fontSize = 16.sp,
257+
lineHeight = 24.sp,
258+
fontFamily = fontFamily(),
259+
fontWeight = FontWeight(600),
260+
)
261+
254262
val titleSmall: TextStyle
255263
@Composable get() = TextStyle(
256264
fontSize = 14.sp,
@@ -334,6 +342,15 @@ object MifosTypography {
334342
fontWeight = FontWeight(400),
335343
)
336344

345+
val bodySmallEmphasized: TextStyle
346+
@Composable get() = TextStyle(
347+
fontSize = 12.sp,
348+
lineHeight = 16.sp,
349+
fontFamily = fontFamily(),
350+
letterSpacing = 0.4.sp,
351+
fontWeight = FontWeight(500),
352+
)
353+
337354
// verified
338355
val tag: TextStyle
339356
@Composable get() = TextStyle(

core/network/src/androidMain/kotlin/org/mifos/mobile/core/network/KtorHttpClient.android.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import co.touchlab.kermit.Logger.Companion as KermitLogger
2323

2424
actual val ktorHttpClient: HttpClient
2525
get() = HttpClient(OkHttp) {
26+
expectSuccess = true
2627
install(HttpTimeout) {
2728
socketTimeoutMillis = 60_000
2829
requestTimeoutMillis = 60_000
7 KB
Loading

0 commit comments

Comments
 (0)