Commit 4daddc4509a for woocommerce
commit 4daddc4509a627ad52db95b113de3d2fea0ce5d5
Author: Luigi Teschio <gigitux@gmail.com>
Date: Wed May 20 10:01:48 2026 +0200
Fix empty product list filters (#65154)
diff --git a/packages/js/experimental-products-app/changelog/fix-rsm-3550-empty-filters b/packages/js/experimental-products-app/changelog/fix-rsm-3550-empty-filters
new file mode 100644
index 00000000000..492974170fb
--- /dev/null
+++ b/packages/js/experimental-products-app/changelog/fix-rsm-3550-empty-filters
@@ -0,0 +1,4 @@
+Significance: patch
+Type: fix
+
+Ignore empty product list filters until a value is selected.
diff --git a/packages/js/experimental-products-app/src/product-list/query.test.ts b/packages/js/experimental-products-app/src/product-list/query.test.ts
index 243ffd29a6e..8262128b32e 100644
--- a/packages/js/experimental-products-app/src/product-list/query.test.ts
+++ b/packages/js/experimental-products-app/src/product-list/query.test.ts
@@ -159,6 +159,33 @@ describe( 'buildProductListQuery', () => {
expect( query.stock_status ).toBe( 'onbackorder' );
} );
+ it( 'ignores empty taxonomy filters until a value is selected', () => {
+ const query = buildProductListQuery( {
+ ...baseView,
+ filters: [
+ {
+ field: 'brands',
+ operator: 'isAny',
+ value: undefined,
+ },
+ {
+ field: 'categories',
+ operator: 'isAny',
+ value: '',
+ },
+ {
+ field: 'tags',
+ operator: 'isAny',
+ value: [],
+ },
+ ],
+ } as View );
+
+ expect( query.brand ).toBeUndefined();
+ expect( query.category ).toBeUndefined();
+ expect( query.tag ).toBeUndefined();
+ } );
+
it( 'maps the tags isAny filter to the tag query param', () => {
const query = buildProductListQuery( {
...baseView,
diff --git a/packages/js/experimental-products-app/src/product-list/query.ts b/packages/js/experimental-products-app/src/product-list/query.ts
index d2747a27849..82d5514e42a 100644
--- a/packages/js/experimental-products-app/src/product-list/query.ts
+++ b/packages/js/experimental-products-app/src/product-list/query.ts
@@ -45,15 +45,17 @@ function getStringValues( value: unknown ): string[] {
function getNumericValues( value: unknown ): number[] {
const values = Array.isArray( value ) ? value : [ value ];
- return values.map( ( item ) => {
- if ( typeof item === 'number' ) {
- return item;
- }
- if ( typeof item === 'string' ) {
- return Number( item );
- }
- return Number.NaN;
- } );
+ return values
+ .map( ( item ) => {
+ if ( typeof item === 'number' ) {
+ return item;
+ }
+ if ( typeof item === 'string' && item.trim() !== '' ) {
+ return Number( item );
+ }
+ return Number.NaN;
+ } )
+ .filter( Number.isFinite );
}
function getPriceValue( value: unknown ): string | undefined {