From 9b4f4e7d1e2c8dbcb8096520b63821797b889842 Mon Sep 17 00:00:00 2001 From: rahulsainani Date: Fri, 15 Sep 2023 15:32:39 +0200 Subject: [PATCH] Bug 1853299 - Part 1: Prepare rc state for reanalysis --- .../ReviewQualityCheckNetworkMiddleware.kt | 5 +---- .../ReviewQualityCheckPreferencesMiddleware.kt | 3 +-- .../fenix/shopping/store/ReviewQualityCheckAction.kt | 4 ++-- .../fenix/shopping/store/ReviewQualityCheckState.kt | 11 +++++++++++ .../fenix/shopping/store/ReviewQualityCheckStore.kt | 12 ++++++++---- 5 files changed, 23 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/shopping/middleware/ReviewQualityCheckNetworkMiddleware.kt b/app/src/main/java/org/mozilla/fenix/shopping/middleware/ReviewQualityCheckNetworkMiddleware.kt index dbda4a6c42..19011f0fb3 100644 --- a/app/src/main/java/org/mozilla/fenix/shopping/middleware/ReviewQualityCheckNetworkMiddleware.kt +++ b/app/src/main/java/org/mozilla/fenix/shopping/middleware/ReviewQualityCheckNetworkMiddleware.kt @@ -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.RetryProductAnalysis 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. @@ -31,13 +30,13 @@ class ReviewQualityCheckNetworkMiddleware( next: (ReviewQualityCheckAction) -> Unit, action: ReviewQualityCheckAction, ) { + next(action) when (action) { is ReviewQualityCheckAction.NetworkAction -> processAction(context.store, action) else -> { // no-op } } - next(action) } private fun processAction( @@ -46,8 +45,6 @@ class ReviewQualityCheckNetworkMiddleware( ) { when (action) { FetchProductAnalysis, RetryProductAnalysis -> { - store.dispatch(ReviewQualityCheckAction.UpdateProductReview(ProductReviewState.Loading)) - scope.launch { val analysis = reviewQualityCheckService.fetchProductReview() val productReviewState = analysis.toProductReviewState() diff --git a/app/src/main/java/org/mozilla/fenix/shopping/middleware/ReviewQualityCheckPreferencesMiddleware.kt b/app/src/main/java/org/mozilla/fenix/shopping/middleware/ReviewQualityCheckPreferencesMiddleware.kt index 34946272ee..8a34090248 100644 --- a/app/src/main/java/org/mozilla/fenix/shopping/middleware/ReviewQualityCheckPreferencesMiddleware.kt +++ b/app/src/main/java/org/mozilla/fenix/shopping/middleware/ReviewQualityCheckPreferencesMiddleware.kt @@ -28,6 +28,7 @@ class ReviewQualityCheckPreferencesMiddleware( next: (ReviewQualityCheckAction) -> Unit, action: ReviewQualityCheckAction, ) { + next(action) when (action) { is ReviewQualityCheckAction.PreferencesMiddlewareAction -> { processAction(context.store, action) @@ -37,8 +38,6 @@ class ReviewQualityCheckPreferencesMiddleware( // no-op } } - // Forward the actions - next(action) } private fun processAction( diff --git a/app/src/main/java/org/mozilla/fenix/shopping/store/ReviewQualityCheckAction.kt b/app/src/main/java/org/mozilla/fenix/shopping/store/ReviewQualityCheckAction.kt index f7ccc449c0..505d37b9f6 100644 --- a/app/src/main/java/org/mozilla/fenix/shopping/store/ReviewQualityCheckAction.kt +++ b/app/src/main/java/org/mozilla/fenix/shopping/store/ReviewQualityCheckAction.kt @@ -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. */ - object FetchProductAnalysis : NetworkAction + object FetchProductAnalysis : NetworkAction, UpdateAction /** * 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. diff --git a/app/src/main/java/org/mozilla/fenix/shopping/store/ReviewQualityCheckState.kt b/app/src/main/java/org/mozilla/fenix/shopping/store/ReviewQualityCheckState.kt index 0ced6adda2..ce43424e9a 100644 --- a/app/src/main/java/org/mozilla/fenix/shopping/store/ReviewQualityCheckState.kt +++ b/app/src/main/java/org/mozilla/fenix/shopping/store/ReviewQualityCheckState.kt @@ -165,6 +165,17 @@ sealed interface ReviewQualityCheckState : State { val analysisUrl: String, ) : 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 + } } /** diff --git a/app/src/main/java/org/mozilla/fenix/shopping/store/ReviewQualityCheckStore.kt b/app/src/main/java/org/mozilla/fenix/shopping/store/ReviewQualityCheckStore.kt index 50e040cc51..b92170eaa2 100644 --- a/app/src/main/java/org/mozilla/fenix/shopping/store/ReviewQualityCheckStore.kt +++ b/app/src/main/java/org/mozilla/fenix/shopping/store/ReviewQualityCheckStore.kt @@ -66,10 +66,14 @@ private fun mapStateForUpdateAction( } is ReviewQualityCheckAction.UpdateProductReview -> { - if (state is ReviewQualityCheckState.OptedIn) { - state.copy(productReviewState = action.productReviewState) - } else { - state + state.mapIfOptedIn { + it.copy(productReviewState = action.productReviewState) + } + } + + ReviewQualityCheckAction.FetchProductAnalysis, ReviewQualityCheckAction.RetryProductAnalysis -> { + state.mapIfOptedIn { + it.copy(productReviewState = ReviewQualityCheckState.OptedIn.ProductReviewState.Loading) } } }