From 0ae2cd0f4fca79a403d924d0f80b9c4fa2485afe Mon Sep 17 00:00:00 2001 From: imglmd Date: Fri, 5 Dec 2025 17:46:12 +0300 Subject: [PATCH] fix --- .../ru/myitschool/work/ui/NavigationGraph.kt | 31 +++++++++++++++++-- .../work/user/presentation/MainViewModel.kt | 26 ++++++++++------ 2 files changed, 46 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/ru/myitschool/work/ui/NavigationGraph.kt b/app/src/main/java/ru/myitschool/work/ui/NavigationGraph.kt index 21ada0e..3b35835 100644 --- a/app/src/main/java/ru/myitschool/work/ui/NavigationGraph.kt +++ b/app/src/main/java/ru/myitschool/work/ui/NavigationGraph.kt @@ -9,6 +9,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier +import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable @@ -16,6 +17,7 @@ import androidx.navigation.compose.rememberNavController import ru.myitschool.work.auth.presentation.AuthScreen import ru.myitschool.work.booking.presentation.BookingScreen import ru.myitschool.work.user.presentation.MainScreen +import ru.myitschool.work.user.presentation.MainViewModel import ru.myitschool.work.util.DataStoreManager @Composable @@ -33,6 +35,7 @@ fun AppNavHost( Screen.Auth } } + NavHost( modifier = modifier, enterTransition = { EnterTransition.None }, @@ -43,15 +46,39 @@ fun AppNavHost( composable { AuthScreen(navController = navController) } - composable { - MainScreen(navController = navController) + + composable { backStackEntry -> + val mainViewModel: MainViewModel = viewModel() + + LaunchedEffect(navController.currentBackStackEntry) { + navController.currentBackStackEntry + ?.savedStateHandle + ?.getStateFlow("booking_success", false) + ?.collect { bookingSuccess -> + if (bookingSuccess) { + mainViewModel.refreshAfterBooking() + navController.currentBackStackEntry + ?.savedStateHandle + ?.set("booking_success", false) + } + } + } + + MainScreen( + viewModel = mainViewModel, + navController = navController + ) } + composable { BookingScreen( onNavigateBack = { navController.popBackStack() }, onBookingSuccess = { + navController.previousBackStackEntry + ?.savedStateHandle + ?.set("booking_success", true) navController.popBackStack() } ) diff --git a/app/src/main/java/ru/myitschool/work/user/presentation/MainViewModel.kt b/app/src/main/java/ru/myitschool/work/user/presentation/MainViewModel.kt index 26f6802..510e5f1 100644 --- a/app/src/main/java/ru/myitschool/work/user/presentation/MainViewModel.kt +++ b/app/src/main/java/ru/myitschool/work/user/presentation/MainViewModel.kt @@ -45,6 +45,10 @@ class MainViewModel : ViewModel() { } } + fun refreshAfterBooking() { + loadUser() + } + private fun loadUser() { viewModelScope.launch { _mainState.update { it.copy(isLoading = true, error = null) } @@ -84,20 +88,24 @@ class MainViewModel : ViewModel() { private fun convertBookingsToDisplayItems(bookings: Map): List { - val dateFormat = SimpleDateFormat("dd.MM.yyyy", Locale.getDefault()) + val serverFormat = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()) + val displayFormat = SimpleDateFormat("dd.MM.yyyy", Locale.getDefault()) + + return bookings.map { (serverDate, place) -> + val displayDate = try { + val parsed = serverFormat.parse(serverDate) + displayFormat.format(parsed!!) + } catch (e: Exception) { + serverDate + } - return bookings.map { (date, place) -> BookingDisplayItem( - date = date, + date = displayDate, place = place, - originalDate = date + originalDate = serverDate ) }.sortedBy { item -> - try { - dateFormat.parse(item.originalDate)?.time ?: 0L - } catch (e: Exception) { - 0L - } + item.originalDate } }