Skip to content

Commit df6be4c

Browse files
authored
Merge pull request #13072 from woocommerce/issue/13061-integrate-api-change
[Woo POS][non-simple products] Integrate "include_types" parameter for product endpoint
2 parents 7c2f5cc + 7f911b1 commit df6be4c

File tree

9 files changed

+63
-110
lines changed

9 files changed

+63
-110
lines changed

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/list/ProductListRepository.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,8 @@ class ProductListRepository @Inject constructor(
9696
offset = offset,
9797
sortType = sortType ?: productSortingChoice,
9898
filterOptions = productFilterOptions,
99-
excludedProductIds = excludedProductIds.orEmpty()
99+
excludedProductIds = excludedProductIds.orEmpty(),
100+
includeTypes = emptyList()
100101
).let { result ->
101102
if (result.isError) {
102103
AnalyticsTracker.track(

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/selector/ProductListHandler.kt

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import kotlinx.coroutines.flow.map
1212
import kotlinx.coroutines.flow.update
1313
import kotlinx.coroutines.sync.Mutex
1414
import kotlinx.coroutines.sync.withLock
15+
import org.wordpress.android.fluxc.store.WCProductStore
1516
import org.wordpress.android.fluxc.store.WCProductStore.ProductFilterOption
1617
import org.wordpress.android.fluxc.store.WCProductStore.SkuSearchOptions
1718
import java.util.concurrent.atomic.AtomicBoolean
@@ -48,6 +49,7 @@ class ProductListHandler @Inject constructor(private val repository: ProductSele
4849
searchQuery: String = "",
4950
filters: Map<ProductFilterOption, String> = emptyMap(),
5051
searchType: SearchType,
52+
includeType: List<WCProductStore.IncludeType> = emptyList(),
5153
): Result<Unit> = mutex.withLock {
5254
offset.value = 0
5355
searchResults.value = emptyList()
@@ -68,7 +70,7 @@ class ProductListHandler @Inject constructor(private val repository: ProductSele
6870
}
6971
}
7072
} else {
71-
fetchProducts(forceRefresh)
73+
fetchProducts(forceRefresh, includeType)
7274
}
7375
}
7476

@@ -84,8 +86,17 @@ class ProductListHandler @Inject constructor(private val repository: ProductSele
8486
}
8587
}
8688

