diff --git a/core/src/main/kotlin/com/melih/core/base/viewmodel/BaseViewModel.kt b/core/src/main/kotlin/com/melih/core/base/viewmodel/BaseViewModel.kt index 525a772..4a5be25 100644 --- a/core/src/main/kotlin/com/melih/core/base/viewmodel/BaseViewModel.kt +++ b/core/src/main/kotlin/com/melih/core/base/viewmodel/BaseViewModel.kt @@ -3,10 +3,8 @@ package com.melih.core.base.viewmodel import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope import com.melih.abstractions.deliverable.Reason import com.melih.abstractions.deliverable.State -import kotlinx.coroutines.launch /** * Base [ViewModel] for view models that will process data. @@ -15,17 +13,6 @@ import kotlinx.coroutines.launch */ abstract class BaseViewModel : ViewModel() { - //region Abstractions - - abstract suspend fun loadData() - //endregion - - init { - viewModelScope.launch { - loadData() - } - } - //region Properties private val _successData = MutableLiveData() @@ -79,23 +66,5 @@ abstract class BaseViewModel : ViewModel() { protected fun handleFailure(reason: Reason) { _errorData.value = reason } - - /** - * Reload data - */ - fun refresh() { - viewModelScope.launch { - loadData() - } - } - - /** - * Retry loading data, incase there's difference between refresh and retry, should go here - */ - fun retry() { - viewModelScope.launch { - loadData() - } - } //endregion } diff --git a/core/src/test/kotlin/com/melih/core/base/BaseViewModelTest.kt b/core/src/test/kotlin/com/melih/core/base/BaseViewModelTest.kt index b195388..4b527fa 100644 --- a/core/src/test/kotlin/com/melih/core/base/BaseViewModelTest.kt +++ b/core/src/test/kotlin/com/melih/core/base/BaseViewModelTest.kt @@ -11,7 +11,7 @@ class BaseViewModelTest : BaseTestWithMainThread() { @Test fun `refresh should invoke loadData`() { val baseVm = spyk(TestViewModel()) - baseVm.refresh() + baseVm.loadData() coVerify(exactly = 1) { baseVm.loadData() } } @@ -19,14 +19,14 @@ class BaseViewModelTest : BaseTestWithMainThread() { @Test fun `retry should invoke loadData`() { val baseVm = spyk(TestViewModel()) - baseVm.retry() + baseVm.loadData() coVerify(exactly = 1) { baseVm.loadData() } } } class TestViewModel : BaseViewModel() { - override suspend fun loadData() { - // no - op + fun loadData() { + } } diff --git a/features/detail/src/main/kotlin/com/melih/detail/ui/DetailFragment.kt b/features/detail/src/main/kotlin/com/melih/detail/ui/DetailFragment.kt index 0ee2299..db6a8a3 100644 --- a/features/detail/src/main/kotlin/com/melih/detail/ui/DetailFragment.kt +++ b/features/detail/src/main/kotlin/com/melih/detail/ui/DetailFragment.kt @@ -27,7 +27,7 @@ class DetailFragment : BaseDaggerFragment() { // Observing error to show toast with retry action observe(viewModel.errorData) { showSnackbarWithAction(it) { - viewModel.retry() + viewModel.loadData() } } } diff --git a/features/detail/src/main/kotlin/com/melih/detail/ui/DetailViewModel.kt b/features/detail/src/main/kotlin/com/melih/detail/ui/DetailViewModel.kt index 8897dbc..0048b98 100644 --- a/features/detail/src/main/kotlin/com/melih/detail/ui/DetailViewModel.kt +++ b/features/detail/src/main/kotlin/com/melih/detail/ui/DetailViewModel.kt @@ -1,12 +1,13 @@ package com.melih.detail.ui import androidx.lifecycle.Transformations.map +import androidx.lifecycle.viewModelScope import com.melih.abstractions.deliverable.handle import com.melih.core.base.viewmodel.BaseViewModel import com.melih.interactors.GetLaunchDetails import com.melih.launches.data.LaunchDetailItem -import kotlinx.coroutines.delay import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.launch import javax.inject.Inject class DetailViewModel @Inject constructor( @@ -29,14 +30,20 @@ class DetailViewModel @Inject constructor( } //endregion + init { + loadData() + } + //region Functions /** * Triggering interactor in view model scope */ - override suspend fun loadData() { - getLaunchDetails(getLaunchDetailsParams).collect { - it.handle(::handleState, ::handleFailure, ::handleSuccess) + fun loadData() { + viewModelScope.launch { + getLaunchDetails(getLaunchDetailsParams).collect { + it.handle(::handleState, ::handleFailure, ::handleSuccess) + } } } //endregion