diff --git a/app/src/main/java/ru/myitschool/work/ui/root/RootActivity.kt b/app/src/main/java/ru/myitschool/work/ui/root/RootActivity.kt index 54b156d..46b463f 100644 --- a/app/src/main/java/ru/myitschool/work/ui/root/RootActivity.kt +++ b/app/src/main/java/ru/myitschool/work/ui/root/RootActivity.kt @@ -8,7 +8,9 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.material3.Scaffold import androidx.compose.ui.Modifier +import androidx.lifecycle.viewmodel.compose.viewModel import ru.myitschool.work.ui.screen.AppNavHost +import ru.myitschool.work.ui.screen.auth.AuthViewModel import ru.myitschool.work.ui.theme.WorkTheme class RootActivity : ComponentActivity() { @@ -18,7 +20,9 @@ class RootActivity : ComponentActivity() { setContent { WorkTheme { Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> + val viewModel: AuthViewModel = viewModel() AppNavHost( + viewModel, modifier = Modifier .fillMaxSize() .padding(innerPadding) diff --git a/app/src/main/java/ru/myitschool/work/ui/screen/NavigationGraph.kt b/app/src/main/java/ru/myitschool/work/ui/screen/NavigationGraph.kt index 01b0f32..397dd6f 100644 --- a/app/src/main/java/ru/myitschool/work/ui/screen/NavigationGraph.kt +++ b/app/src/main/java/ru/myitschool/work/ui/screen/NavigationGraph.kt @@ -1,26 +1,66 @@ package ru.myitschool.work.ui.screen +import androidx.compose.animation.AnimatedContentScope import androidx.compose.animation.EnterTransition import androidx.compose.animation.ExitTransition +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.wrapContentHeight +import androidx.compose.foundation.text.input.TextFieldLineLimits +import androidx.compose.foundation.text.input.rememberTextFieldState +import androidx.compose.material3.Button +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Text +import androidx.compose.material3.TextField import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.testTag +import androidx.compose.ui.semantics.semantics +import androidx.compose.ui.semantics.testTag +import androidx.compose.ui.unit.dp +import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController +import ru.myitschool.work.core.TestIds import ru.myitschool.work.ui.nav.AuthScreenDestination import ru.myitschool.work.ui.nav.BookScreenDestination import ru.myitschool.work.ui.nav.MainScreenDestination +import ru.myitschool.work.ui.screen.auth.AuthIntent import ru.myitschool.work.ui.screen.auth.AuthScreen +import ru.myitschool.work.ui.screen.auth.AuthViewModel + @Composable fun AppNavHost( + viewModel: AuthViewModel, modifier: Modifier = Modifier, - navController: NavHostController = rememberNavController() -) { + navController: NavHostController = rememberNavController(), + + ) { + var expanded by remember{ mutableStateOf(false)} + var inputUsername by remember { mutableStateOf("Введите имя") } + val date:String = "" + val username:String = "" + var place:String = "" + NavHost( modifier = modifier, enterTransition = { EnterTransition.None }, @@ -35,8 +75,61 @@ fun AppNavHost( Box( contentAlignment = Alignment.Center ) { - Text(text = "Hello") + Text(text = "") + } + Column() { + Spacer(modifier = Modifier.size(16.dp)) + Text( + modifier = Modifier.testTag("main_name").fillMaxWidth(), + text = username + ) + Spacer(modifier = Modifier.size(10.dp)) + + Spacer(modifier = Modifier.size(10.dp)) + Row (horizontalArrangement = Arrangement.SpaceBetween, + modifier = Modifier.fillMaxWidth().padding(8.dp)) { + + Button(onClick = { }) { + Text(text = "Выход") + Modifier + .padding(20.dp) + .fillMaxWidth() + .semantics { testTag = "main_logout_button" } + } + Spacer(modifier = Modifier.size(10.dp)) + Button(onClick = { }) { + Text(text = "Обновить") + Modifier + .padding(20.dp) + .fillMaxWidth() + .semantics { testTag = "main_refresh_button" } + } + Spacer(modifier = Modifier.size(10.dp)) + } + Spacer(modifier = Modifier.size(10.dp)) + + Button(onClick = { expanded = true }) { + Text(text = "бронировать") + Modifier + .padding(20.dp) + .fillMaxWidth() + .semantics { testTag = "main_add_button" } + } + Text( + modifier = Modifier.testTag("main_item_date").fillMaxWidth(), + text = date + ) + Spacer(modifier = Modifier.size(10.dp)) + Text( + modifier = Modifier.testTag("main_item_place").fillMaxWidth(), + text = place + ) + Text(text = "ERROR", + modifier = Modifier.testTag("main_error").fillMaxWidth().alpha(0f)) + + } + } composable { Box( @@ -46,4 +139,7 @@ fun AppNavHost( } } } -} \ No newline at end of file +} + + + diff --git a/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthScreen.kt b/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthScreen.kt index f99978e..2ba59ae 100644 --- a/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthScreen.kt +++ b/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthScreen.kt @@ -76,7 +76,9 @@ private fun Content( var inputText by remember { mutableStateOf("") } Spacer(modifier = Modifier.size(16.dp)) TextField( - modifier = Modifier.testTag(TestIds.Auth.CODE_INPUT).fillMaxWidth(), + modifier = Modifier + .testTag(TestIds.Auth.CODE_INPUT) + .fillMaxWidth(), value = inputText, onValueChange = { inputText = it @@ -86,7 +88,9 @@ private fun Content( ) Spacer(modifier = Modifier.size(16.dp)) Button( - modifier = Modifier.testTag(TestIds.Auth.SIGN_BUTTON).fillMaxWidth(), + modifier = Modifier + .testTag(TestIds.Auth.SIGN_BUTTON) + .fillMaxWidth(), onClick = { viewModel.onIntent(AuthIntent.Send(inputText)) }, diff --git a/app/src/main/java/ru/myitschool/work/ui/screen/book/BookIntent.kt b/app/src/main/java/ru/myitschool/work/ui/screen/book/BookIntent.kt new file mode 100644 index 0000000..8ca3569 --- /dev/null +++ b/app/src/main/java/ru/myitschool/work/ui/screen/book/BookIntent.kt @@ -0,0 +1,4 @@ +package ru.myitschool.work.ui.screen.book + +interface BookIntent { +} \ No newline at end of file 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 new file mode 100644 index 0000000..d575ec9 --- /dev/null +++ b/app/src/main/java/ru/myitschool/work/ui/screen/book/BookScreen.kt @@ -0,0 +1,75 @@ +package ru.myitschool.work.ui.screen.book + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +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.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.lifecycle.viewmodel.compose.viewModel +import androidx.navigation.NavController +import ru.myitschool.work.R +import ru.myitschool.work.ui.nav.MainScreenDestination +import ru.myitschool.work.ui.screen.auth.AuthState +import ru.myitschool.work.ui.screen.auth.AuthViewModel + +@Composable +fun BookScreen( + viewModel: AuthViewModel = viewModel(), + navController: NavController +) { + val state by viewModel.uiState.collectAsState() + + LaunchedEffect(Unit) { + viewModel.actionFlow.collect { + navController.navigate(MainScreenDestination) + } + } + + Column( + modifier = Modifier + .fillMaxSize() + .padding(all = 24.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center + ) { + Text( + text = stringResource(R.string.auth_title), + style = MaterialTheme.typography.headlineSmall, + textAlign = TextAlign.Center + ) + when (val currentState = state) { + is AuthState.Data -> Content(viewModel, currentState) + is AuthState.Loading -> { + CircularProgressIndicator( + modifier = Modifier.size(64.dp) + ) + } + } + } +} + +@Composable +private fun Content( + viewModel: AuthViewModel, + state: AuthState.Data +) { + var inputText by remember { mutableStateOf("") } + Spacer(modifier = Modifier.size(16.dp)) + +}