wrap loginscreen in route
This commit is contained in:
		
							parent
							
								
									8fc4ac8cf1
								
							
						
					
					
						commit
						de42f090ef
					
				
					 3 changed files with 74 additions and 15 deletions
				
			
		| 
						 | 
				
			
			@ -10,7 +10,7 @@ import androidx.compose.runtime.Composable
 | 
			
		|||
import androidx.compose.runtime.getValue
 | 
			
		||||
import androidx.compose.ui.Alignment
 | 
			
		||||
import androidx.compose.ui.Modifier
 | 
			
		||||
import androidx.hilt.navigation.compose.hiltViewModel
 | 
			
		||||
import androidx.compose.ui.tooling.preview.Preview
 | 
			
		||||
import be.ugent.sel.studeez.common.composable.*
 | 
			
		||||
import be.ugent.sel.studeez.common.ext.basicButton
 | 
			
		||||
import be.ugent.sel.studeez.common.ext.fieldModifier
 | 
			
		||||
| 
						 | 
				
			
			@ -18,14 +18,48 @@ import be.ugent.sel.studeez.common.ext.textButton
 | 
			
		|||
import be.ugent.sel.studeez.resources
 | 
			
		||||
import be.ugent.sel.studeez.R.string as AppText
 | 
			
		||||
 | 
			
		||||
data class LoginScreenActions(
 | 
			
		||||
    val onEmailChange: (String) -> Unit,
 | 
			
		||||
    val onPasswordChange: (String) -> Unit,
 | 
			
		||||
    val onSignUpClick: () -> Unit,
 | 
			
		||||
    val onSignInClick: () -> Unit,
 | 
			
		||||
    val onForgotPasswordClick: () -> Unit,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
fun getLoginScreenActions(
 | 
			
		||||
    viewModel: LoginViewModel,
 | 
			
		||||
    openAndPopUp: (String, String) -> Unit,
 | 
			
		||||
): LoginScreenActions {
 | 
			
		||||
    return LoginScreenActions(
 | 
			
		||||
        onEmailChange = { viewModel.onEmailChange(it) },
 | 
			
		||||
        onPasswordChange = { viewModel.onPasswordChange(it) },
 | 
			
		||||
        onSignUpClick = { viewModel.onSignUpClick(openAndPopUp) },
 | 
			
		||||
        onSignInClick = { viewModel.onSignInClick(openAndPopUp) },
 | 
			
		||||
        onForgotPasswordClick = { viewModel.onForgotPasswordClick() }
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@Composable
 | 
			
		||||
fun LoginScreen(
 | 
			
		||||
fun LoginRoute(
 | 
			
		||||
    openAndPopUp: (String, String) -> Unit,
 | 
			
		||||
    modifier: Modifier = Modifier,
 | 
			
		||||
    viewModel: LoginViewModel = hiltViewModel()
 | 
			
		||||
    viewModel: LoginViewModel,
 | 
			
		||||
) {
 | 
			
		||||
    val uiState by viewModel.uiState
 | 
			
		||||
 | 
			
		||||
    LoginScreen(
 | 
			
		||||
        modifier = modifier,
 | 
			
		||||
        uiState = uiState,
 | 
			
		||||
        loginScreenActions = getLoginScreenActions(viewModel = viewModel, openAndPopUp)
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@Composable
 | 
			
		||||
fun LoginScreen(
 | 
			
		||||
    modifier: Modifier = Modifier,
 | 
			
		||||
    uiState: LoginUiState,
 | 
			
		||||
    loginScreenActions: LoginScreenActions,
 | 
			
		||||
) {
 | 
			
		||||
    SimpleScreenTemplate(title = resources().getString(AppText.sign_in)) {
 | 
			
		||||
        Column(
 | 
			
		||||
            modifier = modifier
 | 
			
		||||
| 
						 | 
				
			
			@ -35,18 +69,42 @@ fun LoginScreen(
 | 
			
		|||
            verticalArrangement = Arrangement.Center,
 | 
			
		||||
            horizontalAlignment = Alignment.CenterHorizontally
 | 
			
		||||
        ) {
 | 
			
		||||
            EmailField(uiState.email, viewModel::onEmailChange, Modifier.fieldModifier())
 | 
			
		||||
            PasswordField(uiState.password, viewModel::onPasswordChange, Modifier.fieldModifier())
 | 
			
		||||
            EmailField(
 | 
			
		||||
                uiState.email,
 | 
			
		||||
                loginScreenActions.onEmailChange,
 | 
			
		||||
                Modifier.fieldModifier()
 | 
			
		||||
            )
 | 
			
		||||
            PasswordField(
 | 
			
		||||
                uiState.password,
 | 
			
		||||
                loginScreenActions.onPasswordChange,
 | 
			
		||||
                Modifier.fieldModifier()
 | 
			
		||||
            )
 | 
			
		||||
            BasicButton(
 | 
			
		||||
                AppText.sign_in,
 | 
			
		||||
                Modifier.basicButton(),
 | 
			
		||||
                onClick = loginScreenActions.onSignInClick,
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
            BasicButton(AppText.sign_in, Modifier.basicButton()) { viewModel.onSignInClick(openAndPopUp) }
 | 
			
		||||
            BasicTextButton(
 | 
			
		||||
                AppText.not_already_user,
 | 
			
		||||
                Modifier.textButton(),
 | 
			
		||||
                action = loginScreenActions.onSignUpClick,
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
            BasicTextButton(AppText.not_already_user, Modifier.textButton()) {
 | 
			
		||||
                viewModel.onNotAlreadyUser(openAndPopUp)
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            BasicTextButton(AppText.forgot_password, Modifier.textButton()) {
 | 
			
		||||
                viewModel.onForgotPasswordClick()
 | 
			
		||||
            }
 | 
			
		||||
            BasicTextButton(
 | 
			
		||||
                AppText.forgot_password,
 | 
			
		||||
                Modifier.textButton(),
 | 
			
		||||
                action = loginScreenActions.onForgotPasswordClick,
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@Preview
 | 
			
		||||
@Composable
 | 
			
		||||
fun LoginScreenPreview() {
 | 
			
		||||
    LoginScreen(
 | 
			
		||||
        uiState = LoginUiState(),
 | 
			
		||||
        loginScreenActions = LoginScreenActions({}, {}, {}, {}, {})
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -63,7 +63,7 @@ class LoginViewModel @Inject constructor(
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun onNotAlreadyUser(openAndPopUp: (String, String) -> Unit) {
 | 
			
		||||
    fun onSignUpClick(openAndPopUp: (String, String) -> Unit) {
 | 
			
		||||
        openAndPopUp(SIGN_UP_SCREEN, LOGIN_SCREEN)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in a new issue