feat(search): update genre selection to support multiple selections in SearchScreen

This commit is contained in:
2026-05-02 21:38:56 +02:00
parent f957098369
commit ae4c2b34f4
3 changed files with 59 additions and 43 deletions

View File

@@ -1,6 +1,7 @@
package hu.bbara.purefin.ui.screen.libraries.components
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.lazy.grid.GridCells
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
@@ -16,18 +17,21 @@ fun LibrariesContent(
onLibrarySelected: (LibraryUiModel) -> Unit,
modifier: Modifier = Modifier,
) {
LazyVerticalGrid(
modifier = modifier,
columns = GridCells.Adaptive(minSize = 160.dp),
contentPadding = PaddingValues(16.dp),
horizontalArrangement = Arrangement.spacedBy(16.dp),
verticalArrangement = Arrangement.spacedBy(16.dp),
) {
items(items, key = { it.id }) { item ->
LibraryListItem(
uiModel = item,
onClick = { onLibrarySelected(item) }
)
BoxWithConstraints(modifier = modifier) {
val minCellSize = if (maxWidth >= 600.dp) 220.dp else 160.dp
LazyVerticalGrid(
columns = GridCells.Adaptive(minSize = minCellSize),
contentPadding = PaddingValues(16.dp),
horizontalArrangement = Arrangement.spacedBy(16.dp),
verticalArrangement = Arrangement.spacedBy(16.dp),
) {
items(items, key = { it.id }) { item ->
LibraryListItem(
uiModel = item,
onClick = { onLibrarySelected(item) }
)
}
}
}
}

View File

@@ -2,6 +2,7 @@ package hu.bbara.purefin.ui.screen.library
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize
@@ -67,39 +68,42 @@ internal fun LibraryPosterGrid(
modifier: Modifier = Modifier,
viewModel: LibraryViewModel = hiltViewModel()
) {
LazyVerticalGrid(
columns = GridCells.Adaptive(minSize = 120.dp),
contentPadding = PaddingValues(16.dp),
horizontalArrangement = Arrangement.spacedBy(16.dp),
verticalArrangement = Arrangement.spacedBy(16.dp),
modifier = modifier.background(MaterialTheme.colorScheme.background)
) {
items(libraryItems, key = { item -> item.id }) { item ->
MediaImageCard(
imageUrl = item.primaryImageUrl,
title = item.primaryText,
subtitle = item.secondaryText,
onClick = {
BoxWithConstraints(modifier = modifier.background(MaterialTheme.colorScheme.background)) {
val minCellSize = if (maxWidth >= 600.dp) 220.dp else 120.dp
LazyVerticalGrid(
columns = GridCells.Adaptive(minSize = minCellSize),
contentPadding = PaddingValues(16.dp),
horizontalArrangement = Arrangement.spacedBy(16.dp),
verticalArrangement = Arrangement.spacedBy(16.dp),
) {
items(libraryItems, key = { item -> item.id }) { item ->
MediaImageCard(
imageUrl = item.primaryImageUrl,
title = item.primaryText,
subtitle = item.secondaryText,
onClick = {
when (item) {
is MovieUiModel -> viewModel.onMovieSelected(item.id)
is SeriesUiModel -> viewModel.onSeriesSelected(item.id)
is EpisodeUiModel -> Unit
}
}
) {
when (item) {
is MovieUiModel -> viewModel.onMovieSelected(item.id)
is SeriesUiModel -> viewModel.onSeriesSelected(item.id)
is EpisodeUiModel -> Unit
is MovieUiModel, is EpisodeUiModel -> {
WatchStateBadge(
size = 28,
modifier = Modifier
.align(Alignment.TopEnd)
.padding(8.dp),
watched = item.watched,
started = (item.progress ?: 0f) > 0f
)
}
else -> Unit
}
}
) {
when (item) {
is MovieUiModel, is EpisodeUiModel -> {
WatchStateBadge(
size = 28,
modifier = Modifier
.align(Alignment.TopEnd)
.padding(8.dp),
watched = item.watched,
started = (item.progress ?: 0f) > 0f
)
}
else -> Unit
}
}
}
}

View File

@@ -1,7 +1,8 @@
package hu.bbara.purefin.ui.screen.library.components
import androidx.compose.material.icons.automirrored.outlined.ArrowBack
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.outlined.ArrowBack
import androidx.compose.material.icons.outlined.FilterAlt
import androidx.compose.runtime.Composable
import hu.bbara.purefin.ui.screen.home.components.DefaultTopBar
import hu.bbara.purefin.ui.screen.home.components.DefaultTopBarIconButton
@@ -17,6 +18,13 @@ fun LibraryTopBar(
contentDescription = "Back",
onClick = onBack,
)
},
rightActions = {
DefaultTopBarIconButton(
imageVector = Icons.Outlined.FilterAlt,
contentDescription = "Search",
onClick = {},
)
}
)
}