87-
private suspend fun fetchProducts(forceRefresh: Boolean = false): Result<Unit> {
88-
return repository.fetchProducts(forceRefresh, offset.value, PAGE_SIZE, productFilters.value).onSuccess {
89+
private suspend fun fetchProducts(
90+
forceRefresh: Boolean = false,
91+
includeTypes: List<WCProductStore.IncludeType> = emptyList(),
92+
): Result<Unit> {
93+
return repository.fetchProducts(
94+
forceRefresh,
95+
offset.value,
96+
PAGE_SIZE,
97+
productFilters.value,
98+
includeTypes
99+
).onSuccess {
89100
canLoadMore.set(it)
90101
offset.value += PAGE_SIZE
91102
}.map { }

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/selector/ProductSelectorRepository.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,13 +75,15 @@ class ProductSelectorRepository @Inject constructor(
7575
forceRefresh: Boolean = false,
7676
offset: Int,
7777
pageSize: Int,
78-
filterOptions: Map<ProductFilterOption, String>
78+
filterOptions: Map<ProductFilterOption, String>,
79+
includeType: List<WCProductStore.IncludeType>,
7980
): Result<Boolean> {
8081
return productStore.fetchProducts(
8182
site = selectedSite.get(),
8283
offset = offset,
8384
pageSize = pageSize,
8485
filterOptions = filterOptions,
86+
includeTypes = includeType,
8587
forceRefresh = forceRefresh,
8688
)
8789
.let { result ->

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/featureflags/IsNonSimpleProductTypesEnabled.kt

Lines changed: 0 additions & 10 deletions
This file was deleted.

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/products/WooPosProductsDataSource.kt

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ package com.woocommerce.android.ui.woopos.home.items.products
22

33
import com.woocommerce.android.model.Product
44
import com.woocommerce.android.ui.products.ProductStatus
5-
import com.woocommerce.android.ui.products.ProductType
65
import com.woocommerce.android.ui.products.selector.ProductListHandler
7-
import com.woocommerce.android.ui.woopos.featureflags.IsNonSimpleProductTypesEnabled
86
import com.woocommerce.android.util.WooLog
97
import kotlinx.coroutines.Dispatchers
108
import kotlinx.coroutines.flow.Flow
@@ -22,7 +20,6 @@ import javax.inject.Singleton
2220
@Singleton
2321
class WooPosProductsDataSource @Inject constructor(
2422
private val handler: ProductListHandler,
25-
private val isNonSimpleProductTypesEnabled: IsNonSimpleProductTypesEnabled,
2623
) {
2724
private var productCache: List<Product> = emptyList()
2825
private val cacheMutex = Mutex()
@@ -40,15 +37,8 @@ class WooPosProductsDataSource @Inject constructor(
4037
val result = handler.loadFromCacheAndFetch(
4138
forceRefresh = forceRefreshProducts,
4239
searchType = ProductListHandler.SearchType.DEFAULT,
43-
filters =
44-
if (isNonSimpleProductTypesEnabled()) {
45-
mapOf(WCProductStore.ProductFilterOption.STATUS to ProductStatus.PUBLISH.value)
46-
} else {
47-
mapOf(
48-
WCProductStore.ProductFilterOption.TYPE to ProductType.SIMPLE.value,
49-
WCProductStore.ProductFilterOption.STATUS to ProductStatus.PUBLISH.value
50-
)
51-
}
40+
includeType = listOf(WCProductStore.IncludeType.Simple),
41+
filters = mapOf(WCProductStore.ProductFilterOption.STATUS to ProductStatus.PUBLISH.value)
5242
)
5343

5444
if (result.isSuccess) {

WooCommerce/src/main/kotlin/com/woocommerce/android/util/FeatureFlag.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ enum class FeatureFlag {
1414
ENDLESS_CAMPAIGNS_SUPPORT,
1515
REVAMP_WOO_SHIPPING,
1616
OBJECTIVE_SECTION,
17-
POS_NON_SIMPLE_PRODUCT_TYPES,
1817
POS_CASH_PAYMENTS,
1918
POS_RECEIPTS,
2019
PRODUCT_GLOBAL_UNIQUE_IDENTIFIER_SUPPORT;
@@ -29,7 +28,6 @@ enum class FeatureFlag {
2928
BETTER_CUSTOMER_SEARCH_M2,
3029
ORDER_CREATION_AUTO_TAX_RATE,
3130
REVAMP_WOO_SHIPPING,
32-
POS_NON_SIMPLE_PRODUCT_TYPES,
3331
POS_CASH_PAYMENTS,
3432
POS_RECEIPTS,
3533
PRODUCT_GLOBAL_UNIQUE_IDENTIFIER_SUPPORT -> PackageUtils.isDebugBuild()

WooCommerce/src/test/kotlin/com/woocommerce/android/ui/products/selector/ProductListHandlerTest.kt

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ internal class ProductListHandlerTest : BaseUnitTest() {
2222
on(it.observeProducts(any())) doReturn flow { emit(generateSampleProducts()) }
2323

2424
onBlocking {
25-
(it.fetchProducts(any(), any(), any(), any()))
25+
(it.fetchProducts(any(), any(), any(), any(), any()))
2626
} doReturn Result.success(true)
2727
}
2828

@@ -34,7 +34,7 @@ internal class ProductListHandlerTest : BaseUnitTest() {
3434

3535
@Test
3636
fun `when load invoked, then emits first 25 products from db`() = testBlocking {
37-
whenever(repo.fetchProducts(any(), any(), any(), any())).doReturn(Result.success(true))
37+
whenever(repo.fetchProducts(any(), any(), any(), any(), any())).doReturn(Result.success(true))
3838
val handler = ProductListHandler(repo)
3939
handler.loadFromCacheAndFetch(searchType = SearchType.DEFAULT)
4040

@@ -51,17 +51,23 @@ internal class ProductListHandlerTest : BaseUnitTest() {
5151
fun `when load invoked, then side fetches first 25 products from backend`() = testBlocking {
5252
val handler = ProductListHandler(repo)
5353
handler.loadFromCacheAndFetch(searchType = SearchType.DEFAULT)
54-
verify(repo).fetchProducts(false, 0, 25, emptyMap())
54+
verify(repo).fetchProducts(false, 0, 25, emptyMap(), emptyList())
5555
}
5656

5757
@Test
5858
fun `when load more invoked, then fetches next 25 products`() = testBlocking {
5959
val handler = ProductListHandler(repo)
60-
handler.loadFromCacheAndFetch(searchType = SearchType.DEFAULT)
60+
handler.loadFromCacheAndFetch(
61+
false,
62+
"",
63+
emptyMap(),
64+
searchType = SearchType.DEFAULT,
65+
emptyList()
66+
)
6167

6268
handler.loadMore()
6369

64-
verify(repo).fetchProducts(false, 25, 25, emptyMap())
70+
verify(repo).fetchProducts(false, 25, 25, emptyMap(), emptyList())
6571

6672
handler.productsFlow.test {
6773
val products = awaitItem()

0 commit comments

Comments
 (0)