This commit is contained in:
imglmd
2025-12-05 17:46:12 +03:00
parent 30ecbb6008
commit 0ae2cd0f4f
2 changed files with 46 additions and 11 deletions

View File

@@ -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<Screen.Auth> {
AuthScreen(navController = navController)
}
composable<Screen.Main> {
MainScreen(navController = navController)
composable<Screen.Main> { backStackEntry ->
val mainViewModel: MainViewModel = viewModel()
LaunchedEffect(navController.currentBackStackEntry) {
navController.currentBackStackEntry
?.savedStateHandle
?.getStateFlow<Boolean>("booking_success", false)
?.collect { bookingSuccess ->
if (bookingSuccess) {
mainViewModel.refreshAfterBooking()
navController.currentBackStackEntry
?.savedStateHandle
?.set("booking_success", false)
}
}
}
MainScreen(
viewModel = mainViewModel,
navController = navController
)
}
composable<Screen.Book> {
BookingScreen(
onNavigateBack = {
navController.popBackStack()
},
onBookingSuccess = {
navController.previousBackStackEntry
?.savedStateHandle
?.set("booking_success", true)
navController.popBackStack()
}
)

View File

@@ -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<String, String>): List<BookingDisplayItem> {
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
}
}