app: add view comments navigation action

Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
Harsh Shandilya
2021-04-10 22:01:24 +05:30
parent 02b61cd36a
commit 1f60cf7d1c
5 changed files with 25 additions and 8 deletions
@@ -15,14 +15,17 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.testTag
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.NavType
import androidx.navigation.compose.KEY_ROUTE
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.navArgument
import androidx.navigation.compose.navigate
import androidx.navigation.compose.rememberNavController
import androidx.paging.LoadState
import androidx.paging.compose.collectAsLazyPagingItems
import dev.msfjarvis.lobsters.ui.comments.CommentsPage
import dev.msfjarvis.lobsters.ui.navigation.Destination
import dev.msfjarvis.lobsters.ui.posts.NetworkPosts
import dev.msfjarvis.lobsters.ui.posts.SavedPosts
@@ -49,9 +52,7 @@ fun LobstersApp() {
navBackStackEntry?.arguments?.getString(KEY_ROUTE) ?: Destination.startDestination.route
val currentDestination = Destination.getDestinationFromRoute(currentRoute)
val navigateToDestination: (destination: Destination) -> Unit = { destination ->
navController.navigate(destination.route) {
launchSingleTop = true
}
navController.navigate(destination.route) { launchSingleTop = true }
}
val jumpToIndex: suspend (Int, Destination) -> Unit = { index, screen ->
when (screen) {
@@ -93,6 +94,7 @@ fun LobstersApp() {
isPostSaved = viewModel::isPostSaved,
saveAction = viewModel::toggleSave,
refreshAction = viewModel::reloadHottestPosts,
viewComments = { navController.navigate("comments/$it") },
)
}
composable(Destination.Newest.route) {
@@ -103,6 +105,7 @@ fun LobstersApp() {
isPostSaved = viewModel::isPostSaved,
saveAction = viewModel::toggleSave,
refreshAction = viewModel::reloadNewestPosts,
viewComments = { navController.navigate("comments/$it") },
)
}
composable(Destination.Saved.route) {
@@ -111,6 +114,16 @@ fun LobstersApp() {
saveAction = viewModel::toggleSave,
modifier = Modifier.padding(bottom = innerPadding.calculateBottomPadding()),
sortReversed = viewModel.getSortOrder(),
viewComments = { navController.navigate("comments/$it") },
)
}
composable(
Destination.Comments.route,
listOf(navArgument("postId") { type = NavType.StringType }),
) { backStackEntry ->
CommentsPage(
postId = requireNotNull(backStackEntry.arguments?.getString("postId")),
getDetails = viewModel::getPostDetails,
)
}
}
@@ -125,7 +138,7 @@ fun LobstersBottomNav(
) {
val coroutineScope = rememberCoroutineScope()
BottomNavigation(modifier = Modifier.testTag("LobstersBottomNav")) {
Destination.values().forEach { screen ->
Destination.values().filter { it.bottombar }.forEach { screen ->
BottomNavigationItem(
icon = {
IconResource(
@@ -9,10 +9,12 @@ enum class Destination(
val route: String,
val labelRes: Strings,
@DrawableRes val badgeRes: Int,
val bottombar: Boolean = true,
) {
Hottest("hottest", Strings.HottestPosts, R.drawable.ic_whatshot_24px),
Newest("newest", Strings.NewestPosts, R.drawable.ic_schedule_black_24dp),
Saved("saved", Strings.SavedPosts, R.drawable.ic_favorite_24px),
Comments("comments/{postId}", Strings.OpenComments, -1, false),
;
companion object {
@@ -57,7 +57,7 @@ fun LobstersItem(
post: SavedPost,
isSaved: Boolean,
viewPost: () -> Unit,
viewComments: () -> Unit,
viewComments: (String) -> Unit,
toggleSave: () -> Unit,
modifier: Modifier = Modifier,
) {
@@ -87,7 +87,7 @@ fun LobstersItem(
modifier = Modifier.width(8.dp),
)
CommentsButton(
onClick = viewComments,
onClick = { viewComments(post.shortId) },
)
}
SubmitterName(
@@ -26,6 +26,7 @@ fun NetworkPosts(
isPostSaved: (String) -> Boolean,
saveAction: (SavedPost) -> Unit,
refreshAction: () -> Unit,
viewComments: (String) -> Unit,
) {
val urlLauncher = LocalUrlLauncher.current
var isRefreshing by mutableStateOf(false)
@@ -55,7 +56,7 @@ fun NetworkPosts(
post = item,
isSaved = isSaved,
viewPost = { urlLauncher.launch(item.url.ifEmpty { item.commentsUrl }) },
viewComments = { urlLauncher.launch(item.commentsUrl) },
viewComments = viewComments,
toggleSave = {
isSaved = isSaved.not()
saveAction.invoke(item)
@@ -32,6 +32,7 @@ fun SavedPosts(
sortReversed: Flow<Boolean>,
modifier: Modifier = Modifier,
saveAction: (SavedPost) -> Unit,
viewComments: (String) -> Unit,
) {
val listState = rememberLazyListState()
val urlLauncher = LocalUrlLauncher.current
@@ -71,7 +72,7 @@ fun SavedPosts(
post = item,
isSaved = true,
viewPost = { urlLauncher.launch(item.url.ifEmpty { item.commentsUrl }) },
viewComments = { urlLauncher.launch(item.commentsUrl) },
viewComments = viewComments,
toggleSave = { saveAction.invoke(item) },
)
}