diff --git a/app/src/main/java/app/nexd/android/ui/seeker/create/SeekerCreateRequestViewModel.kt b/app/src/main/java/app/nexd/android/ui/seeker/create/SeekerCreateRequestViewModel.kt index 0db1fc6..38aad68 100644 --- a/app/src/main/java/app/nexd/android/ui/seeker/create/SeekerCreateRequestViewModel.kt +++ b/app/src/main/java/app/nexd/android/ui/seeker/create/SeekerCreateRequestViewModel.kt @@ -15,6 +15,7 @@ import app.nexd.android.api.model.CreateHelpRequestArticleDto import app.nexd.android.api.model.HelpRequestCreateDto import app.nexd.android.api.model.Unit import app.nexd.android.ui.common.helprequest.HelpRequestCreateArticleBinder.ArticleViewModel +import app.nexd.android.ui.utils.SingleLiveEvent import app.nexd.android.ui.utils.extensions.currentLanguage import app.nexd.android.ui.utils.extensions.toLiveData import io.reactivex.BackpressureStrategy.LATEST @@ -25,11 +26,12 @@ class SeekerCreateRequestViewModel(private val context: Context, private val api sealed class Progress { object Idle : Progress() - object Loading : Progress() class Error(@StringRes val message: Int? = null) : Progress() object Finished : Progress() } + + val navigateToConfirmAddress = SingleLiveEvent() val progress: MutableLiveData = MutableLiveData(Progress.Idle) val firstName = MutableLiveData() @@ -213,4 +215,25 @@ class SeekerCreateRequestViewModel(private val context: Context, private val api true } } + + fun confirmItems() { + // to also include null check for inputs the negative case + // (no confirmed items, ie = size < 2) is evaluated first + val invalid = + // item name null or empty + inputs.value?.any { it.articleName.value.isNullOrBlank() } ?: true || + // no item added + inputs.value?.size ?: 1 < 2 || + // amount is null, empty or less than 1 + inputs.value?.any { it.amount.value.isNullOrBlank() || it.amount.value?.toIntOrNull() ?: 0 < 1 } ?: true || + // no selected Unit + inputs.value?.any { it.selectedUnit.value == null } ?: true + + if (invalid) { + progress.value = Progress.Error(R.string.seeker_request_create_no_articles) + } else { + navigateToConfirmAddress.call() + progress.value = Progress.Idle + } + } } diff --git a/app/src/main/java/app/nexd/android/ui/seeker/create/address/SeekerCreateRequestConfirmAddressFragment.kt b/app/src/main/java/app/nexd/android/ui/seeker/create/address/SeekerCreateRequestConfirmAddressFragment.kt index d5bc41e..484ff64 100644 --- a/app/src/main/java/app/nexd/android/ui/seeker/create/address/SeekerCreateRequestConfirmAddressFragment.kt +++ b/app/src/main/java/app/nexd/android/ui/seeker/create/address/SeekerCreateRequestConfirmAddressFragment.kt @@ -61,9 +61,6 @@ class SeekerCreateRequestConfirmAddressFragment : Fragment() { is Idle -> { // nothing to do } - is Loading -> { - // - } is Error -> { it.message?.let { errorMessageId -> DefaultSnackbar(binding.root, errorMessageId, Snackbar.LENGTH_SHORT) diff --git a/app/src/main/java/app/nexd/android/ui/seeker/create/articles/SeekerCreateRequestEnterArticlesFragment.kt b/app/src/main/java/app/nexd/android/ui/seeker/create/articles/SeekerCreateRequestEnterArticlesFragment.kt index a249b9b..abe8ad5 100644 --- a/app/src/main/java/app/nexd/android/ui/seeker/create/articles/SeekerCreateRequestEnterArticlesFragment.kt +++ b/app/src/main/java/app/nexd/android/ui/seeker/create/articles/SeekerCreateRequestEnterArticlesFragment.kt @@ -54,6 +54,13 @@ class SeekerCreateRequestEnterArticlesFragment : Fragment() { initRecyclerView() setVmObserver() + setUi() + } + + override fun onDestroyView() { + super.onDestroyView() + + adapter.removeAllSections() } private fun initRecyclerView() { @@ -105,9 +112,6 @@ class SeekerCreateRequestEnterArticlesFragment : Fragment() { is Idle -> { //nothing to do } - is Loading -> { - findNavController().navigate(SeekerCreateRequestEnterArticlesFragmentDirections.toSeekerCreateRequestConfirmAddressFragment()) - } is Finished -> { // state not reachable } @@ -122,5 +126,16 @@ class SeekerCreateRequestEnterArticlesFragment : Fragment() { ) } }) + + vm.navigateToConfirmAddress.observe(viewLifecycleOwner, Observer { + findNavController().navigate(SeekerCreateRequestEnterArticlesFragmentDirections.toSeekerCreateRequestConfirmAddressFragment()) + }) } + + private fun setUi() { + binding.buttonAccept.setOnClickListener { + vm.confirmItems() + } + } + }