amethyst/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/Routes.kt

73 wiersze
3.2 KiB
Kotlin
Czysty Zwykły widok Historia

2023-01-11 18:31:20 +00:00
package com.vitorpamplona.amethyst.ui.navigation
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
2023-01-12 17:47:31 +00:00
import androidx.navigation.NamedNavArgument
2023-01-11 18:31:20 +00:00
import androidx.navigation.NavBackStackEntry
2023-01-12 17:47:31 +00:00
import androidx.navigation.NavController
2023-01-11 18:31:20 +00:00
import androidx.navigation.NavHostController
2023-01-12 17:47:31 +00:00
import androidx.navigation.NavType
2023-01-11 18:31:20 +00:00
import androidx.navigation.compose.currentBackStackEntryAsState
2023-01-12 17:47:31 +00:00
import androidx.navigation.navArgument
2023-01-11 18:31:20 +00:00
import com.vitorpamplona.amethyst.R
2023-01-14 23:02:28 +00:00
import com.vitorpamplona.amethyst.ui.screen.ChatroomListScreen
2023-01-14 22:56:18 +00:00
import com.vitorpamplona.amethyst.ui.screen.ChatroomScreen
2023-01-11 18:31:20 +00:00
import com.vitorpamplona.amethyst.ui.screen.HomeScreen
import com.vitorpamplona.amethyst.ui.screen.NotificationScreen
import com.vitorpamplona.amethyst.ui.screen.ProfileScreen
import com.vitorpamplona.amethyst.ui.screen.SearchScreen
2023-01-14 23:02:28 +00:00
import com.vitorpamplona.amethyst.ui.screen.ThreadScreen
2023-01-11 18:31:20 +00:00
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
sealed class Route(
val route: String,
val icon: Int,
2023-01-12 17:47:31 +00:00
val arguments: List<NamedNavArgument> = emptyList(),
val buildScreen: (AccountViewModel, NavController) -> @Composable (NavBackStackEntry) -> Unit
2023-01-11 18:31:20 +00:00
) {
2023-01-12 17:47:31 +00:00
object Home : Route("Home", R.drawable.ic_home, buildScreen = { acc, nav -> { _ -> HomeScreen(acc, nav) } })
object Search : Route("Search", R.drawable.ic_search, buildScreen = { acc, nav -> { _ -> SearchScreen(acc, nav) }})
object Notification : Route("Notification", R.drawable.ic_notifications,buildScreen = { acc, nav -> { _ -> NotificationScreen(acc, nav) }})
2023-01-14 22:56:18 +00:00
object Message : Route("Message", R.drawable.ic_dm, buildScreen = { acc, nav -> { _ -> ChatroomListScreen(acc, nav) }})
2023-01-12 17:47:31 +00:00
object Profile : Route("Profile", R.drawable.ic_profile, buildScreen = { acc, nav -> { _ -> ProfileScreen(acc) }})
object Lists : Route("Lists", R.drawable.ic_lists, buildScreen = { acc, nav -> { _ -> ProfileScreen(acc) }})
object Topics : Route("Topics", R.drawable.ic_topics, buildScreen = { acc, nav -> { _ -> ProfileScreen(acc) }})
object Bookmarks : Route("Bookmarks", R.drawable.ic_bookmarks, buildScreen = { acc, nav -> { _ -> ProfileScreen(acc) }})
object Moments : Route("Moments", R.drawable.ic_moments, buildScreen = { acc, nav -> { _ -> ProfileScreen(acc) }})
object Note : Route("Note/{id}", R.drawable.ic_moments,
arguments = listOf(navArgument("id") { type = NavType.StringType } ),
buildScreen = { acc, nav -> { ThreadScreen(it.arguments?.getString("id"), acc, nav) }}
)
2023-01-14 22:56:18 +00:00
object Room : Route("Room/{id}", R.drawable.ic_moments,
arguments = listOf(navArgument("id") { type = NavType.StringType } ),
buildScreen = { acc, nav -> { ChatroomScreen(it.arguments?.getString("id"), acc, nav) }}
)
2023-01-11 18:31:20 +00:00
}
val Routes = listOf(
// bottom
Route.Home,
Route.Message,
Route.Search,
Route.Notification,
//drawer
Route.Profile,
Route.Lists,
Route.Topics,
Route.Bookmarks,
2023-01-12 17:47:31 +00:00
Route.Moments,
//inner
2023-01-14 22:56:18 +00:00
Route.Note,
Route.Room
2023-01-11 18:31:20 +00:00
)
@Composable
public fun currentRoute(navController: NavHostController): String? {
val navBackStackEntry by navController.currentBackStackEntryAsState()
return navBackStackEntry?.destination?.route
}