diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/main/LobstersApp.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/main/LobstersApp.kt
index f4239958..fc40401c 100644
--- a/app/src/main/java/dev/msfjarvis/lobsters/ui/main/LobstersApp.kt
+++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/main/LobstersApp.kt
@@ -34,9 +34,11 @@ fun LobstersApp() {
val viewModel: LobstersViewModel = viewModel()
val navController = rememberNavController()
val hottestPosts = viewModel.hottestPosts.collectAsLazyPagingItems()
+ val newestPosts = viewModel.newestPosts.collectAsLazyPagingItems()
val savedPosts by viewModel.savedPosts.collectAsState()
val hottestPostsListState = rememberLazyListState()
+ val newestPostsListState = rememberLazyListState()
val navBackStackEntry by navController.currentBackStackEntryAsState()
val currentRoute =
@@ -48,9 +50,20 @@ fun LobstersApp() {
popUpTo(navController.graph.startDestination) { inclusive = false }
}
}
- val jumpToIndex: suspend (Int) -> Unit = {
- if (hottestPosts.loadState.refresh != LoadState.Loading) {
- hottestPostsListState.animateScrollToItem(it)
+ val jumpToIndex: suspend (Int, Destination) -> Unit = { index, screen ->
+ when (screen) {
+ Destination.Hottest -> {
+ if (hottestPosts.loadState.refresh != LoadState.Loading) {
+ hottestPostsListState.animateScrollToItem(index)
+ }
+ }
+ Destination.Newest -> {
+ if (newestPosts.loadState.refresh != LoadState.Loading) {
+ newestPostsListState.animateScrollToItem(index)
+ }
+ }
+ else -> {
+ }
}
}
@@ -80,6 +93,16 @@ fun LobstersApp() {
refreshAction = viewModel::reloadHottestPosts,
)
}
+ composable(Destination.Newest.route) {
+ NetworkPosts(
+ posts = newestPosts,
+ listState = newestPostsListState,
+ modifier = Modifier.padding(bottom = innerPadding.calculateBottomPadding()),
+ isPostSaved = viewModel::isPostSaved,
+ saveAction = viewModel::toggleSave,
+ refreshAction = viewModel::reloadNewestPosts,
+ )
+ }
composable(Destination.Saved.route) {
SavedPosts(
posts = savedPosts,
@@ -96,7 +119,7 @@ fun LobstersApp() {
fun LobstersBottomNav(
currentDestination: Destination,
navigateToDestination: (destination: Destination) -> Unit,
- jumpToIndex: suspend (index: Int) -> Unit,
+ jumpToIndex: suspend (index: Int, screen: Destination) -> Unit,
) {
val coroutineScope = rememberCoroutineScope()
BottomNavigation(modifier = Modifier.testTag("LobstersBottomNav")) {
@@ -115,8 +138,8 @@ fun LobstersBottomNav(
onClick = {
if (screen != currentDestination) {
navigateToDestination(screen)
- } else if (screen.route == Destination.Hottest.route) {
- coroutineScope.launch { jumpToIndex(0) }
+ } else if (screen.route != Destination.Saved.route) {
+ coroutineScope.launch { jumpToIndex(0, screen) }
}
}
)
diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/navigation/Destination.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/navigation/Destination.kt
index 0d2e65d6..7a8b4a11 100644
--- a/app/src/main/java/dev/msfjarvis/lobsters/ui/navigation/Destination.kt
+++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/navigation/Destination.kt
@@ -13,6 +13,7 @@ enum class Destination(
@DrawableRes val badgeRes: Int,
) {
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),
;
diff --git a/app/src/main/res/drawable/ic_schedule_black_24dp.xml b/app/src/main/res/drawable/ic_schedule_black_24dp.xml
new file mode 100644
index 00000000..8eecf9cb
--- /dev/null
+++ b/app/src/main/res/drawable/ic_schedule_black_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt b/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt
index ad774903..8af20951 100644
--- a/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt
+++ b/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt
@@ -17,6 +17,7 @@ private fun stringEnumMapper(stringEnum: Strings): Int {
Strings.RemoveFromSavedPosts -> R.string.remove_from_saved_posts
Strings.SavedPosts -> R.string.saved_posts
Strings.SubmittedBy -> R.string.submitted_by
+ Strings.NewestPosts -> R.string.newest_posts
}
}
diff --git a/common/src/androidMain/res/values/strings.xml b/common/src/androidMain/res/values/strings.xml
index 0916aedb..0de8ea60 100644
--- a/common/src/androidMain/res/values/strings.xml
+++ b/common/src/androidMain/res/values/strings.xml
@@ -10,4 +10,5 @@
Refresh posts
Open comments
Change sort order
+ Newest
diff --git a/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/Strings.kt b/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/Strings.kt
index 031e77dc..1edf66ab 100644
--- a/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/Strings.kt
+++ b/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/Strings.kt
@@ -12,5 +12,6 @@ enum class Strings {
RemoveFromSavedPosts,
SavedPosts,
SubmittedBy,
+ NewestPosts,
;
}
diff --git a/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt b/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt
index d7d6e8b7..27f54788 100644
--- a/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt
+++ b/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt
@@ -15,6 +15,7 @@ private fun stringEnumMapper(stringEnum: Strings): String {
Strings.RemoveFromSavedPosts -> "Remove from saved posts"
Strings.SavedPosts -> "Saved"
Strings.SubmittedBy -> "submitted by %1s"
+ Strings.NewestPosts -> "Newest"
}
}