@@ -6,6 +6,7 @@ import android.view.MenuItem
6
6
import androidx.core.view.isInvisible
7
7
import androidx.transition.AutoTransition
8
8
import androidx.transition.TransitionManager
9
+ import com.google.android.material.textfield.TextInputLayout
9
10
import com.hoc.flowmvi.core_ui.clicks
10
11
import com.hoc.flowmvi.core_ui.firstChange
11
12
import com.hoc.flowmvi.core_ui.navigator.IntentProviders
@@ -52,31 +53,17 @@ class AddActivity :
52
53
override fun render (viewState : ViewState ) {
53
54
Timber .d(" viewState=$viewState " )
54
55
55
- val emailErrorMessage = if (ValidationError .INVALID_EMAIL_ADDRESS in viewState.errors) {
56
- " Invalid email"
57
- } else {
58
- null
56
+ addBinding.emailEditText.setErrorIfChanged(viewState.emailChanged) {
57
+ if (ValidationError .INVALID_EMAIL_ADDRESS in viewState.errors) " Invalid email"
58
+ else null
59
59
}
60
- if (viewState.emailChanged && addBinding.emailEditText.error != emailErrorMessage) {
61
- addBinding.emailEditText.error = emailErrorMessage
60
+ addBinding.firstNameEditText.setErrorIfChanged(viewState.firstNameChanged) {
61
+ if (ValidationError .TOO_SHORT_FIRST_NAME in viewState.errors) " Too short first name"
62
+ else null
62
63
}
63
-
64
- val firstNameErrorMessage = if (ValidationError .TOO_SHORT_FIRST_NAME in viewState.errors) {
65
- " Too short first name"
66
- } else {
67
- null
68
- }
69
- if (viewState.firstNameChanged && addBinding.firstNameEditText.error != firstNameErrorMessage) {
70
- addBinding.firstNameEditText.error = firstNameErrorMessage
71
- }
72
-
73
- val lastNameErrorMessage = if (ValidationError .TOO_SHORT_LAST_NAME in viewState.errors) {
74
- " Too short last name"
75
- } else {
76
- null
77
- }
78
- if (viewState.lastNameChanged && addBinding.lastNameEditText.error != lastNameErrorMessage) {
79
- addBinding.lastNameEditText.error = lastNameErrorMessage
64
+ addBinding.lastNameEditText.setErrorIfChanged(viewState.lastNameChanged) {
65
+ if (ValidationError .TOO_SHORT_LAST_NAME in viewState.errors) " Too short last name"
66
+ else null
80
67
}
81
68
82
69
TransitionManager .beginDelayedTransition(
@@ -139,3 +126,14 @@ class AddActivity :
139
126
Intent (context, AddActivity ::class .java)
140
127
}
141
128
}
129
+
130
+ private inline fun TextInputLayout.setErrorIfChanged (
131
+ errorEnabled : Boolean ,
132
+ errorBuilder : () -> String? ,
133
+ ) {
134
+ val newError = if (errorEnabled) errorBuilder() else null
135
+ // avoid unnecessary animation
136
+ if (error != newError) {
137
+ error = newError
138
+ }
139
+ }
0 commit comments