Checkpoint 3.ui.2
This commit is contained in:
parent
4c8e79a561
commit
98cbfbeed2
@ -1,16 +1,35 @@
|
|||||||
package ru.myitschool.work.ui.screen.meetings
|
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.Column
|
||||||
|
import androidx.compose.foundation.layout.Spacer
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
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.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.collectAsState
|
import androidx.compose.runtime.collectAsState
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
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 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.BookAction
|
||||||
import ru.myitschool.work.ui.screen.book.BookViewModel
|
import ru.myitschool.work.ui.screen.book.BookViewModel
|
||||||
|
import ru.myitschool.work.ui.screen.main.MainIntent
|
||||||
import ru.myitschool.work.ui.screen.main.MainResult
|
import ru.myitschool.work.ui.screen.main.MainResult
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@ -23,12 +42,11 @@ fun MeetingsScreen(
|
|||||||
Modifier
|
Modifier
|
||||||
.fillMaxSize()
|
.fillMaxSize()
|
||||||
) {
|
) {
|
||||||
|
|
||||||
when (val currentState = state) {
|
when (val currentState = state) {
|
||||||
is MeetingsState.Data -> MeetingsData(currentState)
|
is MeetingsState.Data -> MeetingsData(currentState)
|
||||||
is MeetingsState.Empty -> MeetingsEmpty(currentState)
|
is MeetingsState.Empty -> MeetingsEmpty(currentState)
|
||||||
is MeetingsState.Error -> TODO()
|
is MeetingsState.Error -> MeetingsError(viewModel, currentState)
|
||||||
is MeetingsState.Loading -> TODO()
|
is MeetingsState.Loading -> MeetingsLoading(currentState)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -44,19 +62,70 @@ fun MeetingsData(
|
|||||||
fun MeetingsEmpty(
|
fun MeetingsEmpty(
|
||||||
state: MeetingsState.Empty
|
state: MeetingsState.Empty
|
||||||
) {
|
) {
|
||||||
|
Text(
|
||||||
|
modifier = Modifier.testTag(TestIds.Main.ERROR),
|
||||||
|
text = "Нет бронирований",
|
||||||
|
style = MaterialTheme.typography.headlineSmall,
|
||||||
|
color = Color.Red
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun MeetingsError(
|
fun MeetingsError(
|
||||||
|
viewModel: MeetingsViewModel,
|
||||||
state: MeetingsState.Error
|
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
|
@Composable
|
||||||
fun MeetingsLoading(
|
fun MeetingsLoading(
|
||||||
state: MeetingsState.Loading
|
state: MeetingsState.Loading
|
||||||
) {
|
) {
|
||||||
|
Box(
|
||||||
|
Modifier.fillMaxWidth(),
|
||||||
|
contentAlignment = Alignment.Center
|
||||||
|
) {
|
||||||
|
CircularProgressIndicator(
|
||||||
|
modifier = Modifier.size(64.dp)
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -1,9 +1,7 @@
|
|||||||
package ru.myitschool.work.ui.screen.meetings
|
package ru.myitschool.work.ui.screen.meetings
|
||||||
|
|
||||||
import android.provider.Settings.System.DATE_FORMAT
|
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import kotlinx.collections.immutable.toPersistentList
|
|
||||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.SharedFlow
|
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.data.repo.BookRepository
|
||||||
import ru.myitschool.work.domain.auth.LogoutUseCase
|
import ru.myitschool.work.domain.auth.LogoutUseCase
|
||||||
import ru.myitschool.work.domain.main.GetMainDataUseCase
|
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.MainAction
|
||||||
import ru.myitschool.work.ui.screen.main.MainState
|
|
||||||
import java.time.LocalDate
|
|
||||||
import java.time.format.DateTimeFormatter
|
|
||||||
|
|
||||||
class MeetingsViewModel: ViewModel() {
|
class MeetingsViewModel: ViewModel() {
|
||||||
private val _uiState = MutableStateFlow<MeetingsState>(MeetingsState.Loading)
|
private val _uiState = MutableStateFlow<MeetingsState>(MeetingsState.Loading)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user