blob: 35c7cd2d4c2b9acb87b267b18809ea465fce5efb [file] [log] [blame]
package com.airbnb.lottie.sample.compose.showcase
import androidx.compose.foundation.ScrollableColumn
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.rememberScrollState
import androidx.compose.material.Divider
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.ui.tooling.preview.Preview
import com.airbnb.lottie.sample.compose.ComposeFragment
import com.airbnb.lottie.sample.compose.R
import com.airbnb.lottie.sample.compose.composables.AnimationRow
import com.airbnb.lottie.sample.compose.composables.Loader
import com.airbnb.lottie.sample.compose.composables.Marquee
import com.airbnb.lottie.sample.compose.player.PlayerFragment
import com.airbnb.lottie.sample.compose.ui.LottieTheme
import com.airbnb.lottie.sample.compose.utils.findNavController
import com.airbnb.lottie.sample.compose.utils.mavericksViewModelAndState
import com.airbnb.mvrx.Loading
import com.airbnb.mvrx.Uninitialized
import com.airbnb.mvrx.asMavericksArgs
class ShowcaseFragment : ComposeFragment() {
@Composable
override fun root() {
ShowcasePage()
}
}
@Composable
fun ShowcasePage() {
val (_, showcaseState) = mavericksViewModelAndState<ShowcaseViewModel, ShowcaseState>()
val featuredAnimations = showcaseState.animations
val scrollState = rememberScrollState()
val navController = findNavController()
Box(
modifier = Modifier.fillMaxSize()
) {
ScrollableColumn(
scrollState = scrollState
) {
Marquee("Showcase")
featuredAnimations()?.data?.forEach { data ->
AnimationRow(
title = data.title,
previewUrl = data.preview_url ?: "",
previewBackgroundColor = data.bgColor,
) {
val args = PlayerFragment.Args.Url(data.file, backgroundColorStr = data.bg_color)
navController.navigate(R.id.player, args.asMavericksArgs())
}
Divider(color = Color.LightGray)
}
}
if (featuredAnimations is Uninitialized || featuredAnimations is Loading) {
Loader(modifier = Modifier.align(Alignment.Center))
}
}
}
@Preview(showBackground = true)
@Composable
fun DefaultPreview() {
LottieTheme {
ShowcasePage()
}
}