refactor click actions out of poser view

This commit is contained in:
Owen LeJeune
2022-02-11 12:26:38 -05:00
parent a7ba8cfb4c
commit 5523aa6e89
4 changed files with 40 additions and 32 deletions

View File

@@ -32,9 +32,8 @@ import com.owenlejeune.tvtime.ui.screens.DetailViewType
@OptIn(ExperimentalFoundationApi::class)
@Composable
fun PosterGrid(
appNavController: NavController,
type: DetailViewType,
fetchMedia: (MutableState<List<TmdbItem>>) -> Unit
fetchMedia: (MutableState<List<TmdbItem>>) -> Unit = {},
onClick: (Int) -> Unit = {}
) {
val mediaList = remember { mutableStateOf(emptyList<TmdbItem>()) }
fetchMedia(mediaList)
@@ -45,9 +44,8 @@ fun PosterGrid(
) {
listItems(mediaList.value) { item ->
PosterItem(
appNavController = appNavController,
mediaItem = item,
type = type
onClick = onClick
)
}
}
@@ -56,11 +54,10 @@ fun PosterGrid(
@Composable
fun PosterItem(
modifier: Modifier = Modifier,
appNavController: NavController,
mediaItem: TmdbItem?,
type: DetailViewType? = null,
width: Dp = 127.dp,
height: Dp = 190.dp
height: Dp = 190.dp,
onClick: (Int) -> Unit = {},
mediaItem: TmdbItem?
) {
val context = LocalContext.current
val poster = mediaItem?.let { TmdbUtils.getFullPosterPath(mediaItem) }
@@ -81,12 +78,8 @@ fun PosterItem(
.size(width = width, height = height)
.padding(5.dp)
.clickable {
type?.let {
mediaItem?.let {
appNavController.navigate(
"${MainNavItem.DetailView.route}/${type}/${mediaItem.id}"
)
}
onClick(mediaItem.id)
}
}
)

View File

@@ -43,7 +43,6 @@ fun DetailView(
) = createRefs()
PosterItem(
appNavController = appNavController,
mediaItem = mediaItem.value,
modifier = Modifier
.constrainAs(posterImage) {

View File

@@ -5,6 +5,7 @@ import androidx.compose.runtime.Composable
import androidx.navigation.NavController
import com.owenlejeune.tvtime.api.tmdb.MoviesService
import com.owenlejeune.tvtime.ui.components.PosterGrid
import com.owenlejeune.tvtime.ui.navigation.MainNavItem
import com.owenlejeune.tvtime.ui.screens.DetailViewType
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
@@ -17,7 +18,8 @@ fun MoviesTab(appNavController: NavController) {
// val moviesViewModel = viewModel(PopularMovieViewModel::class.java)
// val moviesList = moviesViewModel.moviePage
// val movieListItems: LazyPagingItems<PopularMovie> = moviesList.collectAsLazyPagingItems()
PosterGrid(appNavController = appNavController, type = DetailViewType.MOVIE) { moviesList ->
PosterGrid(
fetchMedia = { moviesList ->
val service = MoviesService()
CoroutineScope(Dispatchers.IO).launch {
val response = service.getPopularMovies()
@@ -27,5 +29,11 @@ fun MoviesTab(appNavController: NavController) {
}
}
}
},
onClick = { id ->
appNavController.navigate(
"${MainNavItem.DetailView.route}/${DetailViewType.MOVIE}/${id}"
)
}
)
}

View File

@@ -5,6 +5,7 @@ import androidx.compose.runtime.Composable
import androidx.navigation.NavController
import com.owenlejeune.tvtime.api.tmdb.TvService
import com.owenlejeune.tvtime.ui.components.PosterGrid
import com.owenlejeune.tvtime.ui.navigation.MainNavItem
import com.owenlejeune.tvtime.ui.screens.DetailViewType
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
@@ -14,7 +15,8 @@ import kotlinx.coroutines.withContext
@OptIn(ExperimentalFoundationApi::class)
@Composable
fun TvTab(appNavController: NavController) {
PosterGrid(appNavController = appNavController, type = DetailViewType.TV) { tvList ->
PosterGrid(
fetchMedia = { tvList ->
val service = TvService()
CoroutineScope(Dispatchers.IO).launch {
val response = service.getPopularTv()
@@ -24,5 +26,11 @@ fun TvTab(appNavController: NavController) {
}
}
}
},
onClick = { id ->
appNavController.navigate(
"${MainNavItem.DetailView.route}/${DetailViewType.TV}/${id}"
)
}
)
}