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