forked from Olympic/NTO-2025-Android-TeamTask
fix
This commit is contained in:
@@ -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()
|
||||
}
|
||||
)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user