blob: cbe6cf0536c6b83dc9322acbd67852475b16132e [file] [log] [blame]
package com.airbnb.lottie.sample.compose.showcase
import android.app.Application
import android.util.Log
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.airbnb.lottie.sample.compose.LottieComposeApplication
import com.airbnb.lottie.sample.compose.api.FeaturedAnimationsResponse
import com.airbnb.lottie.sample.compose.api.LottieFilesApi
import com.airbnb.lottie.sample.compose.dagger.AssistedViewModelFactory
import com.airbnb.lottie.sample.compose.dagger.DaggerMvRxViewModelFactory
import com.airbnb.mvrx.*
import com.squareup.inject.assisted.Assisted
import com.squareup.inject.assisted.AssistedInject
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch
import retrofit2.Retrofit
import retrofit2.converter.moshi.MoshiConverterFactory
import retrofit2.create
import javax.inject.Inject
data class ShowcaseState(
val featuredAnimations: Async<FeaturedAnimationsResponse> = Uninitialized
) : MvRxState
class ShowcaseViewModel @AssistedInject constructor(
@Assisted initialState: ShowcaseState,
private var api: LottieFilesApi
) : MavericksViewModel<ShowcaseState>(initialState) {
init {
fetchFeatured()
}
fun fetchFeatured() {
suspend {
api.getFeatured()
}.execute(Dispatchers.IO) {
Log.d("Gabe", "fetchFeatured: $it")
copy(featuredAnimations = it)
}
}
@AssistedInject.Factory
interface Factory : AssistedViewModelFactory<ShowcaseViewModel, ShowcaseState> {
override fun create(initialState: ShowcaseState): ShowcaseViewModel
}
companion object : DaggerMvRxViewModelFactory<ShowcaseViewModel, ShowcaseState>(ShowcaseViewModel::class.java)
}