mirror of
https://github.com/tapframe/NuvioStreaming.git
synced 2026-07-26 22:42:17 +00:00
feat: Add HomeHeroReservedSpace component and update HomeScreen to conditionally display hero content
This commit is contained in:
parent
12eded17a7
commit
603d02071f
2 changed files with 35 additions and 14 deletions
|
|
@ -17,6 +17,7 @@ import com.nuvio.app.features.details.nextReleasedEpisodeAfter
|
|||
import com.nuvio.app.features.home.components.HomeCatalogRowSection
|
||||
import com.nuvio.app.features.home.components.HomeContinueWatchingSection
|
||||
import com.nuvio.app.features.home.components.HomeEmptyStateCard
|
||||
import com.nuvio.app.features.home.components.HomeHeroReservedSpace
|
||||
import com.nuvio.app.features.home.components.HomeHeroSection
|
||||
import com.nuvio.app.features.home.components.HomeSkeletonHero
|
||||
import com.nuvio.app.features.home.components.HomeSkeletonRow
|
||||
|
|
@ -128,9 +129,10 @@ fun HomeScreen(
|
|||
}
|
||||
|
||||
val hasActiveAddons = addonsUiState.addons.any { it.manifest != null }
|
||||
val showHeroSlot = homeSettingsUiState.heroEnabled
|
||||
val homeDataResolved = !homeUiState.isLoading &&
|
||||
(homeUiState.sections.isNotEmpty() || homeUiState.errorMessage != null)
|
||||
val showHeroSkeleton = homeSettingsUiState.heroEnabled &&
|
||||
val showHeroSkeleton = showHeroSlot &&
|
||||
hasActiveAddons &&
|
||||
homeUiState.heroItems.isEmpty() &&
|
||||
!homeDataResolved
|
||||
|
|
@ -138,21 +140,23 @@ fun HomeScreen(
|
|||
NuvioScreen(
|
||||
modifier = modifier,
|
||||
horizontalPadding = 0.dp,
|
||||
topPadding = if (homeUiState.heroItems.isNotEmpty() || showHeroSkeleton) 0.dp else null,
|
||||
topPadding = if (showHeroSlot) 0.dp else null,
|
||||
) {
|
||||
if (showHeroSkeleton) {
|
||||
if (showHeroSlot) {
|
||||
item {
|
||||
HomeSkeletonHero(
|
||||
modifier = Modifier.padding(bottom = 12.dp),
|
||||
)
|
||||
}
|
||||
} else if (homeUiState.heroItems.isNotEmpty()) {
|
||||
item {
|
||||
HomeHeroSection(
|
||||
items = homeUiState.heroItems,
|
||||
modifier = Modifier.padding(bottom = 0.dp),
|
||||
onItemClick = onPosterClick,
|
||||
)
|
||||
when {
|
||||
showHeroSkeleton -> HomeSkeletonHero(
|
||||
modifier = Modifier.padding(bottom = 12.dp),
|
||||
)
|
||||
|
||||
homeUiState.heroItems.isNotEmpty() -> HomeHeroSection(
|
||||
items = homeUiState.heroItems,
|
||||
modifier = Modifier.padding(bottom = 0.dp),
|
||||
onItemClick = onPosterClick,
|
||||
)
|
||||
|
||||
else -> HomeHeroReservedSpace()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -190,6 +190,23 @@ fun HomeHeroSection(
|
|||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun HomeHeroReservedSpace(modifier: Modifier = Modifier) {
|
||||
BoxWithConstraints(
|
||||
modifier = modifier
|
||||
.fillMaxWidth()
|
||||
.clip(RoundedCornerShape(bottomStart = 28.dp, bottomEnd = 28.dp)),
|
||||
) {
|
||||
val heroHeight = (maxWidth.value * 1.22f).dp.coerceIn(440.dp, 800.dp)
|
||||
|
||||
Spacer(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.height(heroHeight),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun HeroContentBlock(
|
||||
item: MetaPreview,
|
||||
|
|
|
|||
Loading…
Reference in a new issue