Skip to content

Commit b7b32ae

Browse files
committed
simplify AddActivity.render
1 parent 5baef7b commit b7b32ae

File tree

1 file changed

+21
-23
lines changed

1 file changed

+21
-23
lines changed

feature-add/src/main/java/com/hoc/flowmvi/ui/add/AddActivity.kt

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import android.view.MenuItem
66
import androidx.core.view.isInvisible
77
import androidx.transition.AutoTransition
88
import androidx.transition.TransitionManager
9+
import com.google.android.material.textfield.TextInputLayout
910
import com.hoc.flowmvi.core_ui.clicks
1011
import com.hoc.flowmvi.core_ui.firstChange
1112
import com.hoc.flowmvi.core_ui.navigator.IntentProviders
@@ -52,31 +53,17 @@ class AddActivity :
5253
override fun render(viewState: ViewState) {
5354
Timber.d("viewState=$viewState")
5455

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
5959
}
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
6263
}
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
8067
}
8168

8269
TransitionManager.beginDelayedTransition(
@@ -139,3 +126,14 @@ class AddActivity :
139126
Intent(context, AddActivity::class.java)
140127
}
141128
}
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

Comments
 (0)