From 2b5bd13a1651d237cd6f3f93f546ad0c0d9f492e Mon Sep 17 00:00:00 2001 From: AnirudhBhat Date: Wed, 15 Jan 2025 13:45:56 +0530 Subject: [PATCH 1/7] pass in filter options in VariationSelectorRepository --- .../variations/selector/VariationSelectorRepository.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/variations/selector/VariationSelectorRepository.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/variations/selector/VariationSelectorRepository.kt index 32a5c32da1cb..180615bad5a1 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/variations/selector/VariationSelectorRepository.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/variations/selector/VariationSelectorRepository.kt @@ -10,6 +10,7 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map import kotlinx.coroutines.withContext import org.wordpress.android.fluxc.store.WCProductStore +import org.wordpress.android.fluxc.store.WCProductStore.VariationFilterOption import javax.inject.Inject class VariationSelectorRepository @Inject constructor( @@ -29,7 +30,7 @@ class VariationSelectorRepository @Inject constructor( productId: Long, offset: Int, pageSize: Int, - filterOptions: Map? = null + filterOptions: Map? = null ): Result { return productStore.fetchProductVariations( selectedSite.get(), From a0519a64f7b3ab669350ead8de7245a79d75fb05 Mon Sep 17 00:00:00 2001 From: AnirudhBhat Date: Wed, 15 Jan 2025 13:46:08 +0530 Subject: [PATCH 2/7] pass in filter options in WooPosVariationsDataSource --- .../variations/WooPosVariationsDataSource.kt | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsDataSource.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsDataSource.kt index 4873f05fb0bd..2b13d1efa9e3 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsDataSource.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsDataSource.kt @@ -52,11 +52,12 @@ class WooPosVariationsDataSource @Inject constructor( productId, forceRefresh = true, filterOptions = mapOf( - WCProductStore.VariationFilterOption.STATUS to "publish" + WCProductStore.VariationFilterOption.STATUS to VARIATION_STATUS_PUBLISH, + WCProductStore.VariationFilterOption.DOWNLOADABLE to VARIATION_DOWNLOADABLE_FALSE ) ) if (result.isSuccess) { - val remoteVariations = handler.getVariationsFlow(productId).firstOrNull()?.applyFilter() ?: emptyList() + val remoteVariations = handler.getVariationsFlow(productId).firstOrNull() ?: emptyList() updateCache(productId, remoteVariations) emit(FetchResult.Remote(Result.success(remoteVariations))) } else { @@ -74,11 +75,12 @@ class WooPosVariationsDataSource @Inject constructor( val result = handler.loadMore( productId, filterOptions = mapOf( - WCProductStore.VariationFilterOption.STATUS to VARIATION_STATUS_PUBLISH + WCProductStore.VariationFilterOption.STATUS to VARIATION_STATUS_PUBLISH, + WCProductStore.VariationFilterOption.DOWNLOADABLE to VARIATION_DOWNLOADABLE_FALSE ) ) if (result.isSuccess) { - val fetchedVariations = handler.getVariationsFlow(productId).first().applyFilter() + val fetchedVariations = handler.getVariationsFlow(productId).first() Result.success(fetchedVariations) } else { result.logFailure() @@ -90,6 +92,7 @@ class WooPosVariationsDataSource @Inject constructor( companion object { private const val VARIATION_STATUS_PUBLISH = "publish" + private const val VARIATION_DOWNLOADABLE_FALSE = "false" } } @@ -103,7 +106,3 @@ sealed class FetchResult { data class Cached(val data: List) : FetchResult() data class Remote(val result: Result>) : FetchResult() } - -private fun List.applyFilter(): List { - return filter { it.price != null && !it.isDownloadable } -} From d2e6b5ce68c91bf9ca1ecfcabbe67cd314154adf Mon Sep 17 00:00:00 2001 From: AnirudhBhat Date: Wed, 15 Jan 2025 14:38:17 +0530 Subject: [PATCH 3/7] update fluxc hash --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 251e231119b5..a5d12f7e95f5 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -87,7 +87,7 @@ stripe-terminal = '3.7.1' tinder-statemachine = '0.2.0' wiremock = '2.26.3' wordpress-aztec = 'v2.1.4' -wordpress-fluxc = 'trunk-0264533ce612f74e1ae6fcbaefeb69b252163774' +wordpress-fluxc = '3126-089493c6f41381ad213fd000bb3af55c0386c8ba' wordpress-login = '1.19.0' wordpress-libaddressinput = '0.0.2' wordpress-mediapicker = '0.3.1' From 5851857fcbea2d2749d29196d91e353077bf8e1f Mon Sep 17 00:00:00 2001 From: AnirudhBhat Date: Wed, 15 Jan 2025 17:05:31 +0530 Subject: [PATCH 4/7] Fixed failing tests --- .../WooPosVariationsDataSourceTest.kt | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/woopos/home/variations/WooPosVariationsDataSourceTest.kt b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/woopos/home/variations/WooPosVariationsDataSourceTest.kt index ba244fe8f969..70bc08706cee 100644 --- a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/woopos/home/variations/WooPosVariationsDataSourceTest.kt +++ b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/woopos/home/variations/WooPosVariationsDataSourceTest.kt @@ -151,7 +151,10 @@ class WooPosVariationsDataSourceTest { handler.fetchVariations( productId, forceRefresh = true, - mapOf(WCProductStore.VariationFilterOption.STATUS to "publish") + mapOf( + WCProductStore.VariationFilterOption.STATUS to "publish", + WCProductStore.VariationFilterOption.DOWNLOADABLE to "false" + ) ) ) .thenReturn(Result.failure(exception)) @@ -204,7 +207,13 @@ class WooPosVariationsDataSourceTest { whenever(handler.getVariationsFlow(productId)).thenReturn(flowOf(sampleProducts)) val exception = Exception("Load more failed") whenever( - handler.loadMore(productId, mapOf(WCProductStore.VariationFilterOption.STATUS to "publish")), + handler.loadMore( + productId, + mapOf( + WCProductStore.VariationFilterOption.STATUS to "publish", + WCProductStore.VariationFilterOption.DOWNLOADABLE to "false" + ) + ), ).thenReturn(Result.failure(exception)) whenever(variationsCache.get(productId)).thenReturn(sampleProducts) val sut = WooPosVariationsDataSource(handler, variationsCache) @@ -235,7 +244,10 @@ class WooPosVariationsDataSourceTest { handler.fetchVariations( productId, forceRefresh = true, - mapOf(WCProductStore.VariationFilterOption.STATUS to "publish") + mapOf( + WCProductStore.VariationFilterOption.STATUS to "publish", + WCProductStore.VariationFilterOption.DOWNLOADABLE to "false" + ) ) ).thenReturn(Result.failure(exception)) whenever(variationsCache.get(productId)).thenReturn(emptyList()) From 7c06b0fb0d5ec65019f78ff09b92e2927cca6c00 Mon Sep 17 00:00:00 2001 From: AnirudhBhat Date: Thu, 16 Jan 2025 10:22:31 +0530 Subject: [PATCH 5/7] Add client side downloadable filter until WC 9.7 is released --- .../home/items/variations/WooPosVariationsDataSource.kt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsDataSource.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsDataSource.kt index 2b13d1efa9e3..d579640a63cc 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsDataSource.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsDataSource.kt @@ -57,7 +57,7 @@ class WooPosVariationsDataSource @Inject constructor( ) ) if (result.isSuccess) { - val remoteVariations = handler.getVariationsFlow(productId).firstOrNull() ?: emptyList() + val remoteVariations = handler.getVariationsFlow(productId).firstOrNull()?.applyFilter() ?: emptyList() updateCache(productId, remoteVariations) emit(FetchResult.Remote(Result.success(remoteVariations))) } else { @@ -80,7 +80,7 @@ class WooPosVariationsDataSource @Inject constructor( ) ) if (result.isSuccess) { - val fetchedVariations = handler.getVariationsFlow(productId).first() + val fetchedVariations = handler.getVariationsFlow(productId).first().applyFilter() Result.success(fetchedVariations) } else { result.logFailure() @@ -106,3 +106,8 @@ sealed class FetchResult { data class Cached(val data: List) : FetchResult() data class Remote(val result: Result>) : FetchResult() } + +private fun List.applyFilter(): List { + return filter { !it.isDownloadable } // Keeping this filter for now, but it should be removed in the future after + // WC 9.7.0 is released. https://a8c.slack.com/archives/C070SJRA8DP/p1736795937571479 +} From 8f25974911123beeb7b6df7bf9c1f4f174d0f8c7 Mon Sep 17 00:00:00 2001 From: AnirudhBhat Date: Wed, 22 Jan 2025 14:40:18 +0530 Subject: [PATCH 6/7] Update fluxc hash --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a5d12f7e95f5..732dea432e93 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -87,7 +87,7 @@ stripe-terminal = '3.7.1' tinder-statemachine = '0.2.0' wiremock = '2.26.3' wordpress-aztec = 'v2.1.4' -wordpress-fluxc = '3126-089493c6f41381ad213fd000bb3af55c0386c8ba' +wordpress-fluxc = 'trunk-657a72d968f89dc2edd6a6e6e57f579643d1e213' wordpress-login = '1.19.0' wordpress-libaddressinput = '0.0.2' wordpress-mediapicker = '0.3.1' From 9f7fcbe89d224679e90dbf817cc2509c83d310d9 Mon Sep 17 00:00:00 2001 From: AnirudhBhat Date: Wed, 22 Jan 2025 15:49:56 +0530 Subject: [PATCH 7/7] Update login hash --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b4d29ecbd5c5..3f433c534c6e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -88,7 +88,7 @@ tinder-statemachine = '0.2.0' wiremock = '2.26.3' wordpress-aztec = 'v2.1.4' wordpress-fluxc = 'trunk-657a72d968f89dc2edd6a6e6e57f579643d1e213' -wordpress-login = '1.19.0' +wordpress-login = 'trunk-706a58b33ff8f1a2858ae64e51204426ec12fe7b' wordpress-libaddressinput = '0.0.2' wordpress-mediapicker = '0.3.1' wordpress-utils = '3.15.0'