From 3d8e0ce76760fb28d7f48be0faf5fa301b721be2 Mon Sep 17 00:00:00 2001 From: Aditya3815 Date: Wed, 21 May 2025 13:51:45 +0530 Subject: [PATCH 1/7] Feature:auth to CMP --- .../main/kotlin/CMPFeatureConventionPlugin.kt | 2 +- feature/auth/build.gradle.kts | 25 +++++--- .../{main => androidMain}/AndroidManifest.xml | 0 .../drawable/feature_auth_mifos_logo.jpg | Bin .../composeResources}/values/strings.xml | 0 .../com/mifos/feature/auth/di/AuthModule.kt | 0 .../mifos/feature/auth/login/LoginScreen.kt | 59 ++++++++++-------- .../mifos/feature/auth/login/LoginUiState.kt | 6 +- .../feature/auth/login/LoginViewModel.kt | 32 +++++----- .../feature/auth/navigation/AuthNavigation.kt | 0 .../feature/auth/navigation/AuthScreens.kt | 0 11 files changed, 75 insertions(+), 49 deletions(-) rename feature/auth/src/{main => androidMain}/AndroidManifest.xml (100%) rename feature/auth/src/{main/res => commonMain/composeResources}/drawable/feature_auth_mifos_logo.jpg (100%) rename feature/auth/src/{main/res => commonMain/composeResources}/values/strings.xml (100%) rename feature/auth/src/{main/java => commonMain/kotlin}/com/mifos/feature/auth/di/AuthModule.kt (100%) rename feature/auth/src/{main/java => commonMain/kotlin}/com/mifos/feature/auth/login/LoginScreen.kt (81%) rename feature/auth/src/{main/java => commonMain/kotlin}/com/mifos/feature/auth/login/LoginUiState.kt (72%) rename feature/auth/src/{main/java => commonMain/kotlin}/com/mifos/feature/auth/login/LoginViewModel.kt (79%) rename feature/auth/src/{main/java => commonMain/kotlin}/com/mifos/feature/auth/navigation/AuthNavigation.kt (100%) rename feature/auth/src/{main/java => commonMain/kotlin}/com/mifos/feature/auth/navigation/AuthScreens.kt (100%) diff --git a/build-logic/convention/src/main/kotlin/CMPFeatureConventionPlugin.kt b/build-logic/convention/src/main/kotlin/CMPFeatureConventionPlugin.kt index f5f1eb5c959..5189b44df02 100644 --- a/build-logic/convention/src/main/kotlin/CMPFeatureConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/CMPFeatureConventionPlugin.kt @@ -17,7 +17,7 @@ class CMPFeatureConventionPlugin : Plugin { dependencies { add("commonMainImplementation", project(":core:ui")) add("commonMainImplementation", project(":core:designsystem")) - add("commonMainImplementation", project(":core:testing")) +// add("commonMainImplementation", project(":core:testing")) add("commonMainImplementation", project(":core:data")) add("commonMainImplementation", libs.findLibrary("koin.compose").get()) diff --git a/feature/auth/build.gradle.kts b/feature/auth/build.gradle.kts index f56aec2f6a7..6acd5f5c53a 100644 --- a/feature/auth/build.gradle.kts +++ b/feature/auth/build.gradle.kts @@ -8,18 +8,29 @@ * See https://github.com/openMF/android-client/blob/master/LICENSE.md */ plugins { - alias(libs.plugins.mifos.android.feature) - alias(libs.plugins.mifos.android.library.compose) - alias(libs.plugins.mifos.android.library.jacoco) + alias(libs.plugins.mifos.cmp.feature) } android { namespace = "com.mifos.feature.auth" } -dependencies { - implementation(projects.core.data) - implementation(projects.core.domain) +kotlin { + sourceSets { + commonMain.dependencies { + implementation(compose.material3) + implementation(compose.components.resources) + implementation(compose.ui) + implementation(libs.kermit.simple) + implementation(libs.kermit.logging) + api(projects.core.data) + api(projects.core.domain) + } + } +} - testImplementation(libs.hilt.android.testing) +dependencies { +// implementation(projects.core.data) +// implementation(projects.core.domain) +// testImplementation(libs.hilt.android.testing) } diff --git a/feature/auth/src/main/AndroidManifest.xml b/feature/auth/src/androidMain/AndroidManifest.xml similarity index 100% rename from feature/auth/src/main/AndroidManifest.xml rename to feature/auth/src/androidMain/AndroidManifest.xml diff --git a/feature/auth/src/main/res/drawable/feature_auth_mifos_logo.jpg b/feature/auth/src/commonMain/composeResources/drawable/feature_auth_mifos_logo.jpg similarity index 100% rename from feature/auth/src/main/res/drawable/feature_auth_mifos_logo.jpg rename to feature/auth/src/commonMain/composeResources/drawable/feature_auth_mifos_logo.jpg diff --git a/feature/auth/src/main/res/values/strings.xml b/feature/auth/src/commonMain/composeResources/values/strings.xml similarity index 100% rename from feature/auth/src/main/res/values/strings.xml rename to feature/auth/src/commonMain/composeResources/values/strings.xml diff --git a/feature/auth/src/main/java/com/mifos/feature/auth/di/AuthModule.kt b/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/di/AuthModule.kt similarity index 100% rename from feature/auth/src/main/java/com/mifos/feature/auth/di/AuthModule.kt rename to feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/di/AuthModule.kt diff --git a/feature/auth/src/main/java/com/mifos/feature/auth/login/LoginScreen.kt b/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginScreen.kt similarity index 81% rename from feature/auth/src/main/java/com/mifos/feature/auth/login/LoginScreen.kt rename to feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginScreen.kt index 0559b6a9380..05dbd0e7693 100644 --- a/feature/auth/src/main/java/com/mifos/feature/auth/login/LoginScreen.kt +++ b/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginScreen.kt @@ -9,6 +9,11 @@ */ package com.mifos.feature.auth.login +import androidclient.feature.auth.generated.resources.Res +import androidclient.feature.auth.generated.resources.feature_auth_enter_credentials +import androidclient.feature.auth.generated.resources.feature_auth_mifos_logo +import androidclient.feature.auth.generated.resources.feature_auth_password +import androidclient.feature.auth.generated.resources.feature_auth_username import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues @@ -23,11 +28,8 @@ import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.ArrowForward -import androidx.compose.material.icons.filled.Error import androidx.compose.material.icons.filled.Lock import androidx.compose.material.icons.filled.Person -import androidx.compose.material.icons.filled.Visibility -import androidx.compose.material.icons.filled.VisibilityOff import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.CircularProgressIndicator @@ -46,16 +48,13 @@ import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color.Companion.DarkGray import androidx.compose.ui.graphics.Color.Companion.White -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontWeight @@ -63,15 +62,21 @@ import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.DialogProperties import com.mifos.core.designsystem.component.MifosAndroidClientIcon import com.mifos.core.designsystem.component.MifosOutlinedTextField -import com.mifos.feature.auth.R -import org.koin.androidx.compose.koinViewModel +import com.mifos.core.designsystem.icon.MifosIcons +import com.mifos.core.ui.util.DevicePreview +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.launch +import org.jetbrains.compose.resources.StringResource +import org.jetbrains.compose.resources.getString +import org.jetbrains.compose.resources.painterResource +import org.jetbrains.compose.resources.stringResource +import org.koin.compose.viewmodel.koinViewModel /** * Created by Aditya Gupta on 11/02/24. @@ -86,7 +91,7 @@ internal fun LoginScreen( loginViewModel: LoginViewModel = koinViewModel(), ) { val state = loginViewModel.loginUiState.collectAsState().value - val context = LocalContext.current + val coroutineScope = rememberCoroutineScope() val snackbarHostState = remember { SnackbarHostState() } @@ -104,8 +109,8 @@ internal fun LoginScreen( } var passwordVisibility: Boolean by remember { mutableStateOf(false) } - val usernameError: MutableState = remember { mutableStateOf(null) } - val passwordError: MutableState = remember { mutableStateOf(null) } + val usernameError: MutableState = remember { mutableStateOf(null) } + val passwordError: MutableState = remember { mutableStateOf(null) } when (state) { is LoginUiState.Empty -> {} @@ -113,7 +118,7 @@ internal fun LoginScreen( is LoginUiState.ShowError -> { showDialog.value = false LaunchedEffect(key1 = state.message) { - snackbarHostState.showSnackbar(message = context.getString(state.message)) + snackbarHostState.showSnackbar(message = getString(state.message)) } } @@ -141,7 +146,7 @@ internal fun LoginScreen( modifier = modifier .fillMaxSize() .padding(16.dp), - containerColor = Color.White, + containerColor = White, snackbarHost = { SnackbarHost(snackbarHostState) }, bottomBar = { Box( @@ -179,13 +184,13 @@ internal fun LoginScreen( ) { Spacer(modifier = Modifier.height(80.dp)) - MifosAndroidClientIcon(imageVector = painterResource(R.drawable.feature_auth_mifos_logo)) + MifosAndroidClientIcon(imageVector = painterResource(Res.drawable.feature_auth_mifos_logo)) Text( modifier = Modifier .fillMaxWidth() .padding(top = 8.dp), - text = stringResource(id = R.string.feature_auth_enter_credentials), + text = stringResource(Res.string.feature_auth_enter_credentials), textAlign = TextAlign.Center, style = TextStyle( fontSize = 16.sp, @@ -203,11 +208,11 @@ internal fun LoginScreen( userName = value }, icon = Icons.Filled.Person, - label = stringResource(R.string.feature_auth_username), + label = stringResource(Res.string.feature_auth_username), error = usernameError.value?.let { it1 -> stringResource(it1) }, trailingIcon = { if (usernameError.value != null) { - Icon(imageVector = Icons.Filled.Error, contentDescription = null) + Icon(imageVector = MifosIcons.Error, contentDescription = null) } }, ) @@ -221,20 +226,20 @@ internal fun LoginScreen( }, visualTransformation = if (passwordVisibility) VisualTransformation.None else PasswordVisualTransformation(), icon = Icons.Filled.Lock, - label = stringResource(R.string.feature_auth_password), + label = stringResource(Res.string.feature_auth_password), error = passwordError.value?.let { it1 -> stringResource(it1) }, trailingIcon = { if (passwordError.value == null) { val image = if (passwordVisibility) { - Icons.Filled.Visibility + MifosIcons.Visibility } else { - Icons.Filled.VisibilityOff + MifosIcons.VisibilityOff } IconButton(onClick = { passwordVisibility = !passwordVisibility }) { Icon(imageVector = image, null) } } else { - Icon(imageVector = Icons.Filled.Error, contentDescription = null) + Icon(MifosIcons.Error, contentDescription = null) } }, ) @@ -242,7 +247,11 @@ internal fun LoginScreen( Spacer(modifier = Modifier.height(8.dp)) Button( - onClick = { loginViewModel.validateUserInputs(userName.text, password.text) }, + onClick = { + coroutineScope.launch { + loginViewModel.validateUserInputs(userName.text, password.text) + } + }, modifier = Modifier .fillMaxWidth() .heightIn(44.dp) @@ -266,7 +275,7 @@ internal fun LoginScreen( } } -@Preview(showSystemUi = true, device = "id:pixel_7") +@DevicePreview() @Composable private fun LoginScreenPreview() { LoginScreen({}, {}, {}) diff --git a/feature/auth/src/main/java/com/mifos/feature/auth/login/LoginUiState.kt b/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginUiState.kt similarity index 72% rename from feature/auth/src/main/java/com/mifos/feature/auth/login/LoginUiState.kt rename to feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginUiState.kt index 7cf388cdd0a..4ecd3599029 100644 --- a/feature/auth/src/main/java/com/mifos/feature/auth/login/LoginUiState.kt +++ b/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginUiState.kt @@ -9,6 +9,8 @@ */ package com.mifos.feature.auth.login +import org.jetbrains.compose.resources.StringResource + /** * Created by Aditya Gupta on 06/08/23. */ @@ -19,9 +21,9 @@ sealed class LoginUiState { data object ShowProgress : LoginUiState() - data class ShowError(val message: Int) : LoginUiState() + data class ShowError(val message: StringResource) : LoginUiState() - data class ShowValidationError(val usernameError: Int? = null, val passwordError: Int? = null) : + data class ShowValidationError(val usernameError: StringResource? = null, val passwordError: StringResource? = null) : LoginUiState() data object HomeActivityIntent : LoginUiState() diff --git a/feature/auth/src/main/java/com/mifos/feature/auth/login/LoginViewModel.kt b/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginViewModel.kt similarity index 79% rename from feature/auth/src/main/java/com/mifos/feature/auth/login/LoginViewModel.kt rename to feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginViewModel.kt index 71043e2414b..ee698020011 100644 --- a/feature/auth/src/main/java/com/mifos/feature/auth/login/LoginViewModel.kt +++ b/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginViewModel.kt @@ -9,17 +9,22 @@ */ package com.mifos.feature.auth.login -import android.util.Log +import androidclient.feature.auth.generated.resources.Res +import androidclient.feature.auth.generated.resources.feature_auth_error_login_failed +import androidclient.feature.auth.generated.resources.feature_auth_error_password_length +import androidclient.feature.auth.generated.resources.feature_auth_error_username_length import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.mifos.core.common.utils.Resource +import co.touchlab.kermit.Logger +import com.mifos.core.common.utils.DataState import com.mifos.core.datastore.UserPreferencesRepository import com.mifos.core.domain.useCases.LoginUseCase import com.mifos.core.domain.useCases.PasswordValidationUseCase import com.mifos.core.domain.useCases.UsernameValidationUseCase import com.mifos.core.model.objects.users.User -import com.mifos.feature.auth.R +import com.mifos.core.network.model.PostAuthenticationResponse import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.IO import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow @@ -27,7 +32,6 @@ import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch -import org.openapitools.client.models.PostAuthenticationResponse /** * Created by Aditya Gupta on 06/08/23. @@ -52,7 +56,7 @@ class LoginViewModel( initialValue = null, ) - fun validateUserInputs(username: String, password: String) { + suspend fun validateUserInputs(username: String, password: String) { val usernameValidationResult = usernameValidationUseCase(username) val passwordValidationResult = passwordValidationUseCase(password) @@ -61,8 +65,8 @@ class LoginViewModel( if (hasError) { _loginUiState.value = LoginUiState.ShowValidationError( - usernameValidationResult.message, - passwordValidationResult.message, + Res.string.feature_auth_error_username_length, + Res.string.feature_auth_error_password_length, ) return } @@ -72,7 +76,7 @@ class LoginViewModel( } private fun setupPrefManger(username: String, password: String) { - Log.d("sdfdf", username + password) + Logger.d("sdfdf", Throwable(username + password)) // if (Network.isOnline(context)) { login(username, password) // } else { @@ -85,18 +89,18 @@ class LoginViewModel( viewModelScope.launch(Dispatchers.IO) { loginUseCase(username, password).collect { result -> when (result) { - is Resource.Error -> { + is DataState.Error -> { _loginUiState.value = - LoginUiState.ShowError(R.string.feature_auth_error_login_failed) - Log.e("@@@", "login: ${result.message}") + LoginUiState.ShowError(Res.string.feature_auth_error_login_failed) + Logger.d("@@@", Throwable("login: ${result.data}")) } - is Resource.Loading -> { + is DataState.Loading -> { _loginUiState.value = LoginUiState.ShowProgress } - is Resource.Success -> { - result.data?.let { + is DataState.Success -> { + result.data.let { if (it.userId != null && it.authenticated == true) { onLoginSuccessful(it, username, password) } diff --git a/feature/auth/src/main/java/com/mifos/feature/auth/navigation/AuthNavigation.kt b/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/navigation/AuthNavigation.kt similarity index 100% rename from feature/auth/src/main/java/com/mifos/feature/auth/navigation/AuthNavigation.kt rename to feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/navigation/AuthNavigation.kt diff --git a/feature/auth/src/main/java/com/mifos/feature/auth/navigation/AuthScreens.kt b/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/navigation/AuthScreens.kt similarity index 100% rename from feature/auth/src/main/java/com/mifos/feature/auth/navigation/AuthScreens.kt rename to feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/navigation/AuthScreens.kt From 9e94763bba54fad3d1ca036dc4b6a57301007a72 Mon Sep 17 00:00:00 2001 From: Aditya3815 Date: Wed, 21 May 2025 15:18:10 +0530 Subject: [PATCH 2/7] Feature:auth to CMP Request Changed --- .../core/designsystem/icon/MifosIcons.kt | 4 +++ feature/auth/build.gradle.kts | 5 --- .../mifos/feature/auth/login/LoginScreen.kt | 25 ++++--------- .../feature/auth/login/LoginViewModel.kt | 35 +++++++++++++++---- 4 files changed, 38 insertions(+), 31 deletions(-) diff --git a/core/designsystem/src/commonMain/kotlin/com/mifos/core/designsystem/icon/MifosIcons.kt b/core/designsystem/src/commonMain/kotlin/com/mifos/core/designsystem/icon/MifosIcons.kt index afe63582753..82001e6a086 100644 --- a/core/designsystem/src/commonMain/kotlin/com/mifos/core/designsystem/icon/MifosIcons.kt +++ b/core/designsystem/src/commonMain/kotlin/com/mifos/core/designsystem/icon/MifosIcons.kt @@ -11,6 +11,7 @@ package com.mifos.core.designsystem.icon import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.ArrowBack +import androidx.compose.material.icons.automirrored.filled.ArrowForward import androidx.compose.material.icons.automirrored.filled.Assignment import androidx.compose.material.icons.automirrored.filled.CompareArrows import androidx.compose.material.icons.automirrored.filled.Help @@ -35,6 +36,7 @@ import androidx.compose.material.icons.filled.FlashOn import androidx.compose.material.icons.filled.Image import androidx.compose.material.icons.filled.Info import androidx.compose.material.icons.filled.LocationOn +import androidx.compose.material.icons.filled.Lock import androidx.compose.material.icons.filled.Menu import androidx.compose.material.icons.filled.MoreVert import androidx.compose.material.icons.filled.Notifications @@ -100,6 +102,7 @@ object MifosIcons { val ArrowUp = Icons.Rounded.KeyboardArrowUp val ArrowDown = Icons.Rounded.KeyboardArrowDown val MoreVert = Icons.Rounded.MoreVert + val ArrowForward = Icons.AutoMirrored.Filled.ArrowForward val FileTask = Icons.Default.AssignmentTurnedIn val AddLocation = Icons.Rounded.AddLocation val CloudDownload = Icons.Default.CloudDownload @@ -123,6 +126,7 @@ object MifosIcons { val Profile = Icons.Outlined.AccountCircle val ProfileBoarder = Icons.Rounded.AccountCircle val buildingIcon = Icons.Filled.Apartment + val Lock: ImageVector = Icons.Filled.Lock val Paid: ImageVector = Icons.Default.Paid val Logout: ImageVector = Icons.AutoMirrored.Filled.Logout diff --git a/feature/auth/build.gradle.kts b/feature/auth/build.gradle.kts index 6acd5f5c53a..6e6060142cc 100644 --- a/feature/auth/build.gradle.kts +++ b/feature/auth/build.gradle.kts @@ -29,8 +29,3 @@ kotlin { } } -dependencies { -// implementation(projects.core.data) -// implementation(projects.core.domain) -// testImplementation(libs.hilt.android.testing) -} diff --git a/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginScreen.kt b/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginScreen.kt index 05dbd0e7693..e788b6b0388 100644 --- a/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginScreen.kt +++ b/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginScreen.kt @@ -26,10 +26,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll -import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.ArrowForward -import androidx.compose.material.icons.filled.Lock -import androidx.compose.material.icons.filled.Person import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.CircularProgressIndicator @@ -53,11 +50,7 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color.Companion.DarkGray import androidx.compose.ui.graphics.Color.Companion.White -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.font.FontStyle -import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.input.VisualTransformation @@ -70,7 +63,6 @@ import com.mifos.core.designsystem.component.MifosAndroidClientIcon import com.mifos.core.designsystem.component.MifosOutlinedTextField import com.mifos.core.designsystem.icon.MifosIcons import com.mifos.core.ui.util.DevicePreview -import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.launch import org.jetbrains.compose.resources.StringResource import org.jetbrains.compose.resources.getString @@ -167,7 +159,7 @@ internal fun LoginScreen( Spacer(modifier = Modifier.width(4.dp)) Icon( - imageVector = Icons.AutoMirrored.Filled.ArrowForward, + imageVector = MifosIcons.ArrowForward, contentDescription = "ArrowForward", ) } @@ -192,12 +184,7 @@ internal fun LoginScreen( .padding(top = 8.dp), text = stringResource(Res.string.feature_auth_enter_credentials), textAlign = TextAlign.Center, - style = TextStyle( - fontSize = 16.sp, - fontWeight = FontWeight.Bold, - fontStyle = FontStyle.Normal, - color = DarkGray, - ), + style = MaterialTheme.typography.bodyMedium, ) Spacer(modifier = Modifier.height(16.dp)) @@ -207,12 +194,12 @@ internal fun LoginScreen( onValueChanged = { value -> userName = value }, - icon = Icons.Filled.Person, + icon = MifosIcons.Person, label = stringResource(Res.string.feature_auth_username), error = usernameError.value?.let { it1 -> stringResource(it1) }, trailingIcon = { if (usernameError.value != null) { - Icon(imageVector = MifosIcons.Error, contentDescription = null) + Icon(imageVector = MifosIcons.Error, contentDescription = "Error Icon") } }, ) @@ -225,7 +212,7 @@ internal fun LoginScreen( password = value }, visualTransformation = if (passwordVisibility) VisualTransformation.None else PasswordVisualTransformation(), - icon = Icons.Filled.Lock, + icon = MifosIcons.Lock, label = stringResource(Res.string.feature_auth_password), error = passwordError.value?.let { it1 -> stringResource(it1) }, trailingIcon = { @@ -236,7 +223,7 @@ internal fun LoginScreen( MifosIcons.VisibilityOff } IconButton(onClick = { passwordVisibility = !passwordVisibility }) { - Icon(imageVector = image, null) + Icon(imageVector = image, "PasswordVisibility Icon") } } else { Icon(MifosIcons.Error, contentDescription = null) diff --git a/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginViewModel.kt b/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginViewModel.kt index ee698020011..d32b1f51281 100644 --- a/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginViewModel.kt +++ b/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginViewModel.kt @@ -76,13 +76,34 @@ class LoginViewModel( } private fun setupPrefManger(username: String, password: String) { - Logger.d("sdfdf", Throwable(username + password)) -// if (Network.isOnline(context)) { - login(username, password) -// } else { -// _loginUiState.value = -// LoginUiState.ShowError(R.string.feature_auth_error_not_connected_internet) -// } + viewModelScope.launch { + _loginUiState.value = LoginUiState.ShowProgress + + loginUseCase(username, password).collect { result -> + when (result) { + is DataState.Error -> { + _loginUiState.value = + LoginUiState.ShowError(Res.string.feature_auth_error_login_failed) + Logger.e("Login Error", result.exception) + } + + is DataState.Loading -> { + _loginUiState.value = LoginUiState.ShowProgress + } + + is DataState.Success -> { + result.data.let { user -> + if (user.userId != null && user.authenticated == true) { + onLoginSuccessful(user, username, password) + } else { + _loginUiState.value = + LoginUiState.ShowError(Res.string.feature_auth_error_login_failed) + } + } + } + } + } + } } fun login(username: String, password: String) { From 9753da9f00e1cb6c0ea6439fbc92c19f59d5321d Mon Sep 17 00:00:00 2001 From: itsPronay Date: Sun, 25 May 2025 15:28:56 +0600 Subject: [PATCH 3/7] fixed auth issue + koin issue in network --- cmp-navigation/build.gradle.kts | 2 +- .../kotlin/cmp/navigation/ComposeApp.kt | 2 + .../kotlin/cmp/navigation/di/KoinModules.kt | 3 +- .../cmp/navigation/navigation/RootNavGraph.kt | 12 ++++- .../com/mifos/room/di/DatabaseModule.apple.kt | 4 +- .../datastore/UserPreferencesDataSource.kt | 1 + .../mifos/core/network/di/DataMangerModule.kt | 3 +- .../mifos/core/network/di/NetworkModule.kt | 14 +++--- feature/auth/build.gradle.kts | 6 +-- .../feature/auth/login/LoginViewModel.kt | 44 +++++++------------ settings.gradle.kts | 2 +- 11 files changed, 49 insertions(+), 44 deletions(-) diff --git a/cmp-navigation/build.gradle.kts b/cmp-navigation/build.gradle.kts index b8730d7ea03..3ede6f318f6 100644 --- a/cmp-navigation/build.gradle.kts +++ b/cmp-navigation/build.gradle.kts @@ -29,7 +29,7 @@ kotlin { // implementation(projects.feature.about) // implementation(projects.feature.activate) -// implementation(projects.feature.auth) + implementation(projects.feature.auth) // implementation(projects.feature.center) // implementation(projects.feature.checkerInboxTask) // implementation(projects.feature.client) diff --git a/cmp-navigation/src/commonMain/kotlin/cmp/navigation/ComposeApp.kt b/cmp-navigation/src/commonMain/kotlin/cmp/navigation/ComposeApp.kt index 73a602dd293..ec6201d6a2e 100644 --- a/cmp-navigation/src/commonMain/kotlin/cmp/navigation/ComposeApp.kt +++ b/cmp-navigation/src/commonMain/kotlin/cmp/navigation/ComposeApp.kt @@ -12,6 +12,8 @@ package cmp.navigation import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.navigation.compose.rememberNavController +import cmp.navigation.navigation.NavGraphRoute.AUTH_GRAPH +import cmp.navigation.navigation.NavGraphRoute.PASSCODE_GRAPH import cmp.navigation.navigation.RootNavGraph import com.mifos.core.data.util.NetworkMonitor import com.mifos.core.designsystem.theme.MifosTheme diff --git a/cmp-navigation/src/commonMain/kotlin/cmp/navigation/di/KoinModules.kt b/cmp-navigation/src/commonMain/kotlin/cmp/navigation/di/KoinModules.kt index 65d83cbecd2..15b17ee6a32 100644 --- a/cmp-navigation/src/commonMain/kotlin/cmp/navigation/di/KoinModules.kt +++ b/cmp-navigation/src/commonMain/kotlin/cmp/navigation/di/KoinModules.kt @@ -15,6 +15,7 @@ import com.mifos.core.datastore.di.PreferencesModule import com.mifos.core.domain.di.UseCaseModule import com.mifos.core.network.di.DataManagerModule import com.mifos.core.network.di.NetworkModule +import com.mifos.feature.auth.di.AuthModule import com.mifos.room.di.DaoModule import com.mifos.room.di.HelperModule import com.mifos.room.di.PlatformSpecificDatabaseModule @@ -45,7 +46,7 @@ object KoinModules { includes( // AboutModule, // ActivateModule, -// AuthModule, + AuthModule, // CenterModule, // CheckerInboxTaskModule, // ClientModule, diff --git a/cmp-navigation/src/commonMain/kotlin/cmp/navigation/navigation/RootNavGraph.kt b/cmp-navigation/src/commonMain/kotlin/cmp/navigation/navigation/RootNavGraph.kt index 4e306be9c47..8495decefcb 100644 --- a/cmp-navigation/src/commonMain/kotlin/cmp/navigation/navigation/RootNavGraph.kt +++ b/cmp-navigation/src/commonMain/kotlin/cmp/navigation/navigation/RootNavGraph.kt @@ -11,12 +11,15 @@ package cmp.navigation.navigation import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.navigation.NavController import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import cmp.navigation.App import cmp.navigation.navigation.NavGraphRoute.MAIN_GRAPH import com.mifos.core.data.util.NetworkMonitor +import com.mifos.feature.auth.navigation.AuthScreens +import com.mifos.feature.auth.navigation.authNavGraph @Composable fun RootNavGraph( @@ -26,10 +29,16 @@ fun RootNavGraph( ) { NavHost( navController = navHostController, - startDestination = MAIN_GRAPH, + startDestination = AuthScreens.LoginScreenRoute.route, route = NavGraphRoute.ROOT_GRAPH, modifier = modifier, ) { + authNavGraph( + navigateHome = { navHostController.navigate(NavGraphRoute::MAIN_GRAPH) }, + navigatePasscode = {}, + updateServerConfig = {} + ) + composable(MAIN_GRAPH) { App( modifier = modifier, @@ -39,3 +48,4 @@ fun RootNavGraph( } } } + diff --git a/core/database/src/appleMain/kotlin/com/mifos/room/di/DatabaseModule.apple.kt b/core/database/src/appleMain/kotlin/com/mifos/room/di/DatabaseModule.apple.kt index 1cb209e17cc..6c45ea9e880 100644 --- a/core/database/src/appleMain/kotlin/com/mifos/room/di/DatabaseModule.apple.kt +++ b/core/database/src/appleMain/kotlin/com/mifos/room/di/DatabaseModule.apple.kt @@ -9,5 +9,7 @@ */ package com.mifos.room.di -actual val PlatformSpecificDatabaseModule: org.koin.core.annotation.Module +import org.koin.core.module.Module + +actual val PlatformSpecificDatabaseModule: Module get() = TODO("Not yet implemented") diff --git a/core/datastore/src/commonMain/kotlin/com/mifos/core/datastore/UserPreferencesDataSource.kt b/core/datastore/src/commonMain/kotlin/com/mifos/core/datastore/UserPreferencesDataSource.kt index 7793b8f4700..7074011bf6b 100644 --- a/core/datastore/src/commonMain/kotlin/com/mifos/core/datastore/UserPreferencesDataSource.kt +++ b/core/datastore/src/commonMain/kotlin/com/mifos/core/datastore/UserPreferencesDataSource.kt @@ -10,6 +10,7 @@ package com.mifos.core.datastore import com.mifos.core.common.utils.ServerConfig +import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.datastore.model.AppSettings import com.mifos.core.datastore.model.AppTheme import com.mifos.core.datastore.model.UserData diff --git a/core/network/src/commonMain/kotlin/com/mifos/core/network/di/DataMangerModule.kt b/core/network/src/commonMain/kotlin/com/mifos/core/network/di/DataMangerModule.kt index 95ce33b6f86..27819a6b2a4 100644 --- a/core/network/src/commonMain/kotlin/com/mifos/core/network/di/DataMangerModule.kt +++ b/core/network/src/commonMain/kotlin/com/mifos/core/network/di/DataMangerModule.kt @@ -9,6 +9,7 @@ */ package com.mifos.core.network.di +import com.mifos.core.network.BaseApiManager import com.mifos.core.network.DataManager import com.mifos.core.network.datamanager.DataManagerAuth import com.mifos.core.network.datamanager.DataManagerCenter @@ -31,7 +32,7 @@ import org.koin.dsl.module val DataManagerModule = module { single { DataManager() } - single { DataManagerAuth(get()) } + single { DataManagerAuth(get()) } single { DataManagerCenter(get(), get(), get(), get()) } single { DataManagerCharge(get(), get(), get()) } single { DataManagerCheckerInbox(get()) } diff --git a/core/network/src/commonMain/kotlin/com/mifos/core/network/di/NetworkModule.kt b/core/network/src/commonMain/kotlin/com/mifos/core/network/di/NetworkModule.kt index f46b4dfca63..5d60a672317 100644 --- a/core/network/src/commonMain/kotlin/com/mifos/core/network/di/NetworkModule.kt +++ b/core/network/src/commonMain/kotlin/com/mifos/core/network/di/NetworkModule.kt @@ -16,8 +16,14 @@ import com.mifos.core.datastore.UserPreferencesRepository import com.mifos.core.datastore.UserPreferencesRepositoryImpl import com.mifos.core.network.BaseApiManager import com.mifos.core.network.BaseUrl +import com.mifos.core.network.ConfigMifos +import com.mifos.core.network.KtorHttpClient import com.mifos.core.network.KtorfitClient +import com.mifos.core.network.MifosInterceptor import com.mifos.core.network.utils.ImageLoaderUtils +import de.jensklingenberg.ktorfit.Ktorfit +import io.ktor.client.HttpClient +import io.ktor.client.plugins.auth.Auth import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.first @@ -30,11 +36,7 @@ val NetworkModule = module { single { UserPreferencesRepositoryImpl( get(), - get( - named( - MifosDispatchers.IO.name, - ), - ), + get(named(MifosDispatchers.IO.name,),), get(named(MifosDispatchers.Unconfined)), ) } @@ -50,6 +52,8 @@ val NetworkModule = module { single { BaseApiManager(get(), get()) } + single { Ktorfit.Builder().build() } + single { val prefManager: UserPreferencesRepository = get() val baseManager = com.mifos.core.network.apimanager.BaseApiManager.getInstance() diff --git a/feature/auth/build.gradle.kts b/feature/auth/build.gradle.kts index 6e6060142cc..eb21a637344 100644 --- a/feature/auth/build.gradle.kts +++ b/feature/auth/build.gradle.kts @@ -21,10 +21,8 @@ kotlin { implementation(compose.material3) implementation(compose.components.resources) implementation(compose.ui) - implementation(libs.kermit.simple) - implementation(libs.kermit.logging) - api(projects.core.data) - api(projects.core.domain) + implementation(projects.core.data) + implementation(projects.core.domain) } } } diff --git a/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginViewModel.kt b/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginViewModel.kt index d32b1f51281..085999ff6f0 100644 --- a/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginViewModel.kt +++ b/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginViewModel.kt @@ -17,10 +17,12 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import co.touchlab.kermit.Logger import com.mifos.core.common.utils.DataState +import com.mifos.core.data.repository.NoteRepository import com.mifos.core.datastore.UserPreferencesRepository import com.mifos.core.domain.useCases.LoginUseCase import com.mifos.core.domain.useCases.PasswordValidationUseCase import com.mifos.core.domain.useCases.UsernameValidationUseCase +import com.mifos.core.model.objects.Note import com.mifos.core.model.objects.users.User import com.mifos.core.network.model.PostAuthenticationResponse import kotlinx.coroutines.Dispatchers @@ -39,10 +41,10 @@ import kotlinx.coroutines.launch class LoginViewModel( private val prefManager: UserPreferencesRepository, -// private val context: Context, private val usernameValidationUseCase: UsernameValidationUseCase, private val passwordValidationUseCase: PasswordValidationUseCase, private val loginUseCase: LoginUseCase, + private val noteRepository: NoteRepository ) : ViewModel() { private val _loginUiState = MutableStateFlow(LoginUiState.Empty) @@ -71,43 +73,27 @@ class LoginViewModel( return } viewModelScope.launch { - setupPrefManger(username, password) + login(username, password) } } - private fun setupPrefManger(username: String, password: String) { + fun testFunction(){ viewModelScope.launch { - _loginUiState.value = LoginUiState.ShowProgress - - loginUseCase(username, password).collect { result -> - when (result) { - is DataState.Error -> { - _loginUiState.value = - LoginUiState.ShowError(Res.string.feature_auth_error_login_failed) - Logger.e("Login Error", result.exception) - } - - is DataState.Loading -> { - _loginUiState.value = LoginUiState.ShowProgress - } - - is DataState.Success -> { - result.data.let { user -> - if (user.userId != null && user.authenticated == true) { - onLoginSuccessful(user, username, password) - } else { - _loginUiState.value = - LoginUiState.ShowError(Res.string.feature_auth_error_login_failed) - } - } - } + val ans : List + val t = noteRepository.getNotes("sdfe", 0).collect{ + when(it){ + is DataState.Error<*> -> Logger.e("@@@", it.message.toString() ) + DataState.Loading -> TODO() + is DataState.Success<*> -> TODO() } } + Logger.d("@@@", t. ) + } } - fun login(username: String, password: String) { - viewModelScope.launch(Dispatchers.IO) { + private fun login(username: String, password: String) { + viewModelScope.launch { loginUseCase(username, password).collect { result -> when (result) { is DataState.Error -> { diff --git a/settings.gradle.kts b/settings.gradle.kts index 7ac78cc7453..7614a1869a4 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -47,7 +47,7 @@ include(":core:ui") ////include(":feature:about") //include(":feature:activate") -//include(":feature:auth") +include(":feature:auth") //include(":feature:center") //include(":feature:checker-inbox-task") //include(":feature:client") From 4909800289dfcb0379b726b2e35a3349914f73f4 Mon Sep 17 00:00:00 2001 From: itsPronay Date: Sun, 25 May 2025 16:18:18 +0600 Subject: [PATCH 4/7] fix --- .../mifos/core/network/di/NetworkModule.kt | 24 +++++++++++++------ .../feature/auth/login/LoginViewModel.kt | 15 ------------ 2 files changed, 17 insertions(+), 22 deletions(-) diff --git a/core/network/src/commonMain/kotlin/com/mifos/core/network/di/NetworkModule.kt b/core/network/src/commonMain/kotlin/com/mifos/core/network/di/NetworkModule.kt index 5d60a672317..2692c179d22 100644 --- a/core/network/src/commonMain/kotlin/com/mifos/core/network/di/NetworkModule.kt +++ b/core/network/src/commonMain/kotlin/com/mifos/core/network/di/NetworkModule.kt @@ -33,12 +33,15 @@ import org.koin.dsl.module val NetworkModule = module { - single { - UserPreferencesRepositoryImpl( - get(), - get(named(MifosDispatchers.IO.name,),), - get(named(MifosDispatchers.Unconfined)), - ) + single(MifosClient) { + val preferencesRepository = get() + + KtorHttpClient.config { + install(Auth) + install(MifosInterceptor) { + repository = preferencesRepository + } + } } single(MifosClient) { @@ -52,7 +55,14 @@ val NetworkModule = module { single { BaseApiManager(get(), get()) } - single { Ktorfit.Builder().build() } +// single { Ktorfit.Builder().build() } + + single { + Ktorfit.Builder() + .baseUrl(BaseUrl().url) + .httpClient(get(MifosClient)) + .build() + } single { val prefManager: UserPreferencesRepository = get() diff --git a/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginViewModel.kt b/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginViewModel.kt index 085999ff6f0..e68d0f2231e 100644 --- a/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginViewModel.kt +++ b/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginViewModel.kt @@ -77,21 +77,6 @@ class LoginViewModel( } } - fun testFunction(){ - viewModelScope.launch { - val ans : List - val t = noteRepository.getNotes("sdfe", 0).collect{ - when(it){ - is DataState.Error<*> -> Logger.e("@@@", it.message.toString() ) - DataState.Loading -> TODO() - is DataState.Success<*> -> TODO() - } - } - Logger.d("@@@", t. ) - - } - } - private fun login(username: String, password: String) { viewModelScope.launch { loginUseCase(username, password).collect { result -> From 0a09039e6adf857dfa553d3981c1a9e25a6bf1a7 Mon Sep 17 00:00:00 2001 From: itsPronay Date: Sun, 25 May 2025 16:53:33 +0600 Subject: [PATCH 5/7] fix auth --- cmp-navigation/build.gradle.kts | 3 +++ .../kotlin/cmp/navigation/navigation/RootNavGraph.kt | 4 ++-- .../kotlin/com/mifos/core/domain/useCases/LoginUseCase.kt | 1 - .../kotlin/com/mifos/core/network/di/NetworkModule.kt | 2 -- .../kotlin/com/mifos/feature/auth/login/LoginViewModel.kt | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cmp-navigation/build.gradle.kts b/cmp-navigation/build.gradle.kts index 3ede6f318f6..24924f6c212 100644 --- a/cmp-navigation/build.gradle.kts +++ b/cmp-navigation/build.gradle.kts @@ -11,6 +11,7 @@ plugins { alias(libs.plugins.mifos.kmp.library) alias(libs.plugins.mifos.cmp.feature) alias(libs.plugins.mifos.kmp.koin) + alias(libs.plugins.kotlin.serialization) } android { @@ -20,6 +21,8 @@ android { kotlin { sourceSets { commonMain.dependencies{ + implementation(libs.kotlinx.serialization.json) + implementation(projects.core.domain) implementation(projects.core.common) implementation(projects.core.data) diff --git a/cmp-navigation/src/commonMain/kotlin/cmp/navigation/navigation/RootNavGraph.kt b/cmp-navigation/src/commonMain/kotlin/cmp/navigation/navigation/RootNavGraph.kt index 8495decefcb..2b0758ba975 100644 --- a/cmp-navigation/src/commonMain/kotlin/cmp/navigation/navigation/RootNavGraph.kt +++ b/cmp-navigation/src/commonMain/kotlin/cmp/navigation/navigation/RootNavGraph.kt @@ -34,8 +34,8 @@ fun RootNavGraph( modifier = modifier, ) { authNavGraph( - navigateHome = { navHostController.navigate(NavGraphRoute::MAIN_GRAPH) }, - navigatePasscode = {}, + navigateHome = { navHostController.navigate(MAIN_GRAPH) }, + navigatePasscode = { }, updateServerConfig = {} ) diff --git a/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/LoginUseCase.kt b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/LoginUseCase.kt index c7527fe3c3a..945db530049 100644 --- a/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/LoginUseCase.kt +++ b/core/domain/src/commonMain/kotlin/com/mifos/core/domain/useCases/LoginUseCase.kt @@ -23,7 +23,6 @@ import kotlinx.coroutines.flow.flow class LoginUseCase( private val loginRepository: LoginRepository, ) { - operator fun invoke( username: String, password: String, diff --git a/core/network/src/commonMain/kotlin/com/mifos/core/network/di/NetworkModule.kt b/core/network/src/commonMain/kotlin/com/mifos/core/network/di/NetworkModule.kt index 2692c179d22..ed2d0cfcdf6 100644 --- a/core/network/src/commonMain/kotlin/com/mifos/core/network/di/NetworkModule.kt +++ b/core/network/src/commonMain/kotlin/com/mifos/core/network/di/NetworkModule.kt @@ -55,8 +55,6 @@ val NetworkModule = module { single { BaseApiManager(get(), get()) } -// single { Ktorfit.Builder().build() } - single { Ktorfit.Builder() .baseUrl(BaseUrl().url) diff --git a/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginViewModel.kt b/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginViewModel.kt index e68d0f2231e..6e983ad374f 100644 --- a/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginViewModel.kt +++ b/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginViewModel.kt @@ -127,7 +127,7 @@ class LoginViewModel( if (passcode.value != null) { _loginUiState.value = LoginUiState.HomeActivityIntent } else { - _loginUiState.value = LoginUiState.PassCodeActivityIntent + _loginUiState.value = LoginUiState.HomeActivityIntent } } } From 7a1de80fab68045f2399d466035e7268fd9d49e7 Mon Sep 17 00:00:00 2001 From: itsPronay Date: Sun, 25 May 2025 16:59:39 +0600 Subject: [PATCH 6/7] fixed checks --- .../src/commonMain/kotlin/cmp/navigation/ComposeApp.kt | 2 -- .../kotlin/cmp/navigation/navigation/RootNavGraph.kt | 4 +--- .../com/mifos/core/datastore/UserPreferencesDataSource.kt | 1 - .../kotlin/com/mifos/core/network/di/NetworkModule.kt | 4 ---- .../kotlin/com/mifos/feature/auth/login/LoginViewModel.kt | 5 +---- 5 files changed, 2 insertions(+), 14 deletions(-) diff --git a/cmp-navigation/src/commonMain/kotlin/cmp/navigation/ComposeApp.kt b/cmp-navigation/src/commonMain/kotlin/cmp/navigation/ComposeApp.kt index ec6201d6a2e..73a602dd293 100644 --- a/cmp-navigation/src/commonMain/kotlin/cmp/navigation/ComposeApp.kt +++ b/cmp-navigation/src/commonMain/kotlin/cmp/navigation/ComposeApp.kt @@ -12,8 +12,6 @@ package cmp.navigation import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.navigation.compose.rememberNavController -import cmp.navigation.navigation.NavGraphRoute.AUTH_GRAPH -import cmp.navigation.navigation.NavGraphRoute.PASSCODE_GRAPH import cmp.navigation.navigation.RootNavGraph import com.mifos.core.data.util.NetworkMonitor import com.mifos.core.designsystem.theme.MifosTheme diff --git a/cmp-navigation/src/commonMain/kotlin/cmp/navigation/navigation/RootNavGraph.kt b/cmp-navigation/src/commonMain/kotlin/cmp/navigation/navigation/RootNavGraph.kt index 2b0758ba975..8cad67e501c 100644 --- a/cmp-navigation/src/commonMain/kotlin/cmp/navigation/navigation/RootNavGraph.kt +++ b/cmp-navigation/src/commonMain/kotlin/cmp/navigation/navigation/RootNavGraph.kt @@ -11,7 +11,6 @@ package cmp.navigation.navigation import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.navigation.NavController import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable @@ -36,7 +35,7 @@ fun RootNavGraph( authNavGraph( navigateHome = { navHostController.navigate(MAIN_GRAPH) }, navigatePasscode = { }, - updateServerConfig = {} + updateServerConfig = {}, ) composable(MAIN_GRAPH) { @@ -48,4 +47,3 @@ fun RootNavGraph( } } } - diff --git a/core/datastore/src/commonMain/kotlin/com/mifos/core/datastore/UserPreferencesDataSource.kt b/core/datastore/src/commonMain/kotlin/com/mifos/core/datastore/UserPreferencesDataSource.kt index 7074011bf6b..7793b8f4700 100644 --- a/core/datastore/src/commonMain/kotlin/com/mifos/core/datastore/UserPreferencesDataSource.kt +++ b/core/datastore/src/commonMain/kotlin/com/mifos/core/datastore/UserPreferencesDataSource.kt @@ -10,7 +10,6 @@ package com.mifos.core.datastore import com.mifos.core.common.utils.ServerConfig -import com.mifos.core.common.utils.asDataStateFlow import com.mifos.core.datastore.model.AppSettings import com.mifos.core.datastore.model.AppTheme import com.mifos.core.datastore.model.UserData diff --git a/core/network/src/commonMain/kotlin/com/mifos/core/network/di/NetworkModule.kt b/core/network/src/commonMain/kotlin/com/mifos/core/network/di/NetworkModule.kt index ed2d0cfcdf6..dfd76774a06 100644 --- a/core/network/src/commonMain/kotlin/com/mifos/core/network/di/NetworkModule.kt +++ b/core/network/src/commonMain/kotlin/com/mifos/core/network/di/NetworkModule.kt @@ -10,13 +10,10 @@ package com.mifos.core.network.di import coil3.ImageLoader -import com.mifos.core.common.network.MifosDispatchers import com.mifos.core.common.utils.getInstanceUrl import com.mifos.core.datastore.UserPreferencesRepository -import com.mifos.core.datastore.UserPreferencesRepositoryImpl import com.mifos.core.network.BaseApiManager import com.mifos.core.network.BaseUrl -import com.mifos.core.network.ConfigMifos import com.mifos.core.network.KtorHttpClient import com.mifos.core.network.KtorfitClient import com.mifos.core.network.MifosInterceptor @@ -28,7 +25,6 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch -import org.koin.core.qualifier.named import org.koin.dsl.module val NetworkModule = module { diff --git a/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginViewModel.kt b/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginViewModel.kt index 6e983ad374f..26e0402e20a 100644 --- a/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginViewModel.kt +++ b/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginViewModel.kt @@ -22,11 +22,8 @@ import com.mifos.core.datastore.UserPreferencesRepository import com.mifos.core.domain.useCases.LoginUseCase import com.mifos.core.domain.useCases.PasswordValidationUseCase import com.mifos.core.domain.useCases.UsernameValidationUseCase -import com.mifos.core.model.objects.Note import com.mifos.core.model.objects.users.User import com.mifos.core.network.model.PostAuthenticationResponse -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.IO import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow @@ -44,7 +41,7 @@ class LoginViewModel( private val usernameValidationUseCase: UsernameValidationUseCase, private val passwordValidationUseCase: PasswordValidationUseCase, private val loginUseCase: LoginUseCase, - private val noteRepository: NoteRepository + private val noteRepository: NoteRepository, ) : ViewModel() { private val _loginUiState = MutableStateFlow(LoginUiState.Empty) From d85031714dcdb68ba519cb65cc547f872c7ad0f5 Mon Sep 17 00:00:00 2001 From: itsPronay Date: Sun, 25 May 2025 17:21:18 +0600 Subject: [PATCH 7/7] removed unnecessary part --- .../com/mifos/feature/auth/login/LoginViewModel.kt | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginViewModel.kt b/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginViewModel.kt index 26e0402e20a..27bb84acec9 100644 --- a/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginViewModel.kt +++ b/feature/auth/src/commonMain/kotlin/com/mifos/feature/auth/login/LoginViewModel.kt @@ -17,7 +17,6 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import co.touchlab.kermit.Logger import com.mifos.core.common.utils.DataState -import com.mifos.core.data.repository.NoteRepository import com.mifos.core.datastore.UserPreferencesRepository import com.mifos.core.domain.useCases.LoginUseCase import com.mifos.core.domain.useCases.PasswordValidationUseCase @@ -41,7 +40,6 @@ class LoginViewModel( private val usernameValidationUseCase: UsernameValidationUseCase, private val passwordValidationUseCase: PasswordValidationUseCase, private val loginUseCase: LoginUseCase, - private val noteRepository: NoteRepository, ) : ViewModel() { private val _loginUiState = MutableStateFlow(LoginUiState.Empty) @@ -89,10 +87,13 @@ class LoginViewModel( } is DataState.Success -> { - result.data.let { - if (it.userId != null && it.authenticated == true) { - onLoginSuccessful(it, username, password) - } + if (result.data.authenticated == true) { + onLoginSuccessful(result.data, username, password) + } else { + _loginUiState.value = + LoginUiState.ShowError(Res.string.feature_auth_error_login_failed) + + Logger.d("@@@", Throwable("login: ${result.data}")) } } }