Move to ScreenModel

This commit is contained in:
Roshan Varughese 2024-09-28 14:28:39 +12:00 committed by AntsyLich
parent a7e650067e
commit b61a6adeb7
No known key found for this signature in database
2 changed files with 14 additions and 7 deletions

View File

@ -72,6 +72,7 @@ fun UpcomingScreenContent(
setSelectedYearMonth = setSelectedYearMonth,
onClickDay = { onClickDay(it, 0) },
onClickUpcoming = onClickUpcoming,
mangaCountMap = state.mangaCountMap,
)
} else {
UpcomingScreenSmallImpl(
@ -83,6 +84,7 @@ fun UpcomingScreenContent(
setSelectedYearMonth = setSelectedYearMonth,
onClickDay = { onClickDay(it, 1) },
onClickUpcoming = onClickUpcoming,
mangaCountMap = state.mangaCountMap,
)
}
}
@ -144,6 +146,7 @@ private fun UpcomingScreenSmallImpl(
setSelectedYearMonth: (YearMonth) -> Unit,
onClickDay: (LocalDate) -> Unit,
onClickUpcoming: (manga: Manga) -> Unit,
mangaCountMap: ImmutableMap<LocalDate, Int>,
) {
FastScrollLazyColumn(
contentPadding = paddingValues,
@ -175,8 +178,7 @@ private fun UpcomingScreenSmallImpl(
)
}
is UpcomingUIModel.Header -> {
val mangaCount = items.filterIsInstance<UpcomingUIModel.Item>()
.count { it.manga.expectedNextUpdate?.toLocalDate() == item.date }
val mangaCount = mangaCountMap[item.date] ?: 0
DateHeading(
date = item.date,
@ -198,6 +200,7 @@ private fun UpcomingScreenLargeImpl(
setSelectedYearMonth: (YearMonth) -> Unit,
onClickDay: (LocalDate) -> Unit,
onClickUpcoming: (manga: Manga) -> Unit,
mangaCountMap: ImmutableMap<LocalDate, Int>,
) {
TwoPanelBox(
modifier = Modifier.padding(paddingValues),
@ -229,8 +232,7 @@ private fun UpcomingScreenLargeImpl(
)
}
is UpcomingUIModel.Header -> {
val mangaCount = items.filterIsInstance<UpcomingUIModel.Item>()
.count { it.manga.expectedNextUpdate?.toLocalDate() == item.date }
val mangaCount = mangaCountMap[item.date] ?: 0
DateHeading(
date = item.date,

View File

@ -28,13 +28,17 @@ class UpcomingScreenModel(
init {
screenModelScope.launch {
getUpcomingManga.subscribe().collectLatest {
getUpcomingManga.subscribe().collectLatest { mangaList ->
mutableState.update { state ->
val upcomingItems = it.toUpcomingUIModels()
val upcomingItems = mangaList.toUpcomingUIModels()
val mangaCountMap = mangaList.groupBy { it.expectedNextUpdate?.toLocalDate() ?: LocalDate.MAX }
.mapValues { it.value.size }
.toImmutableMap()
state.copy(
items = upcomingItems,
events = it.toEvents(),
events = mangaList.toEvents(),
headerIndexes = upcomingItems.getHeaderIndexes(),
mangaCountMap = mangaCountMap
)
}
}
@ -83,5 +87,6 @@ class UpcomingScreenModel(
val items: ImmutableList<UpcomingUIModel> = persistentListOf(),
val events: ImmutableMap<LocalDate, Int> = persistentMapOf(),
val headerIndexes: ImmutableMap<LocalDate, Int> = persistentMapOf(),
val mangaCountMap: ImmutableMap<LocalDate, Int> = persistentMapOf(),
)
}