diff --git a/app/src/main/java/com/iqball/app/MainActivity.kt b/app/src/main/java/com/iqball/app/MainActivity.kt index de4e2e4..bc2fc63 100644 --- a/app/src/main/java/com/iqball/app/MainActivity.kt +++ b/app/src/main/java/com/iqball/app/MainActivity.kt @@ -17,6 +17,7 @@ import com.iqball.app.api.EitherCallAdapterFactory import com.iqball.app.api.service.IQBallService import com.iqball.app.page.HomePage import com.iqball.app.page.LoginPage +import com.iqball.app.page.RegisterPage import com.iqball.app.session.DataSession import com.iqball.app.session.Session import com.iqball.app.ui.theme.IQBallTheme @@ -63,14 +64,21 @@ class MainActivity : ComponentActivity() { @Composable fun App(service: IQBallService, sessionState: MutableState) { + val registerPage: @Composable () -> Unit = { + RegisterPage(service = service, onLoginSuccess = { auth -> + sessionState.value = DataSession(auth) + }) + } + val loginPage: @Composable () -> Unit = { LoginPage(service = service, onLoginSuccess = { auth -> sessionState.value = DataSession(auth) }) } - val homePage : @Composable () -> Unit = { HomePage(service, sessionState.value) } - val currentPage = remember(sessionState.value.auth) { if (sessionState.value.auth == null) loginPage else homePage } + registerPage() + val currentPage = remember(sessionState.value.auth) { if (sessionState.value.auth == null) loginPage else homePage } currentPage() + } \ No newline at end of file diff --git a/app/src/main/java/com/iqball/app/page/HomePage.kt b/app/src/main/java/com/iqball/app/page/HomePage.kt index da8f56e..8bcb3bf 100644 --- a/app/src/main/java/com/iqball/app/page/HomePage.kt +++ b/app/src/main/java/com/iqball/app/page/HomePage.kt @@ -1,5 +1,6 @@ package com.iqball.app.page +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import com.iqball.app.api.service.IQBallService import com.iqball.app.session.Session @@ -7,4 +8,5 @@ import com.iqball.app.session.Session @Composable fun HomePage(service: IQBallService, session: Session) { + Text(text = "HELLO WELCOME") } \ No newline at end of file diff --git a/app/src/main/java/com/iqball/app/page/LoginPage.kt b/app/src/main/java/com/iqball/app/page/LoginPage.kt index 55f6de7..053e14d 100644 --- a/app/src/main/java/com/iqball/app/page/LoginPage.kt +++ b/app/src/main/java/com/iqball/app/page/LoginPage.kt @@ -18,10 +18,12 @@ import com.iqball.app.session.Authentication import kotlinx.coroutines.runBlocking import kotlinx.datetime.LocalDateTime + @Composable fun LoginPage(service: AuthService, onLoginSuccess : (Authentication) -> Unit) { - var username by remember { mutableStateOf("") } + var email by remember { mutableStateOf("") } var password by remember { mutableStateOf("") } + var errors by remember { mutableStateOf("") } Surface( color = Color.White, @@ -35,15 +37,15 @@ fun LoginPage(service: AuthService, onLoginSuccess : (Authentication) -> Unit) { horizontalAlignment = Alignment.CenterHorizontally ) { Text( - text = "Login", + text = "S'identifier", fontSize = 28.sp, color = Color.Black ) Spacer(modifier = Modifier.height(16.dp)) OutlinedTextField( - value = username, - onValueChange = { username = it }, - label = { Text("Username") }, + value = email, + onValueChange = { email = it }, + label = { Text("Email") }, modifier = Modifier.fillMaxWidth() ) Spacer(modifier = Modifier.height(16.dp)) @@ -57,8 +59,10 @@ fun LoginPage(service: AuthService, onLoginSuccess : (Authentication) -> Unit) { Button(onClick = { runBlocking { - when(val response = service.login(AuthService.LoginRequest(username, password))){ - is Either.Left -> println(response.value) + when(val response = service.login(AuthService.LoginRequest(email, password))){ + is Either.Left -> { + errors = response.value.toList().flatMap { entry -> entry.second.map { "${entry.first} : ${it}" } }.joinToString("\n") + } is Either.Right -> onLoginSuccess(Authentication(response.value.token, LocalDateTime.parse(response.value.expirationDate))) } diff --git a/app/src/main/java/com/iqball/app/page/RegisterPage.kt b/app/src/main/java/com/iqball/app/page/RegisterPage.kt index 720c36e..869a777 100644 --- a/app/src/main/java/com/iqball/app/page/RegisterPage.kt +++ b/app/src/main/java/com/iqball/app/page/RegisterPage.kt @@ -1,6 +1,16 @@ package com.iqball.app.page import android.util.Log +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.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Button +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect @@ -8,40 +18,90 @@ 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.graphics.Color +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp import arrow.core.Either import com.iqball.app.api.service.AuthService import com.iqball.app.api.service.IQBallService +import com.iqball.app.session.Authentication +import kotlinx.coroutines.runBlocking +import kotlinx.datetime.LocalDateTime +import androidx.compose.ui.text.input.VisualTransformation @Composable -fun RegisterPage(service: IQBallService) { +fun RegisterPage(service: AuthService, onLoginSuccess: (Authentication) -> Unit) { + var username by remember { mutableStateOf("") } + var email by remember { mutableStateOf("") } + var password by remember { mutableStateOf("") } + var errors by remember { mutableStateOf("") } + Surface( + color = Color.White, + modifier = Modifier.fillMaxSize() - var text by remember { mutableStateOf("No message !") } - - LaunchedEffect(Unit) { - val result = service.login(AuthService.LoginRequest("maxime@mail.com", "123456")) - - when (result) { - is Either.Left -> { - println("Error : " + result.value) - text = result.toString() + ) { + Column( + modifier = Modifier + .padding(16.dp) + .fillMaxSize(), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text( + text = "S'enregistrer", + fontSize = 28.sp, + color = Color.Black + ) + Spacer(modifier = Modifier.height(16.dp)) + errors?.let { message -> + Text( + text = message, + color = Color.Red, + fontSize = 14.sp, + modifier = Modifier.padding(vertical = 8.dp) + ) } - is Either.Right -> { - val token = result.value.token - val userDataResponse = service.getUserData(token) + Spacer(modifier = Modifier.height(16.dp)) + OutlinedTextField( + value = username, + onValueChange = { username = it }, + label = { Text("Nom d'utilisateur") }, + modifier = Modifier.fillMaxWidth() + ) + Spacer(modifier = Modifier.height(16.dp)) + OutlinedTextField( + value = password, + onValueChange = { password = it }, + label = { Text("Mot de passe") }, + modifier = Modifier.fillMaxWidth() + ) + Spacer(modifier = Modifier.height(16.dp)) + OutlinedTextField( + value = email, + onValueChange = { email = it }, + label = { Text("Email") }, + modifier = Modifier.fillMaxWidth() + ) + Button(onClick = { + runBlocking { + when (val response = + service.register(AuthService.RegisterRequest(username, email, password))) { + is Either.Left -> { + errors = response.value.toList().flatMap { entry -> entry.second.map { "${entry.first} : ${it}" } }.joinToString("\n") + } - when (userDataResponse) { - is Either.Left -> println("Error User Data : " + userDataResponse.value) - is Either.Right -> println("Success User Data : " + userDataResponse.value) + is Either.Right -> { + onLoginSuccess(Authentication(response.value.token,LocalDateTime.parse(response.value.expirationDate))) + } + } } - - text = userDataResponse.toString() + }) { + Text(text = "Créer votre compte") } } - - println(result) - Log.i("%", result.toString()) } - - Text(text = text) } +