UNPKG

@medusajs/core-flows

Version:

Set of workflow definitions for Medusa

104 lines 4.27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.setShippingOptionsPriceSetsStep = exports.setShippingOptionsPriceSetsStepId = void 0; const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk"); const utils_1 = require("@medusajs/framework/utils"); async function getCurrentShippingOptionPriceSetsLinks(shippingOptionIds, { remoteQuery }) { const shippingOptionPriceSetLinks = (await remoteQuery({ service: utils_1.LINKS.ShippingOptionPriceSet, variables: { filters: { shipping_option_id: shippingOptionIds }, }, fields: ["shipping_option_id", "price_set_id"], })); return shippingOptionPriceSetLinks.map((shippingOption) => { return { [utils_1.Modules.FULFILLMENT]: { shipping_option_id: shippingOption.shipping_option_id, }, [utils_1.Modules.PRICING]: { price_set_id: shippingOption.price_set_id, }, }; }); } exports.setShippingOptionsPriceSetsStepId = "set-shipping-options-price-sets-step"; /** * This step sets the price sets of one or more shipping options. */ exports.setShippingOptionsPriceSetsStep = (0, workflows_sdk_1.createStep)(exports.setShippingOptionsPriceSetsStepId, async (data, { container }) => { if (!data.length) { return; } const dataInputToProcess = data.filter((inputData) => { return inputData.price_sets?.length; }); if (!dataInputToProcess.length) { return; } const remoteLink = container.resolve(utils_1.ContainerRegistrationKeys.LINK); const remoteQuery = container.resolve(utils_1.ContainerRegistrationKeys.REMOTE_QUERY); const shippingOptionIds = dataInputToProcess.map((inputData) => inputData.id); const currentExistingLinks = await getCurrentShippingOptionPriceSetsLinks(shippingOptionIds, { remoteQuery }); const linksToRemove = currentExistingLinks .filter((existingLink) => { return !dataInputToProcess.some((input) => { return (input.id === existingLink[utils_1.Modules.FULFILLMENT].shipping_option_id && input.price_sets.includes(existingLink[utils_1.Modules.PRICING].price_set_id)); }); }) .map((link) => { return { [utils_1.Modules.FULFILLMENT]: { shipping_option_id: link[utils_1.Modules.FULFILLMENT].shipping_option_id, }, [utils_1.Modules.PRICING]: { price_set_id: link[utils_1.Modules.PRICING].price_set_id, }, }; }); const linksToCreate = dataInputToProcess .map((inputData) => { return inputData.price_sets.map((priceSet) => { const alreadyExists = currentExistingLinks.some((link) => { return (link[utils_1.Modules.FULFILLMENT].shipping_option_id === inputData.id && link[utils_1.Modules.PRICING].price_set_id === priceSet); }); if (alreadyExists) { return; } return { [utils_1.Modules.FULFILLMENT]: { shipping_option_id: inputData.id }, [utils_1.Modules.PRICING]: { price_set_id: priceSet }, }; }); }) .flat() .filter((d) => !!d); const promises = []; if (linksToRemove.length) { promises.push(remoteLink.dismiss(linksToRemove)); } if (linksToCreate.length) { promises.push(remoteLink.create(linksToCreate)); } await (0, utils_1.promiseAll)(promises); return new workflows_sdk_1.StepResponse(void 0, { linksToCreate: linksToRemove, linksToRemove: linksToCreate, }); }, async (rollbackData, { container }) => { if (!rollbackData) { return; } const remoteLink = container.resolve(utils_1.ContainerRegistrationKeys.LINK); const promises = []; if (rollbackData.linksToRemove.length) { promises.push(remoteLink.dismiss(rollbackData.linksToRemove)); } if (rollbackData.linksToCreate.length) { promises.push(remoteLink.create(rollbackData.linksToCreate)); } await (0, utils_1.promiseAll)(promises); }); //# sourceMappingURL=set-shipping-options-price-sets.js.map