From ad113e0438be784781c1a369110a380f418c3b48 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 27 Nov 2025 10:10:25 +0300 Subject: [PATCH] error shows --- .../work/ui/screen/auth/AuthAction.kt | 3 +- .../work/ui/screen/auth/AuthScreen.kt | 50 +++++++++++++------ .../work/ui/screen/auth/AuthViewModel.kt | 10 +++- app/src/main/res/values/strings.xml | 2 + 4 files changed, 46 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthAction.kt b/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthAction.kt index 939a280..b2171cf 100644 --- a/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthAction.kt +++ b/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthAction.kt @@ -1,6 +1,7 @@ package ru.myitschool.work.ui.screen.auth sealed interface AuthAction { - data class ShowError(val message: String) : AuthAction + data class ShowError(val message: String?) : AuthAction + object LogIn : AuthAction } \ 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 98fcc85..767a4f6 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 @@ -1,5 +1,6 @@ package ru.myitschool.work.ui.screen.auth +import android.util.Log import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -28,6 +29,8 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavController +import io.ktor.util.collections.setValue +import ru.myitschool.work.App import ru.myitschool.work.R import ru.myitschool.work.core.OurConstants.SHABLON import ru.myitschool.work.core.TestIds @@ -39,13 +42,18 @@ fun AuthScreen( navController: NavController ) { val state by viewModel.uiState.collectAsState() - viewModel.onIntent(AuthIntent.CheckLogIntent) - LaunchedEffect(Unit) { - viewModel.actionFlow.collect { + viewModel.onIntent(AuthIntent.CheckLogIntent) + } + + val event = viewModel.actionFlow.collectAsState(initial = null) + + LaunchedEffect(event.value) { + if (event.value is AuthAction.LogIn) { navController.navigate(MainScreenDestination) } } + Log.d("AnnaKonda", state.javaClass.toString()) Column( modifier = Modifier .fillMaxSize() @@ -65,6 +73,7 @@ fun AuthScreen( modifier = Modifier.size(64.dp) ) } + is AuthState.LoggedIn -> { navController.navigate(MainScreenDestination) } @@ -78,10 +87,21 @@ private fun Content( state: AuthState.Data ) { var inputText by remember { mutableStateOf("") } - var errorText : String? by remember { mutableStateOf(null) } + var errorText: String? by remember { mutableStateOf(null) } + + val event = viewModel.actionFlow.collectAsState(initial = null) + + LaunchedEffect(event.value) { + if (event.value is AuthAction.ShowError) { + errorText = (event.value as AuthAction.ShowError).message + } + } + 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 @@ -91,22 +111,20 @@ 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 = { - if (!inputText.isEmpty() && inputText.length == 4 && inputText.matches(Regex(SHABLON))){ + if (!inputText.isEmpty() && inputText.length == 4 && inputText.matches(Regex(SHABLON))) { viewModel.onIntent(AuthIntent.Send(inputText)) + } else { + errorText = App.context.getString(R.string.auth_nasty_code) } }, enabled = true ) { Text(stringResource(R.string.auth_sign_in)) } - ShowError(errorText) // TODO: раскидать в коде когда показывается ошибка и когда нет - -} - -@Composable -fun ShowError(text : String?){ - if (text != null){ - Text(text, modifier = Modifier.testTag(TestIds.Auth.ERROR)) + if (errorText != null) { + Text(errorText.toString(), modifier = Modifier.testTag(TestIds.Auth.ERROR)) } -} +} \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthViewModel.kt b/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthViewModel.kt index c99dda7..1e516ac 100644 --- a/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthViewModel.kt +++ b/app/src/main/java/ru/myitschool/work/ui/screen/auth/AuthViewModel.kt @@ -1,6 +1,7 @@ package ru.myitschool.work.ui.screen.auth import android.util.Log +import androidx.compose.ui.res.stringResource import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import kotlinx.coroutines.Dispatchers @@ -11,6 +12,8 @@ import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch +import ru.myitschool.work.App +import ru.myitschool.work.R import ru.myitschool.work.data.repo.AuthRepository import ru.myitschool.work.data.source.DataStoreDataSource.authFlow import ru.myitschool.work.domain.auth.CheckAndSaveAuthCodeUseCase @@ -37,19 +40,23 @@ class AuthViewModel : ViewModel() { if (error.message != null) { _actionFlow.emit(AuthAction.ShowError(error.message.toString())) } + _uiState.update { AuthState.Data } } ) } } + is AuthIntent.TextInput -> Unit is AuthIntent.CheckLogIntent -> { viewModelScope.launch { _uiState.update { AuthState.Loading } authFlow().collect { Log.d("AnnaKonda", it) - if (it != "0"){ + if (it != "0") { + _actionFlow.emit(AuthAction.LogIn) _uiState.update { AuthState.LoggedIn } } else { + _actionFlow.emit(AuthAction.ShowError(App.context.getString(R.string.auth_wrong_code))) _uiState.update { AuthState.Data } } } @@ -57,5 +64,4 @@ class AuthViewModel : ViewModel() { } } } - } \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fa8bda6..44675a7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -4,4 +4,6 @@ Привет! Введи код для авторизации Код Войти + Введён неверный код + Неправильный формат кода \ No newline at end of file