From 70434eb24440ffe98158b6d06d5b6961c4ffb729 Mon Sep 17 00:00:00 2001 From: maxmoney21m Date: Mon, 13 Mar 2023 20:17:35 +0800 Subject: [PATCH] Remove Route buildScreen member --- .../amethyst/ui/navigation/AppNavigation.kt | 65 +++++++++++++++- .../amethyst/ui/navigation/Routes.kt | 77 +++---------------- 2 files changed, 70 insertions(+), 72 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt index 27d2b4b16..86935b29b 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/AppNavigation.kt @@ -11,7 +11,15 @@ import com.vitorpamplona.amethyst.ui.dal.GlobalFeedFilter import com.vitorpamplona.amethyst.ui.screen.AccountStateViewModel import com.vitorpamplona.amethyst.ui.screen.NostrGlobalFeedViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel +import com.vitorpamplona.amethyst.ui.screen.loggedIn.ChannelScreen +import com.vitorpamplona.amethyst.ui.screen.loggedIn.ChatroomListScreen +import com.vitorpamplona.amethyst.ui.screen.loggedIn.ChatroomScreen +import com.vitorpamplona.amethyst.ui.screen.loggedIn.FiltersScreen +import com.vitorpamplona.amethyst.ui.screen.loggedIn.HomeScreen +import com.vitorpamplona.amethyst.ui.screen.loggedIn.NotificationScreen +import com.vitorpamplona.amethyst.ui.screen.loggedIn.ProfileScreen import com.vitorpamplona.amethyst.ui.screen.loggedIn.SearchScreen +import com.vitorpamplona.amethyst.ui.screen.loggedIn.ThreadScreen @Composable fun AppNavigation( @@ -38,10 +46,59 @@ fun AppNavigation( }) } - Routes.forEach { - it.buildScreen?.let { fn -> - composable(it.route, it.arguments, content = fn(accountViewModel, accountStateViewModel, navController)) - } + Route.Home.let { route -> + composable(route.route, route.arguments, content = { + HomeScreen( + accountViewModel = accountViewModel, + navController = navController, + scrollToTop = it.arguments?.getBoolean("scrollToTop") ?: false + ) + }) + } + + composable(Route.Message.route, content = { ChatroomListScreen(accountViewModel, navController) }) + composable(Route.Notification.route, content = { NotificationScreen(accountViewModel, navController) }) + composable(Route.Filters.route, content = { FiltersScreen(accountViewModel, navController) }) + + Route.Profile.let { route -> + composable(route.route, route.arguments, content = { + ProfileScreen( + userId = it.arguments?.getString("id"), + accountViewModel = accountViewModel, + navController = navController + ) + }) + } + + Route.Note.let { route -> + composable(route.route, route.arguments, content = { + ThreadScreen( + noteId = it.arguments?.getString("id"), + accountViewModel = accountViewModel, + navController = navController + ) + }) + } + + Route.Room.let { route -> + composable(route.route, route.arguments, content = { + ChatroomScreen( + userId = it.arguments?.getString("id"), + accountViewModel = accountViewModel, + navController = navController + ) + }) + } + + Route.Channel.let { route -> + composable(route.route, route.arguments, content = { + ChannelScreen( + channelId = it.arguments?.getString("id"), + accountViewModel = accountViewModel, + accountStateViewModel = accountStateViewModel, + navController = navController + ) + }) } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/Routes.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/Routes.kt index ec7b30a00..3ee743e87 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/Routes.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/Routes.kt @@ -4,8 +4,6 @@ import android.content.Context import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.navigation.NamedNavArgument -import androidx.navigation.NavBackStackEntry -import androidx.navigation.NavController import androidx.navigation.NavHostController import androidx.navigation.NavType import androidx.navigation.compose.currentBackStackEntryAsState @@ -16,35 +14,21 @@ import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.ui.dal.ChatroomListKnownFeedFilter import com.vitorpamplona.amethyst.ui.dal.HomeNewThreadFeedFilter import com.vitorpamplona.amethyst.ui.dal.NotificationFeedFilter -import com.vitorpamplona.amethyst.ui.screen.AccountStateViewModel -import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel -import com.vitorpamplona.amethyst.ui.screen.loggedIn.ChannelScreen -import com.vitorpamplona.amethyst.ui.screen.loggedIn.ChatroomListScreen -import com.vitorpamplona.amethyst.ui.screen.loggedIn.ChatroomScreen -import com.vitorpamplona.amethyst.ui.screen.loggedIn.FiltersScreen -import com.vitorpamplona.amethyst.ui.screen.loggedIn.HomeScreen -import com.vitorpamplona.amethyst.ui.screen.loggedIn.NotificationScreen -import com.vitorpamplona.amethyst.ui.screen.loggedIn.ProfileScreen -import com.vitorpamplona.amethyst.ui.screen.loggedIn.ThreadScreen sealed class Route( val route: String, val icon: Int, val hasNewItems: (Account, NotificationCache, Context) -> Boolean = { _, _, _ -> false }, - val arguments: List = emptyList(), - val buildScreen: ((AccountViewModel, AccountStateViewModel, NavController) -> @Composable (NavBackStackEntry) -> Unit)? = null + val arguments: List = emptyList() ) { val base: String get() = route.substringBefore("?") object Home : Route( - "Home?scrollToTop={scrollToTop}", - R.drawable.ic_home, + route = "Home?scrollToTop={scrollToTop}", + icon = R.drawable.ic_home, arguments = listOf(navArgument("scrollToTop") { type = NavType.BoolType; defaultValue = false }), - hasNewItems = { accountViewModel, cache, context -> homeHasNewItems(accountViewModel, cache, context) }, - buildScreen = { accountViewModel, _, navController -> - { HomeScreen(accountViewModel, navController, it.arguments?.getBoolean("scrollToTop", false) ?: false) } - } + hasNewItems = { accountViewModel, cache, context -> homeHasNewItems(accountViewModel, cache, context) } ) object Search : Route( @@ -58,9 +42,6 @@ sealed class Route( icon = R.drawable.ic_notifications, hasNewItems = { accountViewModel, cache, context -> notificationHasNewItems(accountViewModel, cache, context) - }, - buildScreen = { accountViewModel, _, navController -> - { NotificationScreen(accountViewModel, navController) } } ) @@ -69,79 +50,39 @@ sealed class Route( icon = R.drawable.ic_dm, hasNewItems = { accountViewModel, cache, context -> messagesHasNewItems(accountViewModel, cache, context) - }, - buildScreen = { accountViewModel, _, navController -> - { ChatroomListScreen(accountViewModel, navController) } } ) object Filters : Route( route = "Filters", - icon = R.drawable.ic_security, - buildScreen = { accountViewModel, _, navController -> - { FiltersScreen(accountViewModel, navController) } - } + icon = R.drawable.ic_security ) object Profile : Route( route = "User/{id}", icon = R.drawable.ic_profile, - arguments = listOf(navArgument("id") { type = NavType.StringType }), - buildScreen = { accountViewModel, _, navController -> - { ProfileScreen(it.arguments?.getString("id"), accountViewModel, navController) } - } + arguments = listOf(navArgument("id") { type = NavType.StringType }) ) object Note : Route( route = "Note/{id}", icon = R.drawable.ic_moments, - arguments = listOf(navArgument("id") { type = NavType.StringType }), - buildScreen = { accountViewModel, _, navController -> - { ThreadScreen(it.arguments?.getString("id"), accountViewModel, navController) } - } + arguments = listOf(navArgument("id") { type = NavType.StringType }) ) object Room : Route( route = "Room/{id}", icon = R.drawable.ic_moments, - arguments = listOf(navArgument("id") { type = NavType.StringType }), - buildScreen = { accountViewModel, _, navController -> - { ChatroomScreen(it.arguments?.getString("id"), accountViewModel, navController) } - } + arguments = listOf(navArgument("id") { type = NavType.StringType }) ) object Channel : Route( route = "Channel/{id}", icon = R.drawable.ic_moments, - arguments = listOf(navArgument("id") { type = NavType.StringType }), - buildScreen = { accountViewModel, accountStateViewModel, navController -> - { - ChannelScreen( - it.arguments?.getString("id"), - accountViewModel, - accountStateViewModel, - navController - ) - } - } + arguments = listOf(navArgument("id") { type = NavType.StringType }) ) } -val Routes = listOf( - // bottom - Route.Home, - Route.Message, - Route.Search, - Route.Notification, - - // drawer - Route.Profile, - Route.Note, - Route.Room, - Route.Channel, - Route.Filters -) - // ** // * Functions below only exist because we have not broken the datasource classes into backend and frontend. // **