Merge remote-tracking branch 'origin/main'
# Conflicts: # app/src/main/java/ru/myitschool/work/ui/screen/meetings/MeetingsViewModel.kt
This commit is contained in:
commit
64e2e9126c
@ -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)
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user