diff --git a/.changeset/grumpy-bottles-move.md b/.changeset/grumpy-bottles-move.md new file mode 100644 index 0000000000..888fd1f035 --- /dev/null +++ b/.changeset/grumpy-bottles-move.md @@ -0,0 +1,5 @@ +--- +"@medusajs/medusa": patch +--- + +Product import - allow null product type diff --git a/integration-tests/api/__tests__/batch-jobs/product/import.js b/integration-tests/api/__tests__/batch-jobs/product/import.js index 6537122618..e8d01c9936 100644 --- a/integration-tests/api/__tests__/batch-jobs/product/import.js +++ b/integration-tests/api/__tests__/batch-jobs/product/import.js @@ -133,7 +133,6 @@ describe("Product import batch job", () => { expect(batchJob.status).toBe("completed") const productsResponse = await api.get("/admin/products", adminReqConfig) - expect(productsResponse.data.count).toBe(2) expect(productsResponse.data.products).toEqual( expect.arrayContaining([ @@ -181,6 +180,7 @@ describe("Product import batch job", () => { ]), }), ], + type: null, images: [ expect.objectContaining({ url: "test-image.png", @@ -287,6 +287,7 @@ describe("Product import batch job", () => { title: "Size", }), ], + type: expect.objectContaining({ value: "test-type" }), tags: [ expect.objectContaining({ value: "123", diff --git a/integration-tests/api/__tests__/batch-jobs/product/product-import.csv b/integration-tests/api/__tests__/batch-jobs/product/product-import.csv index 069701653b..3b44cda26d 100644 --- a/integration-tests/api/__tests__/batch-jobs/product/product-import.csv +++ b/integration-tests/api/__tests__/batch-jobs/product/product-import.csv @@ -1,5 +1,5 @@ Product id,Product Handle,Product Title,Product Subtitle,Product Description,Product Status,Product Thumbnail,Product Weight,Product Length,Product Width,Product Height,Product HS Code,Product Origin Country,Product MID Code,Product Material,Product Collection Title,Product Collection Handle,Product Type,Product Tags,Product Discountable,Product External ID,Variant id,Variant Title,Variant SKU,Variant Barcode,Variant Inventory Quantity,Variant Allow backorder,Variant Manage inventory,Variant Weight,Variant Length,Variant Width,Variant Height,Variant HS Code,Variant Origin Country,Variant MID Code,Variant Material,Price ImportLand [EUR],Price USD,Price denmark [DKK],Price Denmark [DKK],Option 1 Name,Option 1 Value,Option 2 Name,Option 2 Value,Image 1 Url -,test-product-product-1,Test product,,"Hopper Stripes Bedding, available as duvet cover, pillow sham and sheet.\n100% organic cotton, soft and crisp to the touch. Made in Portugal.",draft,,,,,,,,,,Test collection 1,test-collection1,test-type-1,123_1,TRUE,,,Test variant,test-sku-1,test-barcode-1,10,FALSE,TRUE,,,,,,,,,1.00,1.10,1.30,,test-option-1,option 1 value red,test-option-2,option 2 value 1,test-image.png +,test-product-product-1,Test product,,"Hopper Stripes Bedding, available as duvet cover, pillow sham and sheet.\n100% organic cotton, soft and crisp to the touch. Made in Portugal.",draft,,,,,,,,,,Test collection 1,test-collection1,,123_1,TRUE,,,Test variant,test-sku-1,test-barcode-1,10,FALSE,TRUE,,,,,,,,,1.00,1.10,1.30,,test-option-1,option 1 value red,test-option-2,option 2 value 1,test-image.png existing-product-id,test-product-product-2,Test product,,test-product-description,draft,test-image.png,,,,,,,,,Test collection,test-collection2,test-type,123,TRUE,,,Test variant,test-sku-2,test-barcode-2,10,FALSE,TRUE,,,,,,,,,,,,1.10,Size,Small,,,test-image.png existing-product-id,test-product-product-2,Test product,,test-product-description,draft,,,,,,,,,,Test collection,test-collection2,test-type,123,TRUE,,,Test variant,test-sku-3,test-barcode-3,10,FALSE,TRUE,,,,,,,,,,1.20,,,Size,Medium,,,test-image.png -existing-product-id,test-product-product-2,Test product,,test-product-description,draft,,,,,,,,,,Test collection,test-collection2,test-type,123,TRUE,,existing-variant-id,Test variant changed,test-sku-4,test-barcode-4,10,FALSE,TRUE,,,,,,,,,,,,,Size,Large,,,test-image.png \ No newline at end of file +existing-product-id,test-product-product-2,Test product,,test-product-description,draft,,,,,,,,,,Test collection,test-collection2,test-type,123,TRUE,,existing-variant-id,Test variant changed,test-sku-4,test-barcode-4,10,FALSE,TRUE,,,,,,,,,,,,,Size,Large,,,test-image.png diff --git a/packages/medusa/src/strategies/batch-jobs/product/import.ts b/packages/medusa/src/strategies/batch-jobs/product/import.ts index 99f8a2ff2d..8cbdd448a3 100644 --- a/packages/medusa/src/strategies/batch-jobs/product/import.ts +++ b/packages/medusa/src/strategies/batch-jobs/product/import.ts @@ -761,7 +761,23 @@ const CSVSchema: ProductImportCsvSchema = { { name: "Product Collection Title", mapTo: "product.collection.title" }, { name: "Product Collection Handle", mapTo: "product.collection.handle" }, // PRODUCT-TYPE - { name: "Product Type", mapTo: "product.type.value" }, + { + name: "Product Type", + match: /Product Type/, + reducer: ( + builtLine: TParsedProductImportRowData, + key, + value + ): TBuiltProductImportLine => { + if (typeof value === "undefined" || value === null) { + builtLine["product.type"] = undefined + } else { + builtLine["product.type.value"] = value + } + + return builtLine + }, + }, // PRODUCT-TAGS { name: "Product Tags", diff --git a/packages/medusa/src/strategies/batch-jobs/product/types.ts b/packages/medusa/src/strategies/batch-jobs/product/types.ts index 1fa30133e1..383fa20e5c 100644 --- a/packages/medusa/src/strategies/batch-jobs/product/types.ts +++ b/packages/medusa/src/strategies/batch-jobs/product/types.ts @@ -42,7 +42,7 @@ export type InjectedProps = { */ export type TParsedProductImportRowData = Record< string, - string | number | object | (string | number | object)[] + string | number | object | undefined | (string | number | object)[] > /**