mirror of
https://github.com/bbara04/Purefin.git
synced 2026-07-23 19:26:50 +00:00
feat(search): update genre selection to support multiple selections in SearchScreen
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package hu.bbara.purefin.ui.screen.libraries.components
|
package hu.bbara.purefin.ui.screen.libraries.components
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
|
import androidx.compose.foundation.layout.BoxWithConstraints
|
||||||
import androidx.compose.foundation.layout.PaddingValues
|
import androidx.compose.foundation.layout.PaddingValues
|
||||||
import androidx.compose.foundation.lazy.grid.GridCells
|
import androidx.compose.foundation.lazy.grid.GridCells
|
||||||
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
|
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
|
||||||
@@ -16,18 +17,21 @@ fun LibrariesContent(
|
|||||||
onLibrarySelected: (LibraryUiModel) -> Unit,
|
onLibrarySelected: (LibraryUiModel) -> Unit,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
) {
|
) {
|
||||||
LazyVerticalGrid(
|
BoxWithConstraints(modifier = modifier) {
|
||||||
modifier = modifier,
|
val minCellSize = if (maxWidth >= 600.dp) 220.dp else 160.dp
|
||||||
columns = GridCells.Adaptive(minSize = 160.dp),
|
|
||||||
contentPadding = PaddingValues(16.dp),
|
LazyVerticalGrid(
|
||||||
horizontalArrangement = Arrangement.spacedBy(16.dp),
|
columns = GridCells.Adaptive(minSize = minCellSize),
|
||||||
verticalArrangement = Arrangement.spacedBy(16.dp),
|
contentPadding = PaddingValues(16.dp),
|
||||||
) {
|
horizontalArrangement = Arrangement.spacedBy(16.dp),
|
||||||
items(items, key = { it.id }) { item ->
|
verticalArrangement = Arrangement.spacedBy(16.dp),
|
||||||
LibraryListItem(
|
) {
|
||||||
uiModel = item,
|
items(items, key = { it.id }) { item ->
|
||||||
onClick = { onLibrarySelected(item) }
|
LibraryListItem(
|
||||||
)
|
uiModel = item,
|
||||||
|
onClick = { onLibrarySelected(item) }
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package hu.bbara.purefin.ui.screen.library
|
|||||||
|
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
|
import androidx.compose.foundation.layout.BoxWithConstraints
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.PaddingValues
|
import androidx.compose.foundation.layout.PaddingValues
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
@@ -67,39 +68,42 @@ internal fun LibraryPosterGrid(
|
|||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
viewModel: LibraryViewModel = hiltViewModel()
|
viewModel: LibraryViewModel = hiltViewModel()
|
||||||
) {
|
) {
|
||||||
LazyVerticalGrid(
|
BoxWithConstraints(modifier = modifier.background(MaterialTheme.colorScheme.background)) {
|
||||||
columns = GridCells.Adaptive(minSize = 120.dp),
|
val minCellSize = if (maxWidth >= 600.dp) 220.dp else 120.dp
|
||||||
contentPadding = PaddingValues(16.dp),
|
|
||||||
horizontalArrangement = Arrangement.spacedBy(16.dp),
|
LazyVerticalGrid(
|
||||||
verticalArrangement = Arrangement.spacedBy(16.dp),
|
columns = GridCells.Adaptive(minSize = minCellSize),
|
||||||
modifier = modifier.background(MaterialTheme.colorScheme.background)
|
contentPadding = PaddingValues(16.dp),
|
||||||
) {
|
horizontalArrangement = Arrangement.spacedBy(16.dp),
|
||||||
items(libraryItems, key = { item -> item.id }) { item ->
|
verticalArrangement = Arrangement.spacedBy(16.dp),
|
||||||
MediaImageCard(
|
) {
|
||||||
imageUrl = item.primaryImageUrl,
|
items(libraryItems, key = { item -> item.id }) { item ->
|
||||||
title = item.primaryText,
|
MediaImageCard(
|
||||||
subtitle = item.secondaryText,
|
imageUrl = item.primaryImageUrl,
|
||||||
onClick = {
|
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) {
|
when (item) {
|
||||||
is MovieUiModel -> viewModel.onMovieSelected(item.id)
|
is MovieUiModel, is EpisodeUiModel -> {
|
||||||
is SeriesUiModel -> viewModel.onSeriesSelected(item.id)
|
WatchStateBadge(
|
||||||
is EpisodeUiModel -> Unit
|
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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
package hu.bbara.purefin.ui.screen.library.components
|
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.Icons
|
||||||
|
import androidx.compose.material.icons.automirrored.outlined.ArrowBack
|
||||||
|
import androidx.compose.material.icons.outlined.FilterAlt
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import hu.bbara.purefin.ui.screen.home.components.DefaultTopBar
|
import hu.bbara.purefin.ui.screen.home.components.DefaultTopBar
|
||||||
import hu.bbara.purefin.ui.screen.home.components.DefaultTopBarIconButton
|
import hu.bbara.purefin.ui.screen.home.components.DefaultTopBarIconButton
|
||||||
@@ -17,6 +18,13 @@ fun LibraryTopBar(
|
|||||||
contentDescription = "Back",
|
contentDescription = "Back",
|
||||||
onClick = onBack,
|
onClick = onBack,
|
||||||
)
|
)
|
||||||
|
},
|
||||||
|
rightActions = {
|
||||||
|
DefaultTopBarIconButton(
|
||||||
|
imageVector = Icons.Outlined.FilterAlt,
|
||||||
|
contentDescription = "Search",
|
||||||
|
onClick = {},
|
||||||
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user