mirror of
https://github.com/owenlejeune/TVTime.git
synced 2025-11-23 12:10:59 -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)
|
@OptIn(ExperimentalFoundationApi::class)
|
||||||
@Composable
|
@Composable
|
||||||
fun PosterGrid(
|
fun PosterGrid(
|
||||||
appNavController: NavController,
|
fetchMedia: (MutableState<List<TmdbItem>>) -> Unit = {},
|
||||||
type: DetailViewType,
|
onClick: (Int) -> Unit = {}
|
||||||
fetchMedia: (MutableState<List<TmdbItem>>) -> Unit
|
|
||||||
) {
|
) {
|
||||||
val mediaList = remember { mutableStateOf(emptyList<TmdbItem>()) }
|
val mediaList = remember { mutableStateOf(emptyList<TmdbItem>()) }
|
||||||
fetchMedia(mediaList)
|
fetchMedia(mediaList)
|
||||||
@@ -45,9 +44,8 @@ fun PosterGrid(
|
|||||||
) {
|
) {
|
||||||
listItems(mediaList.value) { item ->
|
listItems(mediaList.value) { item ->
|
||||||
PosterItem(
|
PosterItem(
|
||||||
appNavController = appNavController,
|
|
||||||
mediaItem = item,
|
mediaItem = item,
|
||||||
type = type
|
onClick = onClick
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -56,11 +54,10 @@ fun PosterGrid(
|
|||||||
@Composable
|
@Composable
|
||||||
fun PosterItem(
|
fun PosterItem(
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
appNavController: NavController,
|
|
||||||
mediaItem: TmdbItem?,
|
|
||||||
type: DetailViewType? = null,
|
|
||||||
width: Dp = 127.dp,
|
width: Dp = 127.dp,
|
||||||
height: Dp = 190.dp
|
height: Dp = 190.dp,
|
||||||
|
onClick: (Int) -> Unit = {},
|
||||||
|
mediaItem: TmdbItem?
|
||||||
) {
|
) {
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
val poster = mediaItem?.let { TmdbUtils.getFullPosterPath(mediaItem) }
|
val poster = mediaItem?.let { TmdbUtils.getFullPosterPath(mediaItem) }
|
||||||
@@ -81,12 +78,8 @@ fun PosterItem(
|
|||||||
.size(width = width, height = height)
|
.size(width = width, height = height)
|
||||||
.padding(5.dp)
|
.padding(5.dp)
|
||||||
.clickable {
|
.clickable {
|
||||||
type?.let {
|
|
||||||
mediaItem?.let {
|
mediaItem?.let {
|
||||||
appNavController.navigate(
|
onClick(mediaItem.id)
|
||||||
"${MainNavItem.DetailView.route}/${type}/${mediaItem.id}"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -43,7 +43,6 @@ fun DetailView(
|
|||||||
) = createRefs()
|
) = createRefs()
|
||||||
|
|
||||||
PosterItem(
|
PosterItem(
|
||||||
appNavController = appNavController,
|
|
||||||
mediaItem = mediaItem.value,
|
mediaItem = mediaItem.value,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.constrainAs(posterImage) {
|
.constrainAs(posterImage) {
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import androidx.compose.runtime.Composable
|
|||||||
import androidx.navigation.NavController
|
import androidx.navigation.NavController
|
||||||
import com.owenlejeune.tvtime.api.tmdb.MoviesService
|
import com.owenlejeune.tvtime.api.tmdb.MoviesService
|
||||||
import com.owenlejeune.tvtime.ui.components.PosterGrid
|
import com.owenlejeune.tvtime.ui.components.PosterGrid
|
||||||
|
import com.owenlejeune.tvtime.ui.navigation.MainNavItem
|
||||||
import com.owenlejeune.tvtime.ui.screens.DetailViewType
|
import com.owenlejeune.tvtime.ui.screens.DetailViewType
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
@@ -17,7 +18,8 @@ fun MoviesTab(appNavController: NavController) {
|
|||||||
// val moviesViewModel = viewModel(PopularMovieViewModel::class.java)
|
// val moviesViewModel = viewModel(PopularMovieViewModel::class.java)
|
||||||
// val moviesList = moviesViewModel.moviePage
|
// val moviesList = moviesViewModel.moviePage
|
||||||
// val movieListItems: LazyPagingItems<PopularMovie> = moviesList.collectAsLazyPagingItems()
|
// val movieListItems: LazyPagingItems<PopularMovie> = moviesList.collectAsLazyPagingItems()
|
||||||
PosterGrid(appNavController = appNavController, type = DetailViewType.MOVIE) { moviesList ->
|
PosterGrid(
|
||||||
|
fetchMedia = { moviesList ->
|
||||||
val service = MoviesService()
|
val service = MoviesService()
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
val response = service.getPopularMovies()
|
val response = service.getPopularMovies()
|
||||||
@@ -27,5 +29,11 @@ fun MoviesTab(appNavController: NavController) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
onClick = { id ->
|
||||||
|
appNavController.navigate(
|
||||||
|
"${MainNavItem.DetailView.route}/${DetailViewType.MOVIE}/${id}"
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
)
|
||||||
}
|
}
|
||||||
@@ -5,6 +5,7 @@ import androidx.compose.runtime.Composable
|
|||||||
import androidx.navigation.NavController
|
import androidx.navigation.NavController
|
||||||
import com.owenlejeune.tvtime.api.tmdb.TvService
|
import com.owenlejeune.tvtime.api.tmdb.TvService
|
||||||
import com.owenlejeune.tvtime.ui.components.PosterGrid
|
import com.owenlejeune.tvtime.ui.components.PosterGrid
|
||||||
|
import com.owenlejeune.tvtime.ui.navigation.MainNavItem
|
||||||
import com.owenlejeune.tvtime.ui.screens.DetailViewType
|
import com.owenlejeune.tvtime.ui.screens.DetailViewType
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
@@ -14,7 +15,8 @@ import kotlinx.coroutines.withContext
|
|||||||
@OptIn(ExperimentalFoundationApi::class)
|
@OptIn(ExperimentalFoundationApi::class)
|
||||||
@Composable
|
@Composable
|
||||||
fun TvTab(appNavController: NavController) {
|
fun TvTab(appNavController: NavController) {
|
||||||
PosterGrid(appNavController = appNavController, type = DetailViewType.TV) { tvList ->
|
PosterGrid(
|
||||||
|
fetchMedia = { tvList ->
|
||||||
val service = TvService()
|
val service = TvService()
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
val response = service.getPopularTv()
|
val response = service.getPopularTv()
|
||||||
@@ -24,5 +26,11 @@ fun TvTab(appNavController: NavController) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
onClick = { id ->
|
||||||
|
appNavController.navigate(
|
||||||
|
"${MainNavItem.DetailView.route}/${DetailViewType.TV}/${id}"
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
)
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user