You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
iceraven-browser/app/src/main/java/org/mozilla/fenix/shopping/ui/ReviewQualityCheckBottomShe...

104 lines
3.8 KiB
Kotlin

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.fenix.shopping.ui
import androidx.compose.animation.Crossfade
import androidx.compose.animation.animateContentSize
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import mozilla.components.lib.state.ext.observeAsState
import org.mozilla.fenix.shopping.store.ReviewQualityCheckAction
import org.mozilla.fenix.shopping.store.ReviewQualityCheckState
import org.mozilla.fenix.shopping.store.ReviewQualityCheckState.OptedIn.ProductReviewState.AnalysisPresent
import org.mozilla.fenix.shopping.store.ReviewQualityCheckStore
/**
* Top-level UI for the Review Quality Check feature.
*
* @param store [ReviewQualityCheckStore] that holds the state.
* @param onRequestDismiss Invoked when a user action requests dismissal of the bottom sheet.
* @param modifier The modifier to be applied to the Composable.
*/
@Composable
fun ReviewQualityCheckBottomSheet(
store: ReviewQualityCheckStore,
onRequestDismiss: () -> Unit,
modifier: Modifier = Modifier,
) {
val reviewQualityCheckState by store.observeAsState(ReviewQualityCheckState.Initial) { it }
ReviewQualityCheckScaffold(
onRequestDismiss = onRequestDismiss,
modifier = modifier.animateContentSize(),
) {
when (val state = reviewQualityCheckState) {
is ReviewQualityCheckState.NotOptedIn -> {
ReviewQualityCheckContextualOnboarding(
onPrimaryButtonClick = {
store.dispatch(ReviewQualityCheckAction.OptIn)
},
onSecondaryButtonClick = onRequestDismiss,
)
}
is ReviewQualityCheckState.OptedIn -> {
ProductReview(
state = state,
onOptOutClick = {
onRequestDismiss()
store.dispatch(ReviewQualityCheckAction.OptOut)
},
onProductRecommendationsEnabledStateChange = {
store.dispatch(ReviewQualityCheckAction.ToggleProductRecommendation)
},
onReviewGradeLearnMoreClick = {
// Bug 1847740
},
)
}
is ReviewQualityCheckState.Initial -> {}
}
}
}
@Composable
private fun ProductReview(
state: ReviewQualityCheckState.OptedIn,
onOptOutClick: () -> Unit,
onProductRecommendationsEnabledStateChange: (Boolean) -> Unit,
onReviewGradeLearnMoreClick: () -> Unit,
) {
Crossfade(
targetState = state.productReviewState,
label = "ProductReview-Crossfade",
) { productReviewState ->
when (productReviewState) {
is AnalysisPresent -> {
ProductAnalysis(
productRecommendationsEnabled = state.productRecommendationsPreference,
productAnalysis = productReviewState,
onOptOutClick = onOptOutClick,
onProductRecommendationsEnabledStateChange = onProductRecommendationsEnabledStateChange,
onReviewGradeLearnMoreClick = onReviewGradeLearnMoreClick,
)
}
is ReviewQualityCheckState.OptedIn.ProductReviewState.Error -> {
// Bug 1840113
}
is ReviewQualityCheckState.OptedIn.ProductReviewState.Loading -> {
ProductReviewLoading()
}
is ReviewQualityCheckState.OptedIn.ProductReviewState.NoAnalysisPresent -> {
// Bug 1840333
}
}
}
}