Commit cd5f7704343 for woocommerce

commit cd5f770434300721c91a02129412159bc17d8a78
Author: Luigi Teschio <gigitux@gmail.com>
Date:   Wed May 13 10:15:17 2026 +0200

    Fix quick edit field visibility (#64815)

    * show right fields bulk editing

    * Update quick edit field ordering

    * Fix quick edit sale price visibility

diff --git a/packages/js/experimental-products-app/changelog/fix-quick-edit-sale-price-visibility b/packages/js/experimental-products-app/changelog/fix-quick-edit-sale-price-visibility
new file mode 100644
index 00000000000..687fcde29a1
--- /dev/null
+++ b/packages/js/experimental-products-app/changelog/fix-quick-edit-sale-price-visibility
@@ -0,0 +1,4 @@
+Significance: patch
+Type: fix
+
+Experimental Products App: Show the sale price field after enabling on sale in quick edit.
diff --git a/packages/js/experimental-products-app/src/product-edit/index.tsx b/packages/js/experimental-products-app/src/product-edit/index.tsx
index a534d05e5d7..09ba72447fd 100644
--- a/packages/js/experimental-products-app/src/product-edit/index.tsx
+++ b/packages/js/experimental-products-app/src/product-edit/index.tsx
@@ -24,6 +24,7 @@ import { unlock } from '../lock-unlock';
 import {
 	buildMergedProductEditData,
 	findProductInList,
+	getProductEditRecord,
 	getProductWithUpdatedVariation,
 	getProductEditFields,
 	getVisibleProductEditFields,
@@ -147,10 +148,17 @@ export default function ProductEdit( { products }: ProductEditProps ) {
 					'product',
 					productId
 				) as unknown as ProductEntityRecord | false | undefined;
+				const rootRecordEdits = coreSelect.getEntityRecordEdits(
+					'root',
+					'product',
+					productId
+				) as Partial< ProductEntityRecord > | undefined;
 				const listedProduct = findProductInList( products, productId );
-				const product =
-					listedProduct ??
-					( rootRecord !== false ? rootRecord : undefined );
+				const product = getProductEditRecord(
+					listedProduct,
+					rootRecord,
+					rootRecordEdits
+				);
 				let record: ProductEntityRecord | false | undefined =
 					product ?? rootRecord;

diff --git a/packages/js/experimental-products-app/src/product-edit/utils.test.ts b/packages/js/experimental-products-app/src/product-edit/utils.test.ts
index 70ede4ed98c..e1c7c3647b3 100644
--- a/packages/js/experimental-products-app/src/product-edit/utils.test.ts
+++ b/packages/js/experimental-products-app/src/product-edit/utils.test.ts
@@ -13,6 +13,7 @@ import {
 	EXCLUDED_PRODUCT_EDIT_FIELD_IDS,
 	getProductWithUpdatedVariation,
 	getProductEditFields,
+	getProductEditRecord,
 	getProductVariationUpdatePath,
 	getVisibleProductEditFields,
 	isProductVariation,
@@ -210,6 +211,45 @@ describe( 'product edit utils', () => {
 		);
 	} );

+	it( 'uses edited product values over the listed product values', () => {
+		const listedProduct = buildProduct( {
+			id: 12,
+			name: 'Beanie',
+			on_sale: false,
+			regular_price: '15',
+			categories: [ { id: 22, name: 'Accessories' } ],
+		} );
+		const editedProduct = {
+			on_sale: true,
+			sale_price: '12',
+		};
+
+		expect(
+			getProductEditRecord( listedProduct, undefined, editedProduct )
+		).toEqual(
+			expect.objectContaining( {
+				on_sale: true,
+				sale_price: '12',
+				regular_price: '15',
+				categories: [ { id: 22, name: 'Accessories' } ],
+			} )
+		);
+	} );
+
+	it( 'falls back to the listed product when the root record is unavailable', () => {
+		const listedProduct = buildProduct( {
+			id: 12,
+			name: 'Beanie',
+		} );
+
+		expect( getProductEditRecord( listedProduct, false ) ).toBe(
+			listedProduct
+		);
+		expect( getProductEditRecord( listedProduct, undefined ) ).toBe(
+			listedProduct
+		);
+	} );
+
 	describe( 'getVisibleProductEditFields', () => {
 		const getVisibleFieldIds = ( products: ProductEntityRecord[] ) =>
 			getVisibleProductEditFields(
diff --git a/packages/js/experimental-products-app/src/product-edit/utils.ts b/packages/js/experimental-products-app/src/product-edit/utils.ts
index 683e5807bb2..6f45631691a 100644
--- a/packages/js/experimental-products-app/src/product-edit/utils.ts
+++ b/packages/js/experimental-products-app/src/product-edit/utils.ts
@@ -317,6 +317,32 @@ export function findProductInList(
 	}
 }

+export function getProductEditRecord(
+	listedProduct: ProductEntityRecord | undefined,
+	rootRecord: ProductEntityRecord | false | undefined,
+	rootRecordEdits?: Partial< ProductEntityRecord >
+) {
+	const editedRootRecord = rootRecord !== false ? rootRecord : undefined;
+	const hasRootRecordEdits =
+		rootRecordEdits && Object.keys( rootRecordEdits ).length > 0;
+
+	if ( listedProduct && hasRootRecordEdits ) {
+		return {
+			...listedProduct,
+			...rootRecordEdits,
+		};
+	}
+
+	if ( listedProduct && editedRootRecord ) {
+		return {
+			...listedProduct,
+			...editedRootRecord,
+		};
+	}
+
+	return listedProduct ?? editedRootRecord;
+}
+
 function getCommonProductTypeCompatibleFieldIds(
 	products: ProductEntityRecord[]
 ) {