diff --git a/packages/medusa-plugin-add-ons/.gitignore b/packages/medusa-plugin-add-ons/.gitignore index e16f73f73a..718e6cc25c 100644 --- a/packages/medusa-plugin-add-ons/.gitignore +++ b/packages/medusa-plugin-add-ons/.gitignore @@ -11,4 +11,5 @@ node_modules /services /models /subscribers +/loaders diff --git a/packages/medusa-plugin-add-ons/src/api/routes/store/create-line-item.js b/packages/medusa-plugin-add-ons/src/api/routes/store/create-line-item.js index 069fa8e353..2cd3a4d7c9 100644 --- a/packages/medusa-plugin-add-ons/src/api/routes/store/create-line-item.js +++ b/packages/medusa-plugin-add-ons/src/api/routes/store/create-line-item.js @@ -32,16 +32,6 @@ export default async (req, res) => { cart = await cartService.addLineItem(cart._id, lineItem) cart = await cartService.decorate(cart, [], ["region"]) - cart.items = await Promise.all( - cart.items.map((item) => - lineItemService.decorate( - item, - ["title", "quantity", "thumbnail", "content", "should_merge"], - ["add_ons"] - ) - ) - ) - res.status(200).json({ cart }) } catch (err) { throw err diff --git a/packages/medusa-plugin-add-ons/src/api/routes/store/update-line-item.js b/packages/medusa-plugin-add-ons/src/api/routes/store/update-line-item.js index 323f259179..b3717325a7 100644 --- a/packages/medusa-plugin-add-ons/src/api/routes/store/update-line-item.js +++ b/packages/medusa-plugin-add-ons/src/api/routes/store/update-line-item.js @@ -45,16 +45,6 @@ export default async (req, res) => { cart = await cartService.decorate(cart, [], ["region"]) - cart.items = await Promise.all( - cart.items.map((item) => - lineItemService.decorate( - item, - ["title", "quantity", "thumbnail", "content", "should_merge"], - ["add_ons"] - ) - ) - ) - res.status(200).json({ cart }) } catch (err) { throw err diff --git a/packages/medusa-plugin-add-ons/src/loaders/decorator.js b/packages/medusa-plugin-add-ons/src/loaders/decorator.js new file mode 100644 index 0000000000..2a94b4f2cc --- /dev/null +++ b/packages/medusa-plugin-add-ons/src/loaders/decorator.js @@ -0,0 +1,26 @@ +export default (container, config) => { + const cartService = container.resolve("cartService") + const addOnLineItemService = container.resolve("addOnLineItemService") + + cartService.addDecorator(async (cart) => { + try { + cart.items = await Promise.all( + cart.items.map((item) => { + if (item.metadata && item.metadata.add_ons) { + return addOnLineItemService.decorate( + item, + ["title", "quantity", "thumbnail", "content", "should_merge"], + ["add_ons"] + ) + } else { + return item + } + }) + ) + + return cart + } catch (error) { + return cart + } + }) +}