diff --git a/.changeset/yellow-games-reflect.md b/.changeset/yellow-games-reflect.md new file mode 100644 index 0000000000..ebc7f02e00 --- /dev/null +++ b/.changeset/yellow-games-reflect.md @@ -0,0 +1,5 @@ +--- +"@medusajs/medusa": patch +--- + +fix(medusa): Product option values in CSV Export diff --git a/packages/medusa/src/strategies/batch-jobs/product/export.ts b/packages/medusa/src/strategies/batch-jobs/product/export.ts index d0f4e7d538..d073adf580 100644 --- a/packages/medusa/src/strategies/batch-jobs/product/export.ts +++ b/packages/medusa/src/strategies/batch-jobs/product/export.ts @@ -497,11 +497,17 @@ export default class ProductExportStrategy extends AbstractBatchJobStrategy { const columnNameNameValue = columnNameValueBuilder(i) + // option values are not guaranteed to keep the same order as options on product. Pick them in the same order as product options this.columnsDefinition[columnNameNameValue] = { name: columnNameNameValue, exportDescriptor: { - accessor: (variant: ProductVariant) => - variant?.options[i]?.value ?? "", + accessor: ( + variant: ProductVariant, + context?: { product?: Product } + ) => + variant?.options.find( + (ov) => ov.option_id === context!.product!.options[i]?.id + )?.value ?? "", entityName: "variant", }, } @@ -597,7 +603,7 @@ export default class ProductExportStrategy extends AbstractBatchJobStrategy { } if (columnSchema.entityName === "variant") { const formattedContent = csvCellContentFormatter( - columnSchema.accessor(variant) + columnSchema.accessor(variant, { product: product }) ) variantLineData.push(formattedContent) } diff --git a/packages/medusa/src/strategies/batch-jobs/product/types/index.ts b/packages/medusa/src/strategies/batch-jobs/product/types/index.ts index b5c3cff438..bedd1632a1 100644 --- a/packages/medusa/src/strategies/batch-jobs/product/types/index.ts +++ b/packages/medusa/src/strategies/batch-jobs/product/types/index.ts @@ -72,7 +72,10 @@ export type ProductExportDescriptor = entityName: Extract } | { - accessor: (variant: ProductVariant) => string + accessor: ( + variant: ProductVariant, + context?: { product?: Product } + ) => string entityName: Extract }