commit d0cab7a6ae631441e0b887aece983b4069e4127e parent 97b116890132ecb990b41388be723957ac3d189d Author: MTRNord <MTRNord@users.noreply.github.com> Date: Fri, 1 Aug 2025 23:18:26 +0200 Fix the +N navigation on the month view Diffstat:
4 files changed, 37 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/space/midnightthoughts/nordiccalendar/MainActivity.kt b/app/src/main/java/space/midnightthoughts/nordiccalendar/MainActivity.kt @@ -76,7 +76,7 @@ sealed class Destinations(val route: String) { * @param tab The index of the selected tab (default is 0). * @param date The date to display in the calendar (optional). */ - object Calendar : Destinations("calendar?tab={tab}") + object Calendar : Destinations("calendar?tab={tab}&date={date}") object Settings : Destinations("settings") object About : Destinations("about") object EventDetails : Destinations("eventDetails/{eventId}") diff --git a/app/src/main/java/space/midnightthoughts/nordiccalendar/screens/CalendarScreen.kt b/app/src/main/java/space/midnightthoughts/nordiccalendar/screens/CalendarScreen.kt @@ -14,6 +14,7 @@ import androidx.compose.material3.pulltorefresh.PullToRefreshBox import androidx.compose.material3.pulltorefresh.PullToRefreshDefaults.Indicator import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.remember @@ -57,6 +58,16 @@ fun CalendarScreen( */ val calendarViewModel: CalendarViewModel = hiltViewModel() + // Get tab and date parameters from navigation and set them in the ViewModel + val backStackEntry = navController.currentBackStackEntry + val tabFromNav = backStackEntry?.arguments?.getInt("tab") ?: 0 + val dateFromNav = backStackEntry?.arguments?.getString("date") + + // Use LaunchedEffect to handle navigation parameters only once + LaunchedEffect(backStackEntry?.destination?.route, tabFromNav, dateFromNav) { + calendarViewModel.setTabAndDate(tabFromNav, dateFromNav) + } + /** * State holding the currently selected tab (0=month, 1=week, 2=day). */ diff --git a/app/src/main/java/space/midnightthoughts/nordiccalendar/screens/MonthView.kt b/app/src/main/java/space/midnightthoughts/nordiccalendar/screens/MonthView.kt @@ -269,7 +269,7 @@ private fun MonthDayCell( shape = RoundedCornerShape(4.dp) ) .clickable { - // Navigate to calendar with day view tab when clicking "+N more" + // Navigate to calendar with day view tab and specific date date?.let { navController.navigate("calendar?tab=2&date=${it}") { launchSingleTop = true diff --git a/app/src/main/java/space/midnightthoughts/nordiccalendar/viewmodels/CalendarViewModel.kt b/app/src/main/java/space/midnightthoughts/nordiccalendar/viewmodels/CalendarViewModel.kt @@ -1,6 +1,7 @@ package space.midnightthoughts.nordiccalendar.viewmodels import android.content.Context +import android.util.Log import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope @@ -16,6 +17,7 @@ import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch import space.midnightthoughts.nordiccalendar.data.CalendarRepository import space.midnightthoughts.nordiccalendar.util.Event +import java.time.LocalDate import javax.inject.Inject /** @@ -175,4 +177,26 @@ class CalendarViewModel @Inject constructor( currentViewModel.refreshEvents() _isRefreshing.value = false } + + fun setTabAndDate(tabFromNav: Int, dateFromNav: String?) { + setTab(tabFromNav) + dateFromNav?.let { date -> + when (tabFromNav) { + 0 -> {} + 1 -> {} + 2 -> { + val parsedLocalDate: LocalDate = try { + LocalDate.parse(date) + } catch (e: Exception) { + Log.e("CalendarViewModel", "Invalid date format: $date", e) + LocalDate.now() + } + dayViewModel.navigateToDate(parsedLocalDate) + } + } + } ?: run { + // If no date is provided, navigate to today + currentViewModel.navigateToToday() + } + } }