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[]
) {