1 package com.airbnb.lottie.sample.compose.showcase 2 3 import com.airbnb.lottie.sample.compose.api.AnimationsResponseV2 4 import com.airbnb.lottie.sample.compose.api.LottieFilesApi 5 import com.airbnb.lottie.sample.compose.dagger.AssistedViewModelFactory 6 import com.airbnb.lottie.sample.compose.dagger.daggerMavericksViewModelFactory 7 import com.airbnb.mvrx.Async 8 import com.airbnb.mvrx.MavericksState 9 import com.airbnb.mvrx.MavericksViewModel 10 import com.airbnb.mvrx.MavericksViewModelFactory 11 import com.airbnb.mvrx.Uninitialized 12 import dagger.assisted.Assisted 13 import dagger.assisted.AssistedFactory 14 import dagger.assisted.AssistedInject 15 16 data class ShowcaseState( 17 val animations: Async<AnimationsResponseV2> = Uninitialized 18 ) : MavericksState 19 20 class ShowcaseViewModel @AssistedInject constructor( 21 @Assisted initialState: ShowcaseState, 22 private var api: LottieFilesApi 23 ) : MavericksViewModel<ShowcaseState>(initialState) { 24 25 init { 26 fetchFeatured() 27 } 28 fetchFeaturednull29 private fun fetchFeatured() { 30 suspend { 31 api.getFeatured() 32 }.execute { copy(animations = it) } 33 } 34 35 @AssistedFactory 36 interface Factory : AssistedViewModelFactory<ShowcaseViewModel, ShowcaseState> { createnull37 override fun create(initialState: ShowcaseState): ShowcaseViewModel 38 } 39 40 companion object : MavericksViewModelFactory<ShowcaseViewModel, ShowcaseState> by daggerMavericksViewModelFactory() 41 }