mirror of
https://github.com/owenlejeune/TVTime.git
synced 2025-11-23 04:00:53 -05:00
refactor click actions out of poser view
This commit is contained in:
@@ -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}"
|
||||
)
|
||||
}
|
||||
mediaItem?.let {
|
||||
onClick(mediaItem.id)
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
@@ -43,7 +43,6 @@ fun DetailView(
|
||||
) = createRefs()
|
||||
|
||||
PosterItem(
|
||||
appNavController = appNavController,
|
||||
mediaItem = mediaItem.value,
|
||||
modifier = Modifier
|
||||
.constrainAs(posterImage) {
|
||||
|
||||
@@ -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,15 +18,22 @@ 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 ->
|
||||
val service = MoviesService()
|
||||
CoroutineScope(Dispatchers.IO).launch {
|
||||
val response = service.getPopularMovies()
|
||||
if (response.isSuccessful) {
|
||||
withContext(Dispatchers.Main) {
|
||||
moviesList.value = response.body()!!.movies
|
||||
PosterGrid(
|
||||
fetchMedia = { moviesList ->
|
||||
val service = MoviesService()
|
||||
CoroutineScope(Dispatchers.IO).launch {
|
||||
val response = service.getPopularMovies()
|
||||
if (response.isSuccessful) {
|
||||
withContext(Dispatchers.Main) {
|
||||
moviesList.value = response.body()!!.movies
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
onClick = { id ->
|
||||
appNavController.navigate(
|
||||
"${MainNavItem.DetailView.route}/${DetailViewType.MOVIE}/${id}"
|
||||
)
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -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,15 +15,22 @@ import kotlinx.coroutines.withContext
|
||||
@OptIn(ExperimentalFoundationApi::class)
|
||||
@Composable
|
||||
fun TvTab(appNavController: NavController) {
|
||||
PosterGrid(appNavController = appNavController, type = DetailViewType.TV) { tvList ->
|
||||
val service = TvService()
|
||||
CoroutineScope(Dispatchers.IO).launch {
|
||||
val response = service.getPopularTv()
|
||||
if (response.isSuccessful) {
|
||||
withContext(Dispatchers.Main) {
|
||||
tvList.value = response.body()!!.tv
|
||||
PosterGrid(
|
||||
fetchMedia = { tvList ->
|
||||
val service = TvService()
|
||||
CoroutineScope(Dispatchers.IO).launch {
|
||||
val response = service.getPopularTv()
|
||||
if (response.isSuccessful) {
|
||||
withContext(Dispatchers.Main) {
|
||||
tvList.value = response.body()!!.tv
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
onClick = { id ->
|
||||
appNavController.navigate(
|
||||
"${MainNavItem.DetailView.route}/${DetailViewType.TV}/${id}"
|
||||
)
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user