Skip to content

Commit 670f56e

Browse files
committed
Add day and week trending filters
1 parent 6553ca1 commit 670f56e

3 files changed

Lines changed: 17 additions & 2 deletions

File tree

core/designsystem/src/main/res/values/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@
4848
<string name="featured_film">FEATURED FILM</string>
4949
<string name="featured_series">FEATURED SERIES</string>
5050
<string name="trending">Trending this week</string>
51+
<string name="trending_day">Today</string>
52+
<string name="trending_week">This week</string>
5153
<string name="view_details">View details</string>
5254
<string name="try_again">Try again</string>
5355
<string name="unable_home">Unable to load Home</string>

feature/home/src/main/java/com/lamndt/smartmovie/feature/home/HomeScreen.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import androidx.compose.foundation.shape.RoundedCornerShape
2020
import androidx.compose.material.icons.Icons
2121
import androidx.compose.material.icons.automirrored.filled.ArrowForward
2222
import androidx.compose.material3.Button
23+
import androidx.compose.material3.FilterChip
2324
import androidx.compose.material3.ButtonDefaults
2425
import androidx.compose.material3.Icon
2526
import androidx.compose.material3.MaterialTheme
@@ -67,14 +68,15 @@ fun HomeRoute(
6768
homeViewModel: HomeViewModel = viewModel(factory = HomeViewModel.factory(catalog, language)),
6869
) {
6970
val state by homeViewModel.state.collectAsStateWithLifecycle()
70-
HomeScreen(state, images, homeViewModel::selectMediaType, homeViewModel::refresh, onTitleClick, modifier)
71+
HomeScreen(state, images, homeViewModel::selectMediaType, homeViewModel::selectTrendingWindow, homeViewModel::refresh, onTitleClick, modifier)
7172
}
7273

7374
@Composable
7475
fun HomeScreen(
7576
state: HomeUiState,
7677
images: ImageUrlFactory,
7778
onMediaType: (MediaType) -> Unit,
79+
onTrendingWindow: (String) -> Unit,
7880
onRetry: () -> Unit,
7981
onTitleClick: (TitleSummary) -> Unit,
8082
modifier: Modifier = Modifier,
@@ -94,6 +96,10 @@ fun HomeScreen(
9496
)
9597
Spacer(Modifier.height(14.dp))
9698
MediaTypeSelector(state.mediaType, onMediaType, Modifier.width(330.dp).fillMaxWidth())
99+
Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
100+
FilterChip(selected = state.trendingWindow == "day", onClick = { onTrendingWindow("day") }, label = { Text(stringResource(R.string.trending_day)) })
101+
FilterChip(selected = state.trendingWindow == "week", onClick = { onTrendingWindow("week") }, label = { Text(stringResource(R.string.trending_week)) })
102+
}
97103
}
98104
}
99105
when (val feed = state.feed) {

feature/home/src/main/java/com/lamndt/smartmovie/feature/home/HomeViewModel.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import kotlinx.coroutines.launch
2020

2121
data class HomeUiState(
2222
val mediaType: MediaType = MediaType.MOVIE,
23+
val trendingWindow: String = "week",
2324
val feed: Loadable<HomeFeed> = Loadable.Idle,
2425
val trending: Loadable<List<TitleSummary>> = Loadable.Idle,
2526
)
@@ -40,14 +41,20 @@ class HomeViewModel(
4041
refresh()
4142
}
4243

44+
fun selectTrendingWindow(window: String) {
45+
if (window !in setOf("day", "week") || window == mutableState.value.trendingWindow) return
46+
mutableState.update { it.copy(trendingWindow = window) }
47+
refresh()
48+
}
49+
4350
fun refresh() {
4451
loadJob?.cancel()
4552
loadJob = viewModelScope.launch {
4653
mutableState.update { it.copy(feed = Loadable.Loading) }
4754
try {
4855
val result = catalog.home(mutableState.value.mediaType, language)
4956
val trending = (catalog as? CatalogV2Repository)?.let {
50-
runCatching { it.trending(mutableState.value.mediaType.wireValue, "week", 1, language, false) }
57+
runCatching { it.trending(mutableState.value.mediaType.wireValue, mutableState.value.trendingWindow, 1, language, false) }
5158
.getOrNull()?.results.orEmpty().mapNotNull { (it as? CatalogEntity.Title)?.value }
5259
}.orEmpty()
5360
mutableState.update { it.copy(feed = Loadable.Loaded(result), trending = Loadable.Loaded(trending)) }

0 commit comments

Comments
 (0)