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

133 wiersze
5.4 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
import androidx.compose.runtime.livedata.observeAsState
import androidx.lifecycle.viewmodel.compose.viewModel
2023-01-11 18:31:20 +00:00
import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
2023-03-13 12:28:30 +00:00
import com.google.accompanist.pager.ExperimentalPagerApi
import com.google.accompanist.pager.rememberPagerState
import com.vitorpamplona.amethyst.ui.dal.GlobalFeedFilter
2023-03-13 12:28:30 +00:00
import com.vitorpamplona.amethyst.ui.dal.HomeConversationsFeedFilter
import com.vitorpamplona.amethyst.ui.dal.HomeNewThreadFeedFilter
import com.vitorpamplona.amethyst.ui.screen.NostrGlobalFeedViewModel
2023-03-13 12:28:30 +00:00
import com.vitorpamplona.amethyst.ui.screen.NostrHomeFeedViewModel
import com.vitorpamplona.amethyst.ui.screen.NostrHomeRepliesFeedViewModel
2023-01-11 18:31:20 +00:00
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
2023-03-13 12:17:35 +00:00
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
2023-03-15 21:02:49 +00:00
import com.vitorpamplona.amethyst.ui.screen.loggedIn.HashtagScreen
2023-03-13 12:17:35 +00:00
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
2023-03-13 12:17:35 +00:00
import com.vitorpamplona.amethyst.ui.screen.loggedIn.ThreadScreen
2023-01-11 18:31:20 +00:00
2023-03-13 12:28:30 +00:00
@OptIn(ExperimentalPagerApi::class)
2023-01-11 18:31:20 +00:00
@Composable
fun AppNavigation(
navController: NavHostController,
2023-01-19 03:00:32 +00:00
accountViewModel: AccountViewModel,
2023-01-25 00:53:22 +00:00
nextPage: String? = null
2023-01-11 18:31:20 +00:00
) {
val accountState by accountViewModel.accountLiveData.observeAsState()
val account = accountState?.account ?: return
GlobalFeedFilter.account = account
2023-03-13 12:28:30 +00:00
HomeNewThreadFeedFilter.account = account
HomeConversationsFeedFilter.account = account
val globalFeedViewModel: NostrGlobalFeedViewModel = viewModel()
2023-03-13 12:28:30 +00:00
val homeFeedViewModel: NostrHomeFeedViewModel = viewModel()
val homeRepliesFeedViewModel: NostrHomeRepliesFeedViewModel = viewModel()
val homePagerState = rememberPagerState()
2023-01-11 18:31:20 +00:00
NavHost(navController, startDestination = Route.Home.route) {
Route.Search.let { route ->
composable(route.route, route.arguments, content = {
SearchScreen(
accountViewModel = accountViewModel,
feedViewModel = globalFeedViewModel,
navController = navController,
scrollToTop = it.arguments?.getBoolean("scrollToTop") ?: false
)
})
}
2023-03-13 12:17:35 +00:00
Route.Home.let { route ->
composable(route.route, route.arguments, content = {
HomeScreen(
accountViewModel = accountViewModel,
navController = navController,
2023-03-13 12:28:30 +00:00
homeFeedViewModel = homeFeedViewModel,
repliesFeedViewModel = homeRepliesFeedViewModel,
pagerState = homePagerState,
2023-03-13 12:17:35 +00:00
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
)
})
}
2023-03-15 21:02:49 +00:00
Route.Hashtag.let { route ->
composable(route.route, route.arguments, content = {
HashtagScreen(
tag = it.arguments?.getString("id"),
accountViewModel = accountViewModel,
navController = navController
)
})
}
2023-03-13 12:17:35 +00:00
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,
navController = navController
)
})
2023-01-11 18:31:20 +00:00
}
}
2023-01-25 00:53:22 +00:00
if (nextPage != null) {
navController.navigate(nextPage)
}
2023-03-07 18:46:44 +00:00
}