@devx-commerce/plugin-loyalty
Version:
A starter for Medusa plugins.
77 lines • 6.35 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.removeLoyaltyFromCartWorkflow = void 0;
const utils_1 = require("@medusajs/framework/utils");
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
const core_flows_1 = require("@medusajs/medusa/core-flows");
const helper_1 = require("../../utils/helper");
const update_cart_promotion_1 = require("./custom/update-cart-promotion");
const get_cart_promotion_1 = require("./steps/get-cart-promotion");
const fields = [
"id",
"customer.*",
"promotions.*",
"promotions.application_method.*",
"promotions.rules.*",
"promotions.rules.values.*",
"currency_code",
"total",
"metadata",
"items.adjustments.*",
];
exports.removeLoyaltyFromCartWorkflow = (0, workflows_sdk_1.createWorkflow)("remove-loyalty-from-cart", (input) => {
const { data: carts } = (0, core_flows_1.useQueryGraphStep)({
entity: "cart",
fields,
filters: { id: input.cart_id },
options: { throwIfKeyNotFound: true },
});
const loyaltyPromo = (0, get_cart_promotion_1.getCartPromotionStep)({
cart: carts[0],
throwErrorOn: "not-found",
});
// Detach EVERY loyalty promotion on the cart, not just the resolved one.
// A cart can carry more than one if two applies raced; removing only the
// resolved promotion left the others attached and `active` forever, where
// no later apply/remove cycle could reach them.
const loyaltyPromos = (0, workflows_sdk_1.transform)({ carts }, ({ carts }) => {
const promotions = carts[0]?.promotions ?? [];
return promotions.filter((promotion) => promotion?.code?.startsWith(helper_1.LOYALTY_PROMOTION_CODE_PREFIX));
});
const loyaltyPromoCodes = (0, workflows_sdk_1.transform)({ loyaltyPromos }, ({ loyaltyPromos }) => loyaltyPromos.map((promotion) => promotion.code));
(0, workflows_sdk_1.when)(loyaltyPromo, (result) => !!result?.code).then(() => {
update_cart_promotion_1.updateCartPromotionsWorkflow.runAsStep({
input: {
cart_id: input.cart_id,
promo_codes: loyaltyPromoCodes,
action: utils_1.PromotionActions.REMOVE,
},
});
const newMetadata = (0, workflows_sdk_1.transform)({
carts,
}, (data) => {
const { loyalty_promo_id, ...rest } = data.carts[0].metadata || {};
return {
...rest,
loyalty_promo_id: null,
loyalty_amount_used: null,
};
});
(0, core_flows_1.updateCartsStep)([
{
id: input.cart_id,
metadata: newMetadata,
},
]);
const promotionsToDeactivate = (0, workflows_sdk_1.transform)({ loyaltyPromos }, ({ loyaltyPromos }) => loyaltyPromos.map((promotion) => ({
id: promotion.id,
status: "inactive",
})));
(0, core_flows_1.updatePromotionsStep)(promotionsToDeactivate);
});
return new workflows_sdk_1.WorkflowResponse({
success: true,
message: "Loyalty removed from cart successfully",
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3ZlLWxveWFsdHktZnJvbS1jYXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9jYXJ0L3JlbW92ZS1sb3lhbHR5LWZyb20tY2FydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBNkQ7QUFDN0QscUVBSzJDO0FBQzNDLDREQUlxQztBQUNyQywrQ0FHNEI7QUFDNUIsMEVBQThFO0FBQzlFLG1FQUFrRTtBQU1sRSxNQUFNLE1BQU0sR0FBRztJQUNiLElBQUk7SUFDSixZQUFZO0lBQ1osY0FBYztJQUNkLGlDQUFpQztJQUNqQyxvQkFBb0I7SUFDcEIsMkJBQTJCO0lBQzNCLGVBQWU7SUFDZixPQUFPO0lBQ1AsVUFBVTtJQUNWLHFCQUFxQjtDQUN0QixDQUFDO0FBRVcsUUFBQSw2QkFBNkIsR0FBRyxJQUFBLDhCQUFjLEVBQ3pELDBCQUEwQixFQUMxQixDQUFDLEtBQW9CLEVBQUUsRUFBRTtJQUN2QixNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUEsOEJBQWlCLEVBQUM7UUFDeEMsTUFBTSxFQUFFLE1BQU07UUFDZCxNQUFNO1FBQ04sT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUU7UUFDOUIsT0FBTyxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFO0tBQ3RDLENBQUMsQ0FBQztJQUVILE1BQU0sWUFBWSxHQUFHLElBQUEseUNBQW9CLEVBQUM7UUFDeEMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQWE7UUFDMUIsWUFBWSxFQUFFLFdBQVc7S0FDMUIsQ0FBQyxDQUFDO0lBRUgseUVBQXlFO0lBQ3pFLHlFQUF5RTtJQUN6RSwwRUFBMEU7SUFDMUUsZ0RBQWdEO0lBQ2hELE1BQU0sYUFBYSxHQUFHLElBQUEseUJBQVMsRUFBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1FBQ3ZELE1BQU0sVUFBVSxHQUFJLEtBQUssQ0FBQyxDQUFDLENBQWMsRUFBRSxVQUFVLElBQUksRUFBRSxDQUFDO1FBRTVELE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQ3JDLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLHNDQUE2QixDQUFDLENBQzNELENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0saUJBQWlCLEdBQUcsSUFBQSx5QkFBUyxFQUFDLEVBQUUsYUFBYSxFQUFFLEVBQUUsQ0FBQyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsQ0FDM0UsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUssQ0FBQyxDQUNsRCxDQUFDO0lBRUYsSUFBQSxvQkFBSSxFQUFDLFlBQVksRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ3ZELG9EQUE0QixDQUFDLFNBQVMsQ0FBQztZQUNyQyxLQUFLLEVBQUU7Z0JBQ0wsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO2dCQUN0QixXQUFXLEVBQUUsaUJBQWlCO2dCQUM5QixNQUFNLEVBQUUsd0JBQWdCLENBQUMsTUFBTTthQUNoQztTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sV0FBVyxHQUFHLElBQUEseUJBQVMsRUFDM0I7WUFDRSxLQUFLO1NBQ04sRUFDRCxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ1AsTUFBTSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1lBRW5FLE9BQU87Z0JBQ0wsR0FBRyxJQUFJO2dCQUNQLGdCQUFnQixFQUFFLElBQUk7Z0JBQ3RCLG1CQUFtQixFQUFFLElBQUk7YUFDMUIsQ0FBQztRQUNKLENBQUMsQ0FDRixDQUFDO1FBRUYsSUFBQSw0QkFBZSxFQUFDO1lBQ2Q7Z0JBQ0UsRUFBRSxFQUFFLEtBQUssQ0FBQyxPQUFPO2dCQUNqQixRQUFRLEVBQUUsV0FBVzthQUN0QjtTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sc0JBQXNCLEdBQUcsSUFBQSx5QkFBUyxFQUN0QyxFQUFFLGFBQWEsRUFBRSxFQUNqQixDQUFDLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxDQUNwQixhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2hDLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRTtZQUNoQixNQUFNLEVBQUUsVUFBbUI7U0FDNUIsQ0FBQyxDQUFDLENBQ04sQ0FBQztRQUVGLElBQUEsaUNBQW9CLEVBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUMvQyxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sSUFBSSxnQ0FBZ0IsQ0FBQztRQUMxQixPQUFPLEVBQUUsSUFBSTtRQUNiLE9BQU8sRUFBRSx3Q0FBd0M7S0FDbEQsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUNGLENBQUMifQ==