@medusajs/core-flows
Version:
Set of workflow definitions for Medusa
88 lines • 3.21 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateProductCsvStep = exports.generateProductCsvStepId = void 0;
const utils_1 = require("@medusajs/framework/utils");
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
const normalize_for_export_1 = require("../helpers/normalize-for-export");
const utils_2 = require("../utils");
const prodColumnPositions = new Map([
["Product Id", 0],
["Product Handle", 1],
["Product Title", 2],
["Product Status", 3],
["Product Description", 4],
["Product Subtitle", 5],
["Product External Id", 6],
["Product Thumbnail", 7],
["Product Collection Id", 8],
["Product Type Id", 9],
]);
const variantColumnPositions = new Map([
["Variant Id", 0],
["Variant Title", 1],
["Variant Sku", 3],
["Variant Upc", 4],
["Variant Ean", 5],
["Variant Hs Code", 6],
["Variant Mid Code", 7],
["Variant Manage Inventory", 8],
["Variant Allow Backorder", 9],
]);
const comparator = (a, b, columnMap) => {
if (columnMap.has(a) && columnMap.has(b)) {
return columnMap.get(a) - columnMap.get(b);
}
if (columnMap.has(a)) {
return -1;
}
if (columnMap.has(b)) {
return 1;
}
return a.localeCompare(b);
};
const csvSortFunction = (a, b) => {
if (a.startsWith("Product") && b.startsWith("Product")) {
return comparator(a, b, prodColumnPositions);
}
if (a.startsWith("Variant") && b.startsWith("Variant")) {
return comparator(a, b, variantColumnPositions);
}
return a.localeCompare(b);
};
exports.generateProductCsvStepId = "generate-product-csv";
/**
* This step generates a CSV file that exports products. The CSV
* file is created and stored using the registered [File Module Provider](https://docs.medusajs.com/resources/infrastructure-modules/file).
*
* @example
* const { data: products } = useQueryGraphStep({
* entity: "product",
* fields: ["*", "variants.*", "collection.*", "categories.*"]
* })
*
* // @ts-ignore
* const data = generateProductCsvStep(products)
*/
exports.generateProductCsvStep = (0, workflows_sdk_1.createStep)(exports.generateProductCsvStepId, async (products, { container }) => {
const regionService = container.resolve(utils_1.Modules.REGION);
const regions = await regionService.listRegions({}, { select: ["id", "name", "currency_code"] });
const normalizedData = (0, normalize_for_export_1.normalizeForExport)(products, { regions });
const csvContent = (0, utils_2.convertJsonToCsv)(normalizedData, {
sortHeader: csvSortFunction,
});
const fileModule = container.resolve(utils_1.Modules.FILE);
const filename = `${Date.now()}-product-exports.csv`;
const file = await fileModule.createFiles({
filename,
mimeType: "text/csv",
content: csvContent,
});
return new workflows_sdk_1.StepResponse({ id: file.id, filename }, file.id);
}, async (fileId, { container }) => {
if (!fileId) {
return;
}
const fileModule = container.resolve(utils_1.Modules.FILE);
await fileModule.deleteFiles(fileId);
});
//# sourceMappingURL=generate-product-csv.js.map
;