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.remember
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.NavHostController import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable 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.auth.presentation.AuthScreen
import ru.myitschool.work.booking.presentation.BookingScreen import ru.myitschool.work.booking.presentation.BookingScreen
import ru.myitschool.work.user.presentation.MainScreen import ru.myitschool.work.user.presentation.MainScreen
import ru.myitschool.work.user.presentation.MainViewModel
import ru.myitschool.work.util.DataStoreManager import ru.myitschool.work.util.DataStoreManager
@Composable @Composable
@@ -33,6 +35,7 @@ fun AppNavHost(
Screen.Auth Screen.Auth
} }
} }
NavHost( NavHost(
modifier = modifier, modifier = modifier,
enterTransition = { EnterTransition.None }, enterTransition = { EnterTransition.None },
@@ -43,15 +46,39 @@ fun AppNavHost(
composable<Screen.Auth> { composable<Screen.Auth> {
AuthScreen(navController = navController) 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> { composable<Screen.Book> {
BookingScreen( BookingScreen(
onNavigateBack = { onNavigateBack = {
navController.popBackStack() navController.popBackStack()
}, },
onBookingSuccess = { onBookingSuccess = {
navController.previousBackStackEntry
?.savedStateHandle
?.set("booking_success", true)
navController.popBackStack() navController.popBackStack()
} }
) )

View File

@@ -45,6 +45,10 @@ class MainViewModel : ViewModel() {
} }
} }
fun refreshAfterBooking() {
loadUser()
}
private fun loadUser() { private fun loadUser() {
viewModelScope.launch { viewModelScope.launch {
_mainState.update { it.copy(isLoading = true, error = null) } _mainState.update { it.copy(isLoading = true, error = null) }
@@ -84,20 +88,24 @@ class MainViewModel : ViewModel() {
private fun convertBookingsToDisplayItems(bookings: Map<String, String>): List<BookingDisplayItem> { 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( BookingDisplayItem(
date = date, date = displayDate,
place = place, place = place,
originalDate = date originalDate = serverDate
) )
}.sortedBy { item -> }.sortedBy { item ->
try { item.originalDate
dateFormat.parse(item.originalDate)?.time ?: 0L
} catch (e: Exception) {
0L
}
} }
} }