package auth.presentation import androidx.compose.foundation.layout.* import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.unit.dp import ru.knot.messager.R @OptIn(ExperimentalMaterial3Api::class) @Composable fun RegisterScreen( viewModel: AuthViewModel, onNavigateToLogin: () -> Unit, onRegisterSuccess: () -> Unit ) { val state by viewModel.state.collectAsState() var userName by remember { mutableStateOf("") } var password by remember { mutableStateOf("") } var confirmPassword by remember { mutableStateOf("") } var errorMessage by remember { mutableStateOf(null) } val passwordsNotMatchMsg = stringResource(R.string.passwords_not_match) LaunchedEffect(state.isAuthenticated) { if (state.isAuthenticated) { onRegisterSuccess() } } Scaffold( topBar = { TopAppBar(title = { Text(stringResource(R.string.register)) }) } ) { paddingValues -> Column( modifier = Modifier .fillMaxSize() .padding(paddingValues) .padding(16.dp), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center ) { OutlinedTextField( value = userName, onValueChange = { userName = it }, label = { Text(stringResource(R.string.username)) }, modifier = Modifier.fillMaxWidth(), singleLine = true ) Spacer(modifier = Modifier.height(8.dp)) OutlinedTextField( value = password, onValueChange = { password = it }, label = { Text(stringResource(R.string.password)) }, modifier = Modifier.fillMaxWidth(), visualTransformation = PasswordVisualTransformation(), singleLine = true ) Spacer(modifier = Modifier.height(8.dp)) OutlinedTextField( value = confirmPassword, onValueChange = { confirmPassword = it }, label = { Text(stringResource(R.string.confirm_password)) }, modifier = Modifier.fillMaxWidth(), visualTransformation = PasswordVisualTransformation(), singleLine = true ) Spacer(modifier = Modifier.height(16.dp)) if (state.isLoading) { CircularProgressIndicator() } else { Button( onClick = { if (password == confirmPassword) { errorMessage = null viewModel.register(userName, password) } else { errorMessage = passwordsNotMatchMsg } }, modifier = Modifier.fillMaxWidth(), enabled = userName.isNotBlank() && password.isNotBlank() && confirmPassword.isNotBlank() ) { Text(stringResource(R.string.register)) } TextButton(onClick = onNavigateToLogin) { Text(stringResource(R.string.already_have_account)) } } val displayError = state.error ?: errorMessage if (displayError != null) { Text( text = displayError, color = MaterialTheme.colorScheme.error, modifier = Modifier.padding(top = 8.dp) ) } } } }