81 lines
2.9 KiB
Kotlin
Raw Normal View History

package com.isolaatti.home.presentation
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
import com.isolaatti.auth.domain.AuthRepository
2023-08-06 22:11:28 -06:00
import com.isolaatti.posting.posts.domain.PostsRepository
import com.isolaatti.posting.posts.presentation.PostListingViewModelBase
import com.isolaatti.posting.posts.presentation.UpdateEvent
import com.isolaatti.profile.data.remote.UserProfileDto
import com.isolaatti.profile.domain.use_case.GetProfile
import com.isolaatti.utils.Resource
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
import javax.inject.Inject
@HiltViewModel
2023-08-06 22:11:28 -06:00
class FeedViewModel @Inject constructor(
private val getProfileUseCase: GetProfile,
private val authRepository: AuthRepository,
private val postsRepository: PostsRepository
) : PostListingViewModelBase() {
override fun getFeed(refresh: Boolean) {
viewModelScope.launch {
if (refresh) {
posts.value = null
}
2023-08-27 20:00:43 -06:00
postsRepository.getFeed(getLastId()).onEach { listResource ->
when (listResource) {
2023-08-06 22:11:28 -06:00
is Resource.Success -> {
2023-08-27 23:03:40 -06:00
val eventType = if((postsList?.size ?: 0) > 0) UpdateEvent.UpdateType.PAGE_ADDED else UpdateEvent.UpdateType.REFRESH
2023-08-06 22:11:28 -06:00
loadingPosts.postValue(false)
2023-08-27 20:00:43 -06:00
posts.postValue(Pair(postsList?.apply {
addAll(listResource.data ?: listOf())
} ?: listResource.data,
2023-08-27 23:03:40 -06:00
UpdateEvent(eventType, null)))
2023-08-27 20:00:43 -06:00
noMoreContent.postValue(listResource.data?.size == 0)
2023-08-06 22:11:28 -06:00
}
is Resource.Loading -> {
2023-08-15 00:02:29 -06:00
if(!refresh)
loadingPosts.postValue(true)
2023-08-06 22:11:28 -06:00
}
is Resource.Error -> {
2023-08-27 20:00:43 -06:00
//errorLoading.postValue(feedDtoResource.errorType)
2023-08-06 22:11:28 -06:00
}
2023-08-27 23:03:40 -06:00
2023-08-06 22:11:28 -06:00
}
2023-08-15 00:02:29 -06:00
isLoadingFromScrolling = false
2023-08-06 22:11:28 -06:00
}.flowOn(Dispatchers.IO).launchIn(this)
}
}
// User profile
private val _userProfile: MutableLiveData<UserProfileDto> = MutableLiveData()
val userProfile: LiveData<UserProfileDto> get() = _userProfile
fun getProfile() {
viewModelScope.launch {
2023-08-06 22:11:28 -06:00
authRepository.getUserId().onEach { userId ->
userId?.let {
2023-08-06 22:11:28 -06:00
getProfileUseCase(userId).onEach { profile ->
if (profile is Resource.Success) {
profile.data?.let { _userProfile.postValue(it) }
}
}.flowOn(Dispatchers.IO).launchIn(this)
}
}.flowOn(Dispatchers.IO).launchIn(this)
}
}
}