Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 21 additions & 23 deletions feature-add/src/main/java/com/hoc/flowmvi/ui/add/AddActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import android.view.MenuItem
import androidx.core.view.isInvisible
import androidx.transition.AutoTransition
import androidx.transition.TransitionManager
import com.google.android.material.textfield.TextInputLayout
import com.hoc.flowmvi.core_ui.clicks
import com.hoc.flowmvi.core_ui.firstChange
import com.hoc.flowmvi.core_ui.navigator.IntentProviders
Expand Down Expand Up @@ -52,31 +53,17 @@ class AddActivity :
override fun render(viewState: ViewState) {
Timber.d("viewState=$viewState")

val emailErrorMessage = if (ValidationError.INVALID_EMAIL_ADDRESS in viewState.errors) {
"Invalid email"
} else {
null
addBinding.emailEditText.setErrorIfChanged(viewState.emailChanged) {
if (ValidationError.INVALID_EMAIL_ADDRESS in viewState.errors) "Invalid email"
else null
}
if (viewState.emailChanged && addBinding.emailEditText.error != emailErrorMessage) {
addBinding.emailEditText.error = emailErrorMessage
addBinding.firstNameEditText.setErrorIfChanged(viewState.firstNameChanged) {
if (ValidationError.TOO_SHORT_FIRST_NAME in viewState.errors) "Too short first name"
else null
}

val firstNameErrorMessage = if (ValidationError.TOO_SHORT_FIRST_NAME in viewState.errors) {
"Too short first name"
} else {
null
}
if (viewState.firstNameChanged && addBinding.firstNameEditText.error != firstNameErrorMessage) {
addBinding.firstNameEditText.error = firstNameErrorMessage
}

val lastNameErrorMessage = if (ValidationError.TOO_SHORT_LAST_NAME in viewState.errors) {
"Too short last name"
} else {
null
}
if (viewState.lastNameChanged && addBinding.lastNameEditText.error != lastNameErrorMessage) {
addBinding.lastNameEditText.error = lastNameErrorMessage
addBinding.lastNameEditText.setErrorIfChanged(viewState.lastNameChanged) {
if (ValidationError.TOO_SHORT_LAST_NAME in viewState.errors) "Too short last name"
else null
}

TransitionManager.beginDelayedTransition(
Expand Down Expand Up @@ -139,3 +126,14 @@ class AddActivity :
Intent(context, AddActivity::class.java)
}
}

private inline fun TextInputLayout.setErrorIfChanged(
errorEnabled: Boolean,
errorBuilder: () -> String?,
) {
val newError = if (errorEnabled) errorBuilder() else null
// avoid unnecessary animation
if (error != newError) {
error = newError
}
}
3 changes: 2 additions & 1 deletion feature-add/src/main/java/com/hoc/flowmvi/ui/add/AddVM.kt
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ class AddVM(
override val viewState: StateFlow<ViewState>

init {
val initialVS = savedStateHandle.get<ViewState?>(VIEW_STATE) ?: ViewState.initial()
val initialVS = savedStateHandle.get<ViewState?>(VIEW_STATE)?.copy(isLoading = false)
?: ViewState.initial()
Timber.tag(logTag).d("[ADD_VM] initialVS: $initialVS")

viewState = intentFlow
Expand Down