feat(home): 팔로잉 ViewModel을 추가한다
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
package kr.co.vividnext.sodalive.v2.main.home
|
||||
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import com.orhanobut.logger.Logger
|
||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||
import kr.co.vividnext.sodalive.R
|
||||
import kr.co.vividnext.sodalive.base.BaseViewModel
|
||||
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
||||
import kr.co.vividnext.sodalive.common.ToastMessage
|
||||
import kr.co.vividnext.sodalive.common.UtcRelativeTimeTextFormatter
|
||||
import kr.co.vividnext.sodalive.v2.main.home.data.HomeFollowingRepository
|
||||
import kr.co.vividnext.sodalive.v2.main.home.model.HomeFollowingUiState
|
||||
import kr.co.vividnext.sodalive.v2.main.home.model.homeFollowingAuthHeader
|
||||
import kr.co.vividnext.sodalive.v2.main.home.model.toUiState
|
||||
|
||||
class HomeFollowingViewModel(
|
||||
private val repository: HomeFollowingRepository,
|
||||
private val relativeTimeTextFormatter: UtcRelativeTimeTextFormatter
|
||||
) : BaseViewModel() {
|
||||
|
||||
private val _followingStateLiveData = MutableLiveData<HomeFollowingUiState>()
|
||||
val followingStateLiveData: LiveData<HomeFollowingUiState>
|
||||
get() = _followingStateLiveData
|
||||
|
||||
private val _toastLiveData = MutableLiveData<ToastMessage?>()
|
||||
val toastLiveData: LiveData<ToastMessage?>
|
||||
get() = _toastLiveData
|
||||
|
||||
private val _isLoading = MutableLiveData(false)
|
||||
val isLoading: LiveData<Boolean>
|
||||
get() = _isLoading
|
||||
|
||||
fun loadFollowing() {
|
||||
_isLoading.value = true
|
||||
_followingStateLiveData.value = HomeFollowingUiState.Loading
|
||||
|
||||
compositeDisposable.add(
|
||||
repository.getFollowing(authHeader = authHeader())
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(
|
||||
{
|
||||
_isLoading.value = false
|
||||
val data = it.data
|
||||
if (it.success && data != null) {
|
||||
_followingStateLiveData.value = data.toUiState(relativeTimeTextFormatter)
|
||||
} else {
|
||||
showUnknownError(it.message)
|
||||
}
|
||||
},
|
||||
{
|
||||
_isLoading.value = false
|
||||
it.message?.let { message -> Logger.e(message) }
|
||||
showUnknownError(it.message)
|
||||
}
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
private fun showUnknownError(message: String?) {
|
||||
_followingStateLiveData.value = HomeFollowingUiState.Error(message = message)
|
||||
_toastLiveData.value = ToastMessage(resId = R.string.common_error_unknown)
|
||||
}
|
||||
|
||||
private fun authHeader(): String? = homeFollowingAuthHeader(SharedPreferenceManager.token)
|
||||
}
|
||||
Reference in New Issue
Block a user