diff --git a/app/src/main/java/ru/myitschool/work/data/model/BookingInfoResponse.kt b/app/src/main/java/ru/myitschool/work/data/model/BookingInfoResponse.kt index 5baf4b2..271ca96 100644 --- a/app/src/main/java/ru/myitschool/work/data/model/BookingInfoResponse.kt +++ b/app/src/main/java/ru/myitschool/work/data/model/BookingInfoResponse.kt @@ -4,7 +4,7 @@ import kotlinx.serialization.Serializable @Serializable data class BookingInfoResponse( - val dates: Map> + val dates: Map>? = null // can be nil because web api ) @Serializable diff --git a/app/src/main/java/ru/myitschool/work/ui/screen/book/BookScreen.kt b/app/src/main/java/ru/myitschool/work/ui/screen/book/BookScreen.kt index b3cdb4c..b253bf3 100644 --- a/app/src/main/java/ru/myitschool/work/ui/screen/book/BookScreen.kt +++ b/app/src/main/java/ru/myitschool/work/ui/screen/book/BookScreen.kt @@ -93,7 +93,7 @@ fun BookScreen( } is BookState.Data -> { - if (currentState.error != null && currentState.dates.isEmpty()) { + if (currentState.error != null) { Scaffold( topBar = { TopAppBar( @@ -185,17 +185,6 @@ private fun Content( .fillMaxSize() .verticalScroll(rememberScrollState()) ) { - if (state.error != null) { - Text( - text = state.error, - color = MaterialTheme.colorScheme.error, - modifier = Modifier - .testTag(TestIds.Book.ERROR) - .fillMaxWidth() - .padding(bottom = 16.dp), - textAlign = TextAlign.Center - ) - } ScrollableTabRow( selectedTabIndex = state.selectedDateIndex, diff --git a/app/src/main/java/ru/myitschool/work/ui/screen/book/BookViewModel.kt b/app/src/main/java/ru/myitschool/work/ui/screen/book/BookViewModel.kt index 9b8e101..6c02de1 100644 --- a/app/src/main/java/ru/myitschool/work/ui/screen/book/BookViewModel.kt +++ b/app/src/main/java/ru/myitschool/work/ui/screen/book/BookViewModel.kt @@ -17,7 +17,6 @@ import java.text.SimpleDateFormat import java.util.Date import java.util.Locale - class BookViewModel(private val bookRepo: BookRepository) : ViewModel() { private val _uiState = MutableStateFlow(BookState.Loading) val uiState: StateFlow = _uiState.asStateFlow() @@ -72,7 +71,9 @@ class BookViewModel(private val bookRepo: BookRepository) : ViewModel() { bookRepo.getAvailableBookings().fold( onSuccess = { response -> - val dateItems = response.dates.entries + val datesMap = response.dates ?: emptyMap() + + val dateItems = datesMap.entries .filter { (_, places) -> places.isNotEmpty() } .sortedBy { (date, _) -> parseDate(date) } .map { (dateString, places) -> @@ -103,7 +104,7 @@ class BookViewModel(private val bookRepo: BookRepository) : ViewModel() { onFailure = { error -> _uiState.update { BookState.Data( - error = error.message ?: "data load err" + error = error.message ?: "Ошибка загрузки данных" ) } } @@ -134,7 +135,7 @@ class BookViewModel(private val bookRepo: BookRepository) : ViewModel() { onFailure = { error -> _uiState.update { state.copy( - error = error.message ?: "book error" + error = error.message ?: "Ошибка бронирования" ) } } @@ -142,14 +143,14 @@ class BookViewModel(private val bookRepo: BookRepository) : ViewModel() { } else { _uiState.update { state.copy( - error = "place !selected" + error = "Место не выбрано" ) } } } else { _uiState.update { state.copy( - error = "select place for booking" + error = "Выберите место для бронирования" ) } } @@ -183,7 +184,6 @@ sealed interface BookAction { object NavigateBackWithRefresh : BookAction } - class BookViewModelFactory(private val context: Context) : ViewModelProvider.Factory { override fun create(modelClass: Class): T { if (modelClass.isAssignableFrom(BookViewModel::class.java)) { diff --git a/app/src/main/java/ru/myitschool/work/ui/screen/main/MainScreen.kt b/app/src/main/java/ru/myitschool/work/ui/screen/main/MainScreen.kt index c501629..7003cad 100644 --- a/app/src/main/java/ru/myitschool/work/ui/screen/main/MainScreen.kt +++ b/app/src/main/java/ru/myitschool/work/ui/screen/main/MainScreen.kt @@ -168,7 +168,6 @@ fun MainScreen( } } - // Кнопки действий Row( modifier = Modifier .fillMaxWidth() @@ -205,7 +204,6 @@ fun MainScreen( Spacer(modifier = Modifier.height(8.dp)) - // Заголовок списка бронирований if (currentState.bookings.isNotEmpty()) { Text( text = "Мои бронирования:", @@ -226,7 +224,6 @@ fun MainScreen( } } - // Список бронирований LazyColumn( modifier = Modifier .fillMaxWidth() diff --git a/app/src/main/java/ru/myitschool/work/ui/screen/main/MainViewModel.kt b/app/src/main/java/ru/myitschool/work/ui/screen/main/MainViewModel.kt index 5e75bd2..c63a509 100644 --- a/app/src/main/java/ru/myitschool/work/ui/screen/main/MainViewModel.kt +++ b/app/src/main/java/ru/myitschool/work/ui/screen/main/MainViewModel.kt @@ -16,11 +16,10 @@ import java.time.format.DateTimeFormatter import ru.myitschool.work.data.repo.AuthRepository import ru.myitschool.work.data.repo.MainRepository - - -class MainViewModel(private val authRepo: AuthRepository, - private val mainRepo: MainRepository) - : ViewModel() { +class MainViewModel( + private val authRepo: AuthRepository, + private val mainRepo: MainRepository +) : ViewModel() { private val _uiState = MutableStateFlow(MainState.Loading) val uiState: StateFlow = _uiState.asStateFlow() @@ -54,7 +53,6 @@ class MainViewModel(private val authRepo: AuthRepository, } } is MainIntent.ItemClick -> { - } } } @@ -89,7 +87,9 @@ class MainViewModel(private val authRepo: AuthRepository, onFailure = { error -> _uiState.update { MainState.Data( - error = error.message ?: "data load err" + userName = authRepo.getUserInfo()?.name ?: "", + userPhotoUrl = authRepo.getUserInfo()?.photo, + error = error.message ?: "data load error" ) } }