From 46b65e4b991edd929b511340b6eed861488da6f1 Mon Sep 17 00:00:00 2001 From: Cutiful <113351087+Syaroful@users.noreply.github.com> Date: Thu, 12 Jun 2025 11:42:54 +0700 Subject: [PATCH] refactor: move NavGraph to navigation package and add auth flow --- .../agrilinkvocpro/core/route/NavGraph.kt | 37 -------- .../agrilinkvocpro/navigation/NavGraph.kt | 90 +++++++++++++++++++ 2 files changed, 90 insertions(+), 37 deletions(-) delete mode 100644 agrilinkvocpro/app/src/main/java/com/syaroful/agrilinkvocpro/core/route/NavGraph.kt create mode 100644 agrilinkvocpro/app/src/main/java/com/syaroful/agrilinkvocpro/navigation/NavGraph.kt diff --git a/agrilinkvocpro/app/src/main/java/com/syaroful/agrilinkvocpro/core/route/NavGraph.kt b/agrilinkvocpro/app/src/main/java/com/syaroful/agrilinkvocpro/core/route/NavGraph.kt deleted file mode 100644 index e2f3092..0000000 --- a/agrilinkvocpro/app/src/main/java/com/syaroful/agrilinkvocpro/core/route/NavGraph.kt +++ /dev/null @@ -1,37 +0,0 @@ -package com.syaroful.agrilinkvocpro.core.route - -import androidx.compose.runtime.Composable -import androidx.navigation.compose.NavHost -import androidx.navigation.compose.composable -import androidx.navigation.compose.rememberNavController -import com.syaroful.agrilinkvocpro.ui.screen.home.HomeScreen -import com.syaroful.agrilinkvocpro.ui.screen.home.HomeViewModel -import com.syaroful.agrilinkvocpro.ui.screen.profile.ProfileScreen - -sealed class Screen(val route: String) { - object Home : Screen("home") - object Profile : Screen("profile") -} - -@Composable -fun SetupNavigation( - homeViewModel: HomeViewModel, - onLaunchFeature: (String) -> Unit -) { - val navController = rememberNavController() - NavHost(navController, startDestination = "home") { - composable("home") { - HomeScreen( - navController = navController, - onFeatureClick = { moduleName -> - homeViewModel.onFeatureClicked(moduleName, onLaunchFeature) - }, - dialogState = homeViewModel.currentModuleToDownload, - homeViewModel = homeViewModel - ) - } - composable("profile"){ - ProfileScreen() - } - } -} \ No newline at end of file diff --git a/agrilinkvocpro/app/src/main/java/com/syaroful/agrilinkvocpro/navigation/NavGraph.kt b/agrilinkvocpro/app/src/main/java/com/syaroful/agrilinkvocpro/navigation/NavGraph.kt new file mode 100644 index 0000000..4f24dde --- /dev/null +++ b/agrilinkvocpro/app/src/main/java/com/syaroful/agrilinkvocpro/navigation/NavGraph.kt @@ -0,0 +1,90 @@ +package com.syaroful.agrilinkvocpro.navigation + +import androidx.compose.runtime.Composable +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.rememberNavController +import com.syaroful.agrilinkvocpro.data.UserPreferences +import com.syaroful.agrilinkvocpro.ui.screen.detail.DetailScreen +import com.syaroful.agrilinkvocpro.ui.screen.home.DynamicModuleViewModel +import com.syaroful.agrilinkvocpro.ui.screen.home.HomeScreen +import com.syaroful.agrilinkvocpro.ui.screen.login.LoginScreen +import com.syaroful.agrilinkvocpro.ui.screen.login.LoginViewModel +import com.syaroful.agrilinkvocpro.ui.screen.profile.ProfileScreen +import com.syaroful.agrilinkvocpro.ui.screen.register.RegisterScreen +import com.syaroful.agrilinkvocpro.ui.screen.splash.SplashScreen +import org.koin.androidx.compose.koinViewModel + +@Composable +fun SetupNavigation( + userPreferences: UserPreferences, + dynamicModuleViewModel: DynamicModuleViewModel, + onLaunchFeature: (String) -> Unit +) { + + val loginViewModel: LoginViewModel = koinViewModel() + + val navController = rememberNavController() + NavHost(navController, startDestination = "splash") { + composable("splash") { + SplashScreen( + userPreferences = userPreferences, + onNavigate = { destination -> + navController.navigate(destination) { + popUpTo("splash") { inclusive = true } + } + } + ) + } + composable("login") { + LoginScreen( + loginViewModel = loginViewModel, + onLoginSuccess = { + navController.navigate("home") { + popUpTo("login") { inclusive = true } + } + }, + onNavigateToRegister = { + navController.navigate("register") { + popUpTo("login") { inclusive = true } + } + } + ) + } + composable("register") { + RegisterScreen( + onLoginSuccess = { + navController.navigate("login") { + popUpTo("login") { inclusive = true } + } + }, + onNavigateToLogin = { + navController.navigate("login") { + popUpTo("login") { inclusive = true } + } + } + ) + } + composable("home") { + HomeScreen( + navController = navController, + onFeatureClick = { moduleName -> + dynamicModuleViewModel.onFeatureClicked(moduleName, onLaunchFeature) + }, + dynamicModuleViewModel = dynamicModuleViewModel + ) + } + composable("profile") { + ProfileScreen( + onNavigateToLogin = { + navController.navigate("splash") { + popUpTo("splash") { inclusive = true } + } + } + ) + } + composable("detail-screen") { + DetailScreen() + } + } +} \ No newline at end of file