Disable Continue button when the login field is cleared. (#4699)

* Disable Continue button when the login field is cleared.
Fixes #4691

* Add tests on LoginPasswordView
This commit is contained in:
Benoit Marty 2025-05-12 14:45:07 +02:00 committed by GitHub
parent 525d72d85b
commit fe91895c9a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 213 additions and 8 deletions

View file

@ -28,7 +28,7 @@ data class LoginPasswordState(
@Parcelize
data class LoginFormState(
val login: String,
val password: String
val password: String,
) : Parcelable {
companion object {
val Default = LoginFormState("", "")

View file

@ -8,23 +8,38 @@
package io.element.android.features.login.impl.screens.loginpassword
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.features.login.impl.accountprovider.AccountProvider
import io.element.android.features.login.impl.accountprovider.anAccountProvider
import io.element.android.libraries.architecture.AsyncData
import io.element.android.libraries.matrix.api.core.SessionId
open class LoginPasswordStateProvider : PreviewParameterProvider<LoginPasswordState> {
override val values: Sequence<LoginPasswordState>
get() = sequenceOf(
aLoginPasswordState(),
// Loading
aLoginPasswordState().copy(loginAction = AsyncData.Loading()),
aLoginPasswordState(loginAction = AsyncData.Loading()),
// Error
aLoginPasswordState().copy(loginAction = AsyncData.Failure(Exception("An error occurred"))),
aLoginPasswordState(loginAction = AsyncData.Failure(Exception("An error occurred"))),
)
}
fun aLoginPasswordState() = LoginPasswordState(
accountProvider = anAccountProvider(),
formState = LoginFormState.Default,
loginAction = AsyncData.Uninitialized,
eventSink = {}
fun aLoginPasswordState(
accountProvider: AccountProvider = anAccountProvider(),
formState: LoginFormState = LoginFormState.Default,
loginAction: AsyncData<SessionId> = AsyncData.Uninitialized,
eventSink: (LoginPasswordEvents) -> Unit = {},
) = LoginPasswordState(
accountProvider = accountProvider,
formState = formState,
loginAction = loginAction,
eventSink = eventSink,
)
fun aLoginFormState(
login: String = "",
password: String = "",
) = LoginFormState(
login = login,
password = password,
)

View file

@ -201,6 +201,7 @@ private fun LoginForm(
{
Box(Modifier.clickable {
loginFieldState = ""
eventSink(LoginPasswordEvents.SetLogin(""))
}) {
Icon(
imageVector = CompoundIcons.Close(),