mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-18 03:17:03 +05:30
Merge #53
53: Fix pagination and extract UrlLauncherAmbient r=msfjarvis a=msfjarvis Our pagination hack currently does not update the last index field which has now been fixed. While here we also take the time to extract UrlLauncherAmbient and prepare the post list composables for tweaking from the root UI bors r+ Co-authored-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
commit
60f6108d35
4 changed files with 17 additions and 16 deletions
|
@ -9,8 +9,6 @@ import androidx.compose.material.BottomNavigationItem
|
|||
import androidx.compose.material.Scaffold
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.Providers
|
||||
import androidx.compose.runtime.ambientOf
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.ui.platform.setContent
|
||||
import androidx.navigation.compose.KEY_ROUTE
|
||||
|
@ -27,10 +25,9 @@ import dev.msfjarvis.lobsters.ui.HottestPosts
|
|||
import dev.msfjarvis.lobsters.ui.LobstersTheme
|
||||
import dev.msfjarvis.lobsters.ui.SavedPosts
|
||||
import dev.msfjarvis.lobsters.urllauncher.UrlLauncher
|
||||
import dev.msfjarvis.lobsters.urllauncher.UrlLauncherAmbient
|
||||
import javax.inject.Inject
|
||||
|
||||
val UrlLauncherAmbient = ambientOf<UrlLauncher> { error("Needs to be provided") }
|
||||
|
||||
@AndroidEntryPoint
|
||||
class MainActivity : AppCompatActivity() {
|
||||
@Inject lateinit var urlLauncher: UrlLauncher
|
||||
|
@ -53,8 +50,6 @@ fun LobstersApp(
|
|||
viewModel: LobstersViewModel
|
||||
) {
|
||||
val urlLauncher = UrlLauncherAmbient.current
|
||||
val posts = viewModel.posts.collectAsState()
|
||||
val lastIndex = posts.value.lastIndex
|
||||
val navController = rememberNavController()
|
||||
val destinations = arrayOf(Destination.Hottest, Destination.Saved)
|
||||
|
||||
|
@ -92,10 +87,10 @@ fun LobstersApp(
|
|||
) {
|
||||
NavHost(navController, startDestination = Destination.Hottest.route) {
|
||||
composable(Destination.Hottest.route) {
|
||||
HottestPosts(lastIndex = lastIndex, urlLauncher = urlLauncher , viewModel = viewModel)
|
||||
HottestPosts(viewModel = viewModel)
|
||||
}
|
||||
composable(Destination.Saved.route) {
|
||||
SavedPosts(urlLauncher = urlLauncher, viewModel = viewModel)
|
||||
SavedPosts(viewModel = viewModel)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,16 +9,16 @@ import androidx.compose.runtime.getValue
|
|||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import dev.msfjarvis.lobsters.data.LobstersViewModel
|
||||
import dev.msfjarvis.lobsters.urllauncher.UrlLauncher
|
||||
import dev.msfjarvis.lobsters.urllauncher.UrlLauncherAmbient
|
||||
|
||||
@Composable
|
||||
fun HottestPosts(
|
||||
lastIndex: Int,
|
||||
urlLauncher: UrlLauncher,
|
||||
viewModel: LobstersViewModel,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
val posts by viewModel.posts.collectAsState()
|
||||
val listState = rememberLazyListState()
|
||||
val urlLauncher = UrlLauncherAmbient.current
|
||||
|
||||
if (posts.isEmpty()) {
|
||||
EmptyList(saved = false)
|
||||
|
@ -26,9 +26,9 @@ fun HottestPosts(
|
|||
LazyColumnForIndexed(
|
||||
items = posts,
|
||||
state = listState,
|
||||
modifier = Modifier.padding(horizontal = 8.dp)
|
||||
modifier = Modifier.padding(horizontal = 8.dp).then(modifier)
|
||||
) { index, item ->
|
||||
if (lastIndex == index) {
|
||||
if (posts.lastIndex == index) {
|
||||
viewModel.getMorePosts()
|
||||
}
|
||||
LobstersItem(
|
||||
|
|
|
@ -9,15 +9,16 @@ import androidx.compose.runtime.getValue
|
|||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import dev.msfjarvis.lobsters.data.LobstersViewModel
|
||||
import dev.msfjarvis.lobsters.urllauncher.UrlLauncher
|
||||
import dev.msfjarvis.lobsters.urllauncher.UrlLauncherAmbient
|
||||
|
||||
@Composable
|
||||
fun SavedPosts(
|
||||
urlLauncher: UrlLauncher,
|
||||
viewModel: LobstersViewModel,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
val posts by viewModel.savedPosts.collectAsState()
|
||||
val listState = rememberLazyListState()
|
||||
val urlLauncher = UrlLauncherAmbient.current
|
||||
|
||||
if (posts.isEmpty()) {
|
||||
EmptyList(saved = true)
|
||||
|
@ -25,7 +26,7 @@ fun SavedPosts(
|
|||
LazyColumnFor(
|
||||
items = posts,
|
||||
state = listState,
|
||||
modifier = Modifier.padding(horizontal = 8.dp)
|
||||
modifier = Modifier.padding(horizontal = 8.dp).then(modifier)
|
||||
) { item ->
|
||||
LobstersItem(
|
||||
post = item,
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
package dev.msfjarvis.lobsters.urllauncher
|
||||
|
||||
import androidx.compose.runtime.ambientOf
|
||||
|
||||
val UrlLauncherAmbient = ambientOf<UrlLauncher> { error("Needs to be provided") }
|
Loading…
Add table
Add a link
Reference in a new issue