I’m having trouble with
I’m trying to update a Discount Rule on a control panel page, with the goal of changing the scope of one catalog to another (SPI/Wix Stores), but I’m getting an error: “Invalid patch in the discounts.values field.”
Working in
Wix Editor, Dev Mode, Wix Ecommerce (wix-ecom/Velo)
Error
Code
// backend
import { Permissions, webMethod } from "wix-web-module";
import {discountRules} from 'wix-ecom-backend';
import { elevate } from "wix-auth";
const elevatedUpdateDiscountRule = elevate(discountRules.updateDiscountRule);
export const updateDiscountRule = webMethod(
Permissions.Anyone,
async (id, discountRule) => {
try {
const result = await elevatedUpdateDiscountRule(
id,
discountRule
);
return result;
} catch (error) {
console.error(error);
}
},
);
// page code
[...]
import { updateDiscountRule } from...
let valueDiscountAmount;
let valueDiscountType;
let valueCatalogAppId;
let valueRevisionCurrent;
let valueDiscountName;
$w.onReady(async function () {
const _id = session.getItem("discountId");
const discount = await getDiscountRule(_id);
const catalogAppId = discount.discounts.values[0].specificItemsInfo.scopes[0].catalogItemFilter.catalogAppId;
[...]
$w('#dropdown4').value = catalogAppId == '215238eb-22a5-4c36-9e7b-e7c08025e04e' ? 'ALL PRODUCTS' : 'CUSTOMCATALOGAPP';
valueDiscountType = discount.discounts.values[0].discountType;
valueRevisionCurrent = discount.revision;
valueDiscountName = discount.name;
if (valueDiscountType === "PERCENTAGE") {
valueDiscountAmount = discount.discounts.values[0].percentage;
}
if (valueDiscountType === "FIXED_PRICE") {
valueDiscountAmount = discount.discounts.values[0].fixedPrice;
}
if (valueDiscountType === "FIXED_AMOUNT") {
valueDiscountAmount = discount.discounts.values[0].fixedAmount;
}
$w('#mainActionButton').onClick(async () => {
updateCurrent(_id);
});
[...]
});
function updateCurrentDiscount(id) {
[...]
valueCatalogAppId = $w('#dashboardInput3').value;
const scopeIdDiscountCurrent = valueCatalogAppId == '215238eb-22a5-4c36-9e7b-e7c08025e04e' ? `all_${valueCatalogAppId}` : `specific_${valueCatalogAppId}`;
const discountRule = {
name: valueDiscountName,
revision: valueRevisionCurrent
discounts: {
values: [{
discountType: valueDiscountType
...(valueDiscountType === "PERCENTAGE" && { percentage: Number(valueDiscountAmount) }),
...(valueDiscountType === "FIXED_AMOUNT" && { fixedAmount: String(valueDiscountAmount) }),
...(valueDiscountType === "FIXED_PRICE" && { fixedPrice: String(valueDiscountAmount) }),
targetType: "SPECIFIC_ITEMS",
specificItemsInfo: {
scopes: [{
type: "CATALOG_ITEM",
_id: scopeIdDiscountCurrent,
catalogItemFilter: {
catalogAppId: valueCatalogAppId,
catalogItemIds: []
}
}]
}
}]
}
};
const response = await updateDiscountRule(id, discountRule);
console.log(response);
}
