Bug 1853299 - Part 1: Prepare rc state for reanalysis

fenix/119.0
rahulsainani 12 months ago committed by mergify[bot]
parent 8eb81afee5
commit 9b4f4e7d1e

@ -13,7 +13,6 @@ import org.mozilla.fenix.shopping.store.ReviewQualityCheckAction
import org.mozilla.fenix.shopping.store.ReviewQualityCheckAction.FetchProductAnalysis import org.mozilla.fenix.shopping.store.ReviewQualityCheckAction.FetchProductAnalysis
import org.mozilla.fenix.shopping.store.ReviewQualityCheckAction.RetryProductAnalysis import org.mozilla.fenix.shopping.store.ReviewQualityCheckAction.RetryProductAnalysis
import org.mozilla.fenix.shopping.store.ReviewQualityCheckState import org.mozilla.fenix.shopping.store.ReviewQualityCheckState
import org.mozilla.fenix.shopping.store.ReviewQualityCheckState.OptedIn.ProductReviewState
/** /**
* Middleware that handles network requests for the review quality check feature. * Middleware that handles network requests for the review quality check feature.
@ -31,13 +30,13 @@ class ReviewQualityCheckNetworkMiddleware(
next: (ReviewQualityCheckAction) -> Unit, next: (ReviewQualityCheckAction) -> Unit,
action: ReviewQualityCheckAction, action: ReviewQualityCheckAction,
) { ) {
next(action)
when (action) { when (action) {
is ReviewQualityCheckAction.NetworkAction -> processAction(context.store, action) is ReviewQualityCheckAction.NetworkAction -> processAction(context.store, action)
else -> { else -> {
// no-op // no-op
} }
} }
next(action)
} }
private fun processAction( private fun processAction(
@ -46,8 +45,6 @@ class ReviewQualityCheckNetworkMiddleware(
) { ) {
when (action) { when (action) {
FetchProductAnalysis, RetryProductAnalysis -> { FetchProductAnalysis, RetryProductAnalysis -> {
store.dispatch(ReviewQualityCheckAction.UpdateProductReview(ProductReviewState.Loading))
scope.launch { scope.launch {
val analysis = reviewQualityCheckService.fetchProductReview() val analysis = reviewQualityCheckService.fetchProductReview()
val productReviewState = analysis.toProductReviewState() val productReviewState = analysis.toProductReviewState()

@ -28,6 +28,7 @@ class ReviewQualityCheckPreferencesMiddleware(
next: (ReviewQualityCheckAction) -> Unit, next: (ReviewQualityCheckAction) -> Unit,
action: ReviewQualityCheckAction, action: ReviewQualityCheckAction,
) { ) {
next(action)
when (action) { when (action) {
is ReviewQualityCheckAction.PreferencesMiddlewareAction -> { is ReviewQualityCheckAction.PreferencesMiddlewareAction -> {
processAction(context.store, action) processAction(context.store, action)
@ -37,8 +38,6 @@ class ReviewQualityCheckPreferencesMiddleware(
// no-op // no-op
} }
} }
// Forward the actions
next(action)
} }
private fun processAction( private fun processAction(

@ -72,12 +72,12 @@ sealed interface ReviewQualityCheckAction : Action {
/** /**
* Triggered when the user has opted in to the review quality check feature and the UI is opened. * Triggered when the user has opted in to the review quality check feature and the UI is opened.
*/ */
object FetchProductAnalysis : NetworkAction object FetchProductAnalysis : NetworkAction, UpdateAction
/** /**
* Triggered when the user retries to fetch product analysis after a failure. * Triggered when the user retries to fetch product analysis after a failure.
*/ */
object RetryProductAnalysis : NetworkAction object RetryProductAnalysis : NetworkAction, UpdateAction
/** /**
* Triggered when opening a link from the review quality check feature. * Triggered when opening a link from the review quality check feature.

@ -165,6 +165,17 @@ sealed interface ReviewQualityCheckState : State {
val analysisUrl: String, val analysisUrl: String,
) : RecommendedProductState ) : RecommendedProductState
} }
/**
* Returns [ReviewQualityCheckState] applying the given [transform] function if the current
* state is [OptedIn].
*/
fun mapIfOptedIn(transform: (OptedIn) -> ReviewQualityCheckState): ReviewQualityCheckState =
if (this is OptedIn) {
transform(this)
} else {
this
}
} }
/** /**

@ -66,10 +66,14 @@ private fun mapStateForUpdateAction(
} }
is ReviewQualityCheckAction.UpdateProductReview -> { is ReviewQualityCheckAction.UpdateProductReview -> {
if (state is ReviewQualityCheckState.OptedIn) { state.mapIfOptedIn {
state.copy(productReviewState = action.productReviewState) it.copy(productReviewState = action.productReviewState)
} else { }
state }
ReviewQualityCheckAction.FetchProductAnalysis, ReviewQualityCheckAction.RetryProductAnalysis -> {
state.mapIfOptedIn {
it.copy(productReviewState = ReviewQualityCheckState.OptedIn.ProductReviewState.Loading)
} }
} }
} }

Loading…
Cancel
Save