From 98cbfbeed2b54edb79827fb679333fe24ee5acb0 Mon Sep 17 00:00:00 2001 From: student-a-suhoruchkin Date: Thu, 26 Feb 2026 14:58:05 +0300 Subject: [PATCH] Checkpoint 3.ui.2 --- .../work/ui/screen/meetings/MeetingsScreen.kt | 81 +++++++++++++++++-- .../ui/screen/meetings/MeetingsViewModel.kt | 6 -- 2 files changed, 75 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/ru/myitschool/work/ui/screen/meetings/MeetingsScreen.kt b/app/src/main/java/ru/myitschool/work/ui/screen/meetings/MeetingsScreen.kt index 1b001af..b876fcd 100644 --- a/app/src/main/java/ru/myitschool/work/ui/screen/meetings/MeetingsScreen.kt +++ b/app/src/main/java/ru/myitschool/work/ui/screen/meetings/MeetingsScreen.kt @@ -1,16 +1,35 @@ package ru.myitschool.work.ui.screen.meetings +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.testTag +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel +import ru.myitschool.work.R +import ru.myitschool.work.core.TestIds +import ru.myitschool.work.ui.custom.component.RoundCustomButton import ru.myitschool.work.ui.screen.book.BookAction import ru.myitschool.work.ui.screen.book.BookViewModel +import ru.myitschool.work.ui.screen.main.MainIntent import ru.myitschool.work.ui.screen.main.MainResult @Composable @@ -23,12 +42,11 @@ fun MeetingsScreen( Modifier .fillMaxSize() ) { - when (val currentState = state) { is MeetingsState.Data -> MeetingsData(currentState) is MeetingsState.Empty -> MeetingsEmpty(currentState) - is MeetingsState.Error -> TODO() - is MeetingsState.Loading -> TODO() + is MeetingsState.Error -> MeetingsError(viewModel, currentState) + is MeetingsState.Loading -> MeetingsLoading(currentState) } } } @@ -44,19 +62,70 @@ fun MeetingsData( fun MeetingsEmpty( state: MeetingsState.Empty ) { - + Text( + modifier = Modifier.testTag(TestIds.Main.ERROR), + text = "Нет бронирований", + style = MaterialTheme.typography.headlineSmall, + color = Color.Red + ) } @Composable fun MeetingsError( + viewModel: MeetingsViewModel, state: MeetingsState.Error ) { - + Column( + modifier = Modifier + .fillMaxSize() + .padding(all = 24.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center + ) { + when (state.error) { + "No auth" -> { + Image( + painter = painterResource(R.drawable.no_accounts), + null, + Modifier.size(100.dp) + ) + } + "Not internet" -> { + Image( + painter = painterResource(R.drawable.not_wifi), + null, + Modifier.size(100.dp) + ) + } + } + Text( + modifier = Modifier.testTag(TestIds.Main.ERROR), + text = state.error, + style = MaterialTheme.typography.headlineSmall, + color = Color.Red + ) + Spacer(modifier = Modifier.size(16.dp)) + RoundCustomButton( + modifier = Modifier.testTag(TestIds.Main.REFRESH_BUTTON).fillMaxWidth(), + onClick = { + viewModel.refresh() + }, + ) { + Text(stringResource(R.string.main_refresh)) + } + } } @Composable fun MeetingsLoading( state: MeetingsState.Loading ) { - + Box( + Modifier.fillMaxWidth(), + contentAlignment = Alignment.Center + ) { + CircularProgressIndicator( + modifier = Modifier.size(64.dp) + ) + } } \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/ui/screen/meetings/MeetingsViewModel.kt b/app/src/main/java/ru/myitschool/work/ui/screen/meetings/MeetingsViewModel.kt index d3c27ba..4e23ffd 100644 --- a/app/src/main/java/ru/myitschool/work/ui/screen/meetings/MeetingsViewModel.kt +++ b/app/src/main/java/ru/myitschool/work/ui/screen/meetings/MeetingsViewModel.kt @@ -1,9 +1,7 @@ package ru.myitschool.work.ui.screen.meetings -import android.provider.Settings.System.DATE_FORMAT import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharedFlow @@ -15,11 +13,7 @@ import ru.myitschool.work.data.repo.AuthRepository import ru.myitschool.work.data.repo.BookRepository import ru.myitschool.work.domain.auth.LogoutUseCase import ru.myitschool.work.domain.main.GetMainDataUseCase -import ru.myitschool.work.ui.nav.AuthScreenDestination import ru.myitschool.work.ui.screen.main.MainAction -import ru.myitschool.work.ui.screen.main.MainState -import java.time.LocalDate -import java.time.format.DateTimeFormatter class MeetingsViewModel: ViewModel() { private val _uiState = MutableStateFlow(MeetingsState.Loading)