compose: details: Add preview for reviews

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2025-06-27 14:32:41 +08:00
parent 2eb4dd4abe
commit d353115ae7
4 changed files with 45 additions and 17 deletions

View File

@@ -24,7 +24,7 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.datasource.LoremIpsum import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.viewinterop.AndroidView import androidx.compose.ui.viewinterop.AndroidView
import coil3.annotation.ExperimentalCoilApi import coil3.annotation.ExperimentalCoilApi
import coil3.compose.AsyncImage import coil3.compose.AsyncImage
@@ -33,6 +33,7 @@ import coil3.request.ImageRequest
import coil3.request.crossfade import coil3.request.crossfade
import com.aurora.gplayapi.data.models.Review import com.aurora.gplayapi.data.models.Review
import com.aurora.store.R import com.aurora.store.R
import com.aurora.store.compose.preview.ReviewPreviewProvider
import com.aurora.store.compose.preview.coilPreviewProvider import com.aurora.store.compose.preview.coilPreviewProvider
/** /**
@@ -98,15 +99,8 @@ fun ReviewComposable(modifier: Modifier = Modifier, review: Review) {
@Preview(showBackground = true) @Preview(showBackground = true)
@Composable @Composable
@OptIn(ExperimentalCoilApi::class) @OptIn(ExperimentalCoilApi::class)
private fun ReviewComposablePreview() { private fun ReviewComposablePreview(@PreviewParameter(ReviewPreviewProvider::class) review: Review) {
CompositionLocalProvider(LocalAsyncImagePreviewHandler provides coilPreviewProvider) { CompositionLocalProvider(LocalAsyncImagePreviewHandler provides coilPreviewProvider) {
ReviewComposable( ReviewComposable(review = review)
review = Review(
userName = "Rahul Kumar Patel",
timeStamp = 1745750879,
comment = LoremIpsum(40).values.first(),
rating = 4
)
)
} }
} }

View File

@@ -10,7 +10,6 @@ import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import com.aurora.gplayapi.data.models.App import com.aurora.gplayapi.data.models.App
import com.aurora.gplayapi.data.models.Artwork import com.aurora.gplayapi.data.models.Artwork
import com.aurora.gplayapi.data.models.Rating import com.aurora.gplayapi.data.models.Rating
import com.aurora.gplayapi.data.models.Support
import com.aurora.gplayapi.data.models.details.TestingProgram import com.aurora.gplayapi.data.models.details.TestingProgram
import com.aurora.store.BuildConfig import com.aurora.store.BuildConfig

View File

@@ -0,0 +1,26 @@
/*
* SPDX-FileCopyrightText: 2025 The Calyx Institute
* SPDX-License-Identifier: GPL-3.0-or-later
*/
package com.aurora.store.compose.preview
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import androidx.compose.ui.tooling.preview.datasource.LoremIpsum
import com.aurora.gplayapi.data.models.Review
/**
* Preview provider for composable working with [Review]
*/
class ReviewPreviewProvider : PreviewParameterProvider<Review> {
override val values: Sequence<Review>
get() = sequenceOf(
Review(
userName = "Rahul Kumar Patel",
timeStamp = 1745750879,
rating = 4,
comment = LoremIpsum(40).values.first()
)
)
}

View File

@@ -19,6 +19,7 @@ import androidx.compose.material3.Text
import androidx.compose.material3.adaptive.WindowAdaptiveInfo import androidx.compose.material3.adaptive.WindowAdaptiveInfo
import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveable
@@ -28,6 +29,7 @@ import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.paging.LoadState import androidx.paging.LoadState
@@ -36,14 +38,19 @@ import androidx.paging.compose.LazyPagingItems
import androidx.paging.compose.collectAsLazyPagingItems import androidx.paging.compose.collectAsLazyPagingItems
import androidx.paging.compose.itemKey import androidx.paging.compose.itemKey
import androidx.window.core.layout.WindowWidthSizeClass import androidx.window.core.layout.WindowWidthSizeClass
import coil3.annotation.ExperimentalCoilApi
import coil3.compose.LocalAsyncImagePreviewHandler
import com.aurora.extensions.adaptiveNavigationIcon import com.aurora.extensions.adaptiveNavigationIcon
import com.aurora.gplayapi.data.models.Review import com.aurora.gplayapi.data.models.Review
import com.aurora.store.R import com.aurora.store.R
import com.aurora.store.compose.composables.TopAppBarComposable import com.aurora.store.compose.composables.TopAppBarComposable
import com.aurora.store.compose.composables.details.ReviewComposable import com.aurora.store.compose.composables.details.ReviewComposable
import com.aurora.store.compose.preview.ReviewPreviewProvider
import com.aurora.store.compose.preview.coilPreviewProvider
import com.aurora.store.viewmodel.details.AppDetailsViewModel import com.aurora.store.viewmodel.details.AppDetailsViewModel
import com.aurora.store.viewmodel.review.DetailsReviewViewModel import com.aurora.store.viewmodel.review.DetailsReviewViewModel
import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.MutableStateFlow
import kotlin.random.Random
@Composable @Composable
fun DetailsReviewScreen( fun DetailsReviewScreen(
@@ -165,10 +172,12 @@ private fun FilterHeader(onClick: (filter: Review.Filter) -> Unit) {
@Preview @Preview
@Composable @Composable
private fun DetailsReviewScreenPreview() { @OptIn(ExperimentalCoilApi::class)
val reviews = flowOf(PagingData.empty<Review>()).collectAsLazyPagingItems() private fun DetailsReviewScreenPreview(@PreviewParameter(ReviewPreviewProvider::class) review: Review) {
val reviews = List(10) { review.copy(commentId = Random.nextInt().toString()) }
val reviewsFlow = MutableStateFlow(PagingData.from(reviews)).collectAsLazyPagingItems()
ScreenContent( CompositionLocalProvider(LocalAsyncImagePreviewHandler provides coilPreviewProvider) {
reviews = reviews ScreenContent(reviews = reviewsFlow)
) }
} }