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.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()
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user