From 0a66c390eec72869e6b17b5a9de61f10bf490e56 Mon Sep 17 00:00:00 2001 From: pabloscloud <93644977+pabloscloud@users.noreply.github.com> Date: Sun, 14 Apr 2024 22:09:52 +0200 Subject: [PATCH] - fixes an issue where the app wouldn't switch to the correct year on tablets --- .../overload/ui/tabs/calendar/CalendarTab.kt | 114 +++++++++--------- 1 file changed, 56 insertions(+), 58 deletions(-) diff --git a/app/src/main/java/cloud/pablos/overload/ui/tabs/calendar/CalendarTab.kt b/app/src/main/java/cloud/pablos/overload/ui/tabs/calendar/CalendarTab.kt index 05ca9b8..bb1d772 100644 --- a/app/src/main/java/cloud/pablos/overload/ui/tabs/calendar/CalendarTab.kt +++ b/app/src/main/java/cloud/pablos/overload/ui/tabs/calendar/CalendarTab.kt @@ -55,14 +55,6 @@ fun CalendarTab( itemEvent: (ItemEvent) -> Unit, onNavigate: () -> Unit, ) { - val selectedYear by remember { mutableIntStateOf(itemState.selectedYearCalendar) } - - LaunchedEffect(selectedYear) { - if (itemState.selectedYearCalendar != LocalDate.now().year) { - itemEvent(ItemEvent.SetSelectedYearCalendar(LocalDate.now().year)) - } - } - Scaffold( topBar = { OverloadTopAppBar( @@ -77,6 +69,62 @@ fun CalendarTab( Box(modifier = Modifier.fillMaxSize()) { Column(modifier = Modifier.padding(paddingValues)) { AnimatedVisibility(visible = contentType == OverloadContentType.DUAL_PANE) { + val selectedYear by remember { mutableIntStateOf(itemState.selectedYearCalendar) } + val selectedDay = getLocalDate(itemState.selectedDayCalendar) + + val firstYear = + if (itemState.items.isEmpty()) { + LocalDate.now().year + } else { + itemState.items.minByOrNull { it.startTime } + ?.let { convertStringToLocalDateTime(it.startTime).year } + ?: LocalDate.now().year + } + val firstDay = LocalDate.of(firstYear, 1, 1) + val lastDay = LocalDate.now() + + val daysCount = ChronoUnit.DAYS.between(firstDay, lastDay).toInt() + 1 + + var scrollToPage = true + val pagerState = + rememberPagerState( + initialPage = daysCount, + initialPageOffsetFraction = 0f, + pageCount = { daysCount }, + ) + + LaunchedEffect(selectedYear) { + if (itemState.selectedYearCalendar != selectedDay.year) { + itemEvent(ItemEvent.SetSelectedYearCalendar(selectedDay.year)) + } + } + + LaunchedEffect(pagerState.currentPage) { + scrollToPage = false + itemEvent( + ItemEvent.SetSelectedDayCalendar( + LocalDate.now() + .minusDays((daysCount - pagerState.currentPage - 1).toLong()) + .toString(), + ), + ) + } + + LaunchedEffect(itemState.selectedDayCalendar) { + if (scrollToPage) { + val highlightedDay = LocalDate.now().minusDays((daysCount - pagerState.currentPage - 1).toLong()) + if (getLocalDate(itemState.selectedDayCalendar) != highlightedDay) { + pagerState.scrollToPage(ChronoUnit.DAYS.between(firstDay, selectedDay).toInt()) + } + } else { + scrollToPage = true + } + + if (selectedYear != selectedDay.year) { + itemEvent(ItemEvent.SetSelectedYearCalendar(selectedDay.year)) + } + } + Row(modifier = Modifier.fillMaxSize()) { Box( modifier = Modifier.weight(1f), @@ -103,56 +151,6 @@ fun CalendarTab( Box( modifier = Modifier.weight(1f), ) { - val selectedDay = getLocalDate(itemState.selectedDayCalendar) - - val firstYear = - if (itemState.items.isEmpty()) { - LocalDate.now().year - } else { - itemState.items.minByOrNull { it.startTime } - ?.let { convertStringToLocalDateTime(it.startTime).year } - ?: LocalDate.now().year - } - - val firstDay = LocalDate.of(firstYear, 1, 1) - val lastDay = LocalDate.now() - val daysCount = ChronoUnit.DAYS.between(firstDay, lastDay).toInt() + 1 - - var scrollToPage = true - - val pagerState = - rememberPagerState( - initialPage = daysCount, - initialPageOffsetFraction = 0f, - pageCount = { daysCount }, - ) - - LaunchedEffect(pagerState.currentPage) { - scrollToPage = false - itemEvent( - ItemEvent.SetSelectedDayCalendar( - LocalDate.now() - .minusDays((daysCount - pagerState.currentPage - 1).toLong()) - .toString(), - ), - ) - - if (selectedYear != selectedDay.year) { - itemEvent(ItemEvent.SetSelectedYearCalendar(selectedDay.year)) - } - } - - LaunchedEffect(itemState.selectedDayCalendar) { - if (scrollToPage) { - val highlightedDay = LocalDate.now().minusDays((daysCount - pagerState.currentPage - 1).toLong()) - if (getLocalDate(itemState.selectedDayCalendar) != highlightedDay) { - pagerState.scrollToPage(ChronoUnit.DAYS.between(firstDay, selectedDay).toInt()) - } - } else { - scrollToPage = true - } - } - HorizontalPager( state = pagerState, ) { page ->