• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }