fix(link-modules,core-flows): Carry over cart promotions to order promotions (#12920)
what: - Carry over cart promotions to order promotions
This commit is contained in:
1 parent
541e791b9b
commit
8c4228fc42
16 files changed
+200
-203
No files matched your search
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
"@medusajs/link-modules": patch
|
||||||
|
"@medusajs/core-flows": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
fix(link-modules,core-flows): Carry over cart promotions to order promotions
|
||||||
@@ -1252,6 +1252,60 @@ medusaIntegrationTestRunner({
|
|||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it("should successfully complete cart with promotions", async () => {
|
||||||
|
const oldCart = (
|
||||||
|
await api.get(`/store/carts/${cart.id}`, storeHeaders)
|
||||||
|
).data.cart
|
||||||
|
|
||||||
|
createCartCreditLinesWorkflow.run({
|
||||||
|
input: [
|
||||||
|
{
|
||||||
|
cart_id: oldCart.id,
|
||||||
|
amount: oldCart.total,
|
||||||
|
currency_code: "usd",
|
||||||
|
reference: "test",
|
||||||
|
reference_id: "test",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
container: appContainer,
|
||||||
|
})
|
||||||
|
|
||||||
|
const cartResponse = await api.post(
|
||||||
|
`/store/carts/${cart.id}/complete`,
|
||||||
|
{},
|
||||||
|
storeHeaders
|
||||||
|
)
|
||||||
|
|
||||||
|
const orderResponse = await api.get(
|
||||||
|
`/store/orders/${cartResponse.data.order.id}?fields=+promotions.*`,
|
||||||
|
storeHeaders
|
||||||
|
)
|
||||||
|
|
||||||
|
expect(cartResponse.status).toEqual(200)
|
||||||
|
expect(orderResponse.data.order).toEqual(
|
||||||
|
expect.objectContaining({
|
||||||
|
promotions: [
|
||||||
|
expect.objectContaining({
|
||||||
|
code: promotion.code,
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
items: expect.arrayContaining([
|
||||||
|
expect.objectContaining({
|
||||||
|
unit_price: 1500,
|
||||||
|
compare_at_unit_price: null,
|
||||||
|
quantity: 1,
|
||||||
|
adjustments: expect.arrayContaining([
|
||||||
|
expect.objectContaining({
|
||||||
|
amount: 100,
|
||||||
|
code: promotion.code,
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
})
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
it("should successfully complete cart without shipping for digital products", async () => {
|
it("should successfully complete cart without shipping for digital products", async () => {
|
||||||
/**
|
/**
|
||||||
* Product has a shipping profile so cart item should not require shipping
|
* Product has a shipping profile so cart item should not require shipping
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ export const cartFieldsForRefreshSteps = [
|
|||||||
"shipping_methods.tax_lines.*",
|
"shipping_methods.tax_lines.*",
|
||||||
"customer.*",
|
"customer.*",
|
||||||
"customer.groups.*",
|
"customer.groups.*",
|
||||||
|
"promotions.id",
|
||||||
"promotions.code",
|
"promotions.code",
|
||||||
"payment_collection.id",
|
"payment_collection.id",
|
||||||
"payment_collection.raw_amount",
|
"payment_collection.raw_amount",
|
||||||
@@ -105,6 +106,7 @@ export const completeCartFields = [
|
|||||||
"credit_lines.*",
|
"credit_lines.*",
|
||||||
"payment_collection.*",
|
"payment_collection.*",
|
||||||
"payment_collection.payment_sessions.*",
|
"payment_collection.payment_sessions.*",
|
||||||
|
"promotions.id",
|
||||||
"items.variant.id",
|
"items.variant.id",
|
||||||
"items.variant.product.id",
|
"items.variant.product.id",
|
||||||
"items.variant.product.is_giftcard",
|
"items.variant.product.is_giftcard",
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import {
|
import {
|
||||||
CartCreditLineDTO,
|
CartCreditLineDTO,
|
||||||
CartWorkflowDTO,
|
CartWorkflowDTO,
|
||||||
|
LinkDefinition,
|
||||||
|
PromotionDTO,
|
||||||
UsageComputedActions,
|
UsageComputedActions,
|
||||||
} from "@medusajs/framework/types"
|
} from "@medusajs/framework/types"
|
||||||
import {
|
import {
|
||||||
@@ -326,13 +328,22 @@ export const completeCartWorkflow = createWorkflow(
|
|||||||
const linksToCreate = transform(
|
const linksToCreate = transform(
|
||||||
{ cart, createdOrder },
|
{ cart, createdOrder },
|
||||||
({ cart, createdOrder }) => {
|
({ cart, createdOrder }) => {
|
||||||
const links: Record<string, any>[] = [
|
const links: LinkDefinition[] = [
|
||||||
{
|
{
|
||||||
[Modules.ORDER]: { order_id: createdOrder.id },
|
[Modules.ORDER]: { order_id: createdOrder.id },
|
||||||
[Modules.CART]: { cart_id: cart.id },
|
[Modules.CART]: { cart_id: cart.id },
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
if (cart.promotions?.length) {
|
||||||
|
cart.promotions.forEach((promotion: PromotionDTO) => {
|
||||||
|
links.push({
|
||||||
|
[Modules.ORDER]: { order_id: createdOrder.id },
|
||||||
|
[Modules.PROMOTION]: { promotion_id: promotion.id },
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
if (isDefined(cart.payment_collection?.id)) {
|
if (isDefined(cart.payment_collection?.id)) {
|
||||||
links.push({
|
links.push({
|
||||||
[Modules.ORDER]: { order_id: createdOrder.id },
|
[Modules.ORDER]: { order_id: createdOrder.id },
|
||||||
|
|||||||
@@ -27,10 +27,8 @@ export const draftOrderFieldsForRefreshSteps = [
|
|||||||
"shipping_methods.tax_lines.*",
|
"shipping_methods.tax_lines.*",
|
||||||
"customer.*",
|
"customer.*",
|
||||||
"customer.groups.*",
|
"customer.groups.*",
|
||||||
"promotion_link.*",
|
"promotions.id",
|
||||||
"promotion_link.promotion",
|
"promotions.code",
|
||||||
"promotion_link.promotion.id",
|
|
||||||
"promotion_link.promotion.code",
|
|
||||||
"subtotal",
|
"subtotal",
|
||||||
"item_total",
|
"item_total",
|
||||||
"total",
|
"total",
|
||||||
|
|||||||
@@ -27,24 +27,24 @@ export const addDraftOrderItemsWorkflowId = "add-draft-order-items"
|
|||||||
/**
|
/**
|
||||||
* This workflow adds items to a draft order. It's used by the
|
* This workflow adds items to a draft order. It's used by the
|
||||||
* [Add Item to Draft Order Admin API Route](https://docs.medusajs.com/api/admin#draft-orders_postdraftordersidedititems).
|
* [Add Item to Draft Order Admin API Route](https://docs.medusajs.com/api/admin#draft-orders_postdraftordersidedititems).
|
||||||
*
|
*
|
||||||
* You can use this workflow within your customizations or your own custom workflows, allowing you to wrap custom logic around adding items to
|
* You can use this workflow within your customizations or your own custom workflows, allowing you to wrap custom logic around adding items to
|
||||||
* a draft order.
|
* a draft order.
|
||||||
*
|
*
|
||||||
* @example
|
* @example
|
||||||
* const { result } = await addDraftOrderItemsWorkflow(container)
|
* const { result } = await addDraftOrderItemsWorkflow(container)
|
||||||
* .run({
|
* .run({
|
||||||
* input: {
|
* input: {
|
||||||
* order_id: "order_123",
|
* order_id: "order_123",
|
||||||
* items: [{
|
* items: [{
|
||||||
* variant_id: "variant_123",
|
* variant_id: "variant_123",
|
||||||
* quantity: 1
|
* quantity: 1
|
||||||
* }]
|
* }]
|
||||||
* }
|
* }
|
||||||
* })
|
* })
|
||||||
*
|
*
|
||||||
* @summary
|
* @summary
|
||||||
*
|
*
|
||||||
* Add items to a draft order.
|
* Add items to a draft order.
|
||||||
*/
|
*/
|
||||||
export const addDraftOrderItemsWorkflow = createWorkflow(
|
export const addDraftOrderItemsWorkflow = createWorkflow(
|
||||||
@@ -52,13 +52,14 @@ export const addDraftOrderItemsWorkflow = createWorkflow(
|
|||||||
function (
|
function (
|
||||||
input: WorkflowData<OrderWorkflow.OrderEditAddNewItemWorkflowInput>
|
input: WorkflowData<OrderWorkflow.OrderEditAddNewItemWorkflowInput>
|
||||||
) {
|
) {
|
||||||
const order: OrderDTO = useRemoteQueryStep({
|
const order: OrderDTO & { promotions: { code: string }[] } =
|
||||||
entry_point: "orders",
|
useRemoteQueryStep({
|
||||||
fields: draftOrderFieldsForRefreshSteps,
|
entry_point: "orders",
|
||||||
variables: { id: input.order_id },
|
fields: draftOrderFieldsForRefreshSteps,
|
||||||
list: false,
|
variables: { id: input.order_id },
|
||||||
throw_if_key_not_found: true,
|
list: false,
|
||||||
}).config({ name: "order-query" })
|
throw_if_key_not_found: true,
|
||||||
|
}).config({ name: "order-query" })
|
||||||
|
|
||||||
const orderChange: OrderChangeDTO = useRemoteQueryStep({
|
const orderChange: OrderChangeDTO = useRemoteQueryStep({
|
||||||
entry_point: "order_change",
|
entry_point: "order_change",
|
||||||
@@ -92,19 +93,10 @@ export const addDraftOrderItemsWorkflow = createWorkflow(
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
const appliedPromoCodes: string[] = transform(order, (order) => {
|
const appliedPromoCodes: string[] = transform(
|
||||||
const promotionLink = (order as any).promotion_link
|
order,
|
||||||
|
(order) => order.promotions?.map((promotion) => promotion.code) ?? []
|
||||||
if (!promotionLink) {
|
)
|
||||||
return []
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Array.isArray(promotionLink)) {
|
|
||||||
return promotionLink.map((promo) => promo.promotion.code)
|
|
||||||
}
|
|
||||||
|
|
||||||
return [promotionLink.promotion.code]
|
|
||||||
})
|
|
||||||
|
|
||||||
// If any the order has any promo codes, then we need to refresh the adjustments.
|
// If any the order has any promo codes, then we need to refresh the adjustments.
|
||||||
when(
|
when(
|
||||||
|
|||||||
+13
-18
@@ -48,10 +48,10 @@ export interface AddDraftOrderShippingMethodsWorkflowInput {
|
|||||||
/**
|
/**
|
||||||
* This workflow adds shipping methods to a draft order. It's used by the
|
* This workflow adds shipping methods to a draft order. It's used by the
|
||||||
* [Add Shipping Method to Draft Order Admin API Route](https://docs.medusajs.com/api/admin#draft-orders_postdraftordersideditshippingmethods).
|
* [Add Shipping Method to Draft Order Admin API Route](https://docs.medusajs.com/api/admin#draft-orders_postdraftordersideditshippingmethods).
|
||||||
*
|
*
|
||||||
* You can use this workflow within your customizations or your own custom workflows, allowing you to wrap custom logic around adding shipping methods to
|
* You can use this workflow within your customizations or your own custom workflows, allowing you to wrap custom logic around adding shipping methods to
|
||||||
* a draft order.
|
* a draft order.
|
||||||
*
|
*
|
||||||
* @example
|
* @example
|
||||||
* const { result } = await addDraftOrderShippingMethodsWorkflow(container)
|
* const { result } = await addDraftOrderShippingMethodsWorkflow(container)
|
||||||
* .run({
|
* .run({
|
||||||
@@ -61,15 +61,19 @@ export interface AddDraftOrderShippingMethodsWorkflowInput {
|
|||||||
* custom_amount: 10
|
* custom_amount: 10
|
||||||
* }
|
* }
|
||||||
* })
|
* })
|
||||||
*
|
*
|
||||||
* @summary
|
* @summary
|
||||||
*
|
*
|
||||||
* Add shipping methods to a draft order.
|
* Add shipping methods to a draft order.
|
||||||
*/
|
*/
|
||||||
export const addDraftOrderShippingMethodsWorkflow = createWorkflow(
|
export const addDraftOrderShippingMethodsWorkflow = createWorkflow(
|
||||||
addDraftOrderShippingMethodsWorkflowId,
|
addDraftOrderShippingMethodsWorkflowId,
|
||||||
function (input: WorkflowData<AddDraftOrderShippingMethodsWorkflowInput>) {
|
function (input: WorkflowData<AddDraftOrderShippingMethodsWorkflowInput>) {
|
||||||
const order: OrderDTO = useRemoteQueryStep({
|
const order: OrderDTO & {
|
||||||
|
promotions: {
|
||||||
|
code: string
|
||||||
|
}[]
|
||||||
|
} = useRemoteQueryStep({
|
||||||
entry_point: "orders",
|
entry_point: "orders",
|
||||||
fields: draftOrderFieldsForRefreshSteps,
|
fields: draftOrderFieldsForRefreshSteps,
|
||||||
variables: { id: input.order_id },
|
variables: { id: input.order_id },
|
||||||
@@ -133,19 +137,10 @@ export const addDraftOrderShippingMethodsWorkflow = createWorkflow(
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
const appliedPromoCodes = transform(order, (order) => {
|
const appliedPromoCodes: string[] = transform(
|
||||||
const promotionLink = (order as any).promotion_link
|
order,
|
||||||
|
(order) => order.promotions?.map((promotion) => promotion.code) ?? []
|
||||||
if (!promotionLink) {
|
)
|
||||||
return []
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Array.isArray(promotionLink)) {
|
|
||||||
return promotionLink.map((promo) => promo.promotion.code)
|
|
||||||
}
|
|
||||||
|
|
||||||
return [promotionLink.promotion.code]
|
|
||||||
})
|
|
||||||
|
|
||||||
// If any the order has any promo codes, then we need to refresh the adjustments.
|
// If any the order has any promo codes, then we need to refresh the adjustments.
|
||||||
when(
|
when(
|
||||||
|
|||||||
@@ -33,10 +33,10 @@ export interface CancelDraftOrderEditWorkflowInput {
|
|||||||
/**
|
/**
|
||||||
* This workflow cancels a draft order edit. It's used by the
|
* This workflow cancels a draft order edit. It's used by the
|
||||||
* [Cancel Draft Order Edit Admin API Route](https://docs.medusajs.com/api/admin#draft-orders_deletedraftordersidedit).
|
* [Cancel Draft Order Edit Admin API Route](https://docs.medusajs.com/api/admin#draft-orders_deletedraftordersidedit).
|
||||||
*
|
*
|
||||||
* You can use this workflow within your customizations or your own custom workflows, allowing you to wrap custom logic around
|
* You can use this workflow within your customizations or your own custom workflows, allowing you to wrap custom logic around
|
||||||
* cancelling a draft order edit.
|
* cancelling a draft order edit.
|
||||||
*
|
*
|
||||||
* @example
|
* @example
|
||||||
* const { result } = await cancelDraftOrderEditWorkflow(container)
|
* const { result } = await cancelDraftOrderEditWorkflow(container)
|
||||||
* .run({
|
* .run({
|
||||||
@@ -44,15 +44,19 @@ export interface CancelDraftOrderEditWorkflowInput {
|
|||||||
* order_id: "order_123",
|
* order_id: "order_123",
|
||||||
* }
|
* }
|
||||||
* })
|
* })
|
||||||
*
|
*
|
||||||
* @summary
|
* @summary
|
||||||
*
|
*
|
||||||
* Cancel a draft order edit.
|
* Cancel a draft order edit.
|
||||||
*/
|
*/
|
||||||
export const cancelDraftOrderEditWorkflow = createWorkflow(
|
export const cancelDraftOrderEditWorkflow = createWorkflow(
|
||||||
cancelDraftOrderEditWorkflowId,
|
cancelDraftOrderEditWorkflowId,
|
||||||
function (input: WorkflowData<CancelDraftOrderEditWorkflowInput>) {
|
function (input: WorkflowData<CancelDraftOrderEditWorkflowInput>) {
|
||||||
const order: OrderDTO = useRemoteQueryStep({
|
const order: OrderDTO & {
|
||||||
|
promotions: {
|
||||||
|
code: string
|
||||||
|
}[]
|
||||||
|
} = useRemoteQueryStep({
|
||||||
entry_point: "orders",
|
entry_point: "orders",
|
||||||
fields: ["version", ...draftOrderFieldsForRefreshSteps],
|
fields: ["version", ...draftOrderFieldsForRefreshSteps],
|
||||||
variables: { id: input.order_id },
|
variables: { id: input.order_id },
|
||||||
@@ -125,18 +129,12 @@ export const cancelDraftOrderEditWorkflow = createWorkflow(
|
|||||||
const promotionsToRefresh = transform(
|
const promotionsToRefresh = transform(
|
||||||
{ order, promotionsToRemove, promotionsToRestore },
|
{ order, promotionsToRemove, promotionsToRestore },
|
||||||
({ order, promotionsToRemove, promotionsToRestore }) => {
|
({ order, promotionsToRemove, promotionsToRestore }) => {
|
||||||
const promotionLink = (order as any).promotion_link
|
const orderPromotions = order.promotions
|
||||||
const codes: Set<string> = new Set()
|
const codes: Set<string> = new Set()
|
||||||
|
|
||||||
if (promotionLink) {
|
orderPromotions?.forEach((promo) => {
|
||||||
if (Array.isArray(promotionLink)) {
|
codes.add(promo.code)
|
||||||
promotionLink.forEach((promo) => {
|
})
|
||||||
codes.add(promo.promotion.code)
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
codes.add(promotionLink.promotion.code)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const code of promotionsToRemove) {
|
for (const code of promotionsToRemove) {
|
||||||
codes.delete(code)
|
codes.delete(code)
|
||||||
@@ -163,9 +161,7 @@ export const cancelDraftOrderEditWorkflow = createWorkflow(
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
when(shippingToRestore, (methods) => {
|
when(shippingToRestore, (methods) => !!methods?.length).then(() => {
|
||||||
return !!methods?.length
|
|
||||||
}).then(() => {
|
|
||||||
restoreDraftOrderShippingMethodsStep({
|
restoreDraftOrderShippingMethodsStep({
|
||||||
shippingMethods: shippingToRestore as any,
|
shippingMethods: shippingToRestore as any,
|
||||||
})
|
})
|
||||||
|
|||||||
+11
-18
@@ -28,10 +28,10 @@ export const removeDraftOrderActionItemWorkflowId =
|
|||||||
/**
|
/**
|
||||||
* This workflow removes an item that was added or updated in a draft order edit. It's used by the
|
* This workflow removes an item that was added or updated in a draft order edit. It's used by the
|
||||||
* [Remove Item from Draft Order Edit Admin API Route](https://docs.medusajs.com/api/admin#draft-orders_deletedraftordersidedititemsaction_id).
|
* [Remove Item from Draft Order Edit Admin API Route](https://docs.medusajs.com/api/admin#draft-orders_deletedraftordersidedititemsaction_id).
|
||||||
*
|
*
|
||||||
* You can use this workflow within your customizations or your own custom workflows, allowing you to wrap custom logic around
|
* You can use this workflow within your customizations or your own custom workflows, allowing you to wrap custom logic around
|
||||||
* removing an item from a draft order edit.
|
* removing an item from a draft order edit.
|
||||||
*
|
*
|
||||||
* @example
|
* @example
|
||||||
* const { result } = await removeDraftOrderActionItemWorkflow(container)
|
* const { result } = await removeDraftOrderActionItemWorkflow(container)
|
||||||
* .run({
|
* .run({
|
||||||
@@ -40,9 +40,9 @@ export const removeDraftOrderActionItemWorkflowId =
|
|||||||
* action_id: "action_123",
|
* action_id: "action_123",
|
||||||
* }
|
* }
|
||||||
* })
|
* })
|
||||||
*
|
*
|
||||||
* @summary
|
* @summary
|
||||||
*
|
*
|
||||||
* Remove an item from a draft order edit.
|
* Remove an item from a draft order edit.
|
||||||
*/
|
*/
|
||||||
export const removeDraftOrderActionItemWorkflow = createWorkflow(
|
export const removeDraftOrderActionItemWorkflow = createWorkflow(
|
||||||
@@ -50,7 +50,11 @@ export const removeDraftOrderActionItemWorkflow = createWorkflow(
|
|||||||
function (
|
function (
|
||||||
input: WorkflowData<OrderWorkflow.DeleteOrderEditItemActionWorkflowInput>
|
input: WorkflowData<OrderWorkflow.DeleteOrderEditItemActionWorkflowInput>
|
||||||
): WorkflowResponse<OrderPreviewDTO> {
|
): WorkflowResponse<OrderPreviewDTO> {
|
||||||
const order: OrderDTO = useRemoteQueryStep({
|
const order: OrderDTO & {
|
||||||
|
promotions: {
|
||||||
|
code: string
|
||||||
|
}[]
|
||||||
|
} = useRemoteQueryStep({
|
||||||
entry_point: "orders",
|
entry_point: "orders",
|
||||||
fields: ["id", "status", "is_draft_order", "canceled_at", "items.*"],
|
fields: ["id", "status", "is_draft_order", "canceled_at", "items.*"],
|
||||||
variables: { id: input.order_id },
|
variables: { id: input.order_id },
|
||||||
@@ -89,19 +93,8 @@ export const removeDraftOrderActionItemWorkflow = createWorkflow(
|
|||||||
|
|
||||||
const appliedPromoCodes: string[] = transform(
|
const appliedPromoCodes: string[] = transform(
|
||||||
refetchedOrder,
|
refetchedOrder,
|
||||||
(refetchedOrder) => {
|
(refetchedOrder) =>
|
||||||
const promotionLink = (refetchedOrder as any).promotion_link
|
refetchedOrder.promotions?.map((promotion) => promotion.code) ?? []
|
||||||
|
|
||||||
if (!promotionLink) {
|
|
||||||
return []
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Array.isArray(promotionLink)) {
|
|
||||||
return promotionLink.map((promo) => promo.promotion.code)
|
|
||||||
}
|
|
||||||
|
|
||||||
return [promotionLink.promotion.code]
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// If any the order has any promo codes, then we need to refresh the adjustments.
|
// If any the order has any promo codes, then we need to refresh the adjustments.
|
||||||
|
|||||||
+9
-17
@@ -32,10 +32,10 @@ export const removeDraftOrderActionShippingMethodWorkflowId =
|
|||||||
/**
|
/**
|
||||||
* This workflow removes a shipping method that was added to an edited draft order. It's used by the
|
* This workflow removes a shipping method that was added to an edited draft order. It's used by the
|
||||||
* [Remove Shipping Method from Draft Order Edit Admin API Route](https://docs.medusajs.com/api/admin#draft-orders_deletedraftordersideditshippingmethodsaction_id).
|
* [Remove Shipping Method from Draft Order Edit Admin API Route](https://docs.medusajs.com/api/admin#draft-orders_deletedraftordersideditshippingmethodsaction_id).
|
||||||
*
|
*
|
||||||
* You can use this workflow within your customizations or your own custom workflows, allowing you to wrap custom logic around
|
* You can use this workflow within your customizations or your own custom workflows, allowing you to wrap custom logic around
|
||||||
* removing a shipping method from an edited draft order.
|
* removing a shipping method from an edited draft order.
|
||||||
*
|
*
|
||||||
* @example
|
* @example
|
||||||
* const { result } = await removeDraftOrderActionShippingMethodWorkflow(container)
|
* const { result } = await removeDraftOrderActionShippingMethodWorkflow(container)
|
||||||
* .run({
|
* .run({
|
||||||
@@ -44,9 +44,9 @@ export const removeDraftOrderActionShippingMethodWorkflowId =
|
|||||||
* action_id: "action_123",
|
* action_id: "action_123",
|
||||||
* }
|
* }
|
||||||
* })
|
* })
|
||||||
*
|
*
|
||||||
* @summary
|
* @summary
|
||||||
*
|
*
|
||||||
* Remove a shipping method from an edited draft order.
|
* Remove a shipping method from an edited draft order.
|
||||||
*/
|
*/
|
||||||
export const removeDraftOrderActionShippingMethodWorkflow = createWorkflow(
|
export const removeDraftOrderActionShippingMethodWorkflow = createWorkflow(
|
||||||
@@ -100,19 +100,11 @@ export const removeDraftOrderActionShippingMethodWorkflow = createWorkflow(
|
|||||||
order,
|
order,
|
||||||
})
|
})
|
||||||
|
|
||||||
const appliedPromoCodes = transform(context, (context) => {
|
const appliedPromoCodes: string[] = transform(
|
||||||
const promotionLink = (context as any).promotion_link
|
context,
|
||||||
|
(context) =>
|
||||||
if (!promotionLink) {
|
(context as any).promotions?.map((promotion) => promotion.code) ?? []
|
||||||
return []
|
)
|
||||||
}
|
|
||||||
|
|
||||||
if (Array.isArray(promotionLink)) {
|
|
||||||
return promotionLink.map((promo) => promo.promotion.code)
|
|
||||||
}
|
|
||||||
|
|
||||||
return [promotionLink.promotion.code]
|
|
||||||
})
|
|
||||||
|
|
||||||
when(
|
when(
|
||||||
appliedPromoCodes,
|
appliedPromoCodes,
|
||||||
|
|||||||
+13
-18
@@ -41,10 +41,10 @@ export interface RemoveDraftOrderShippingMethodWorkflowInput {
|
|||||||
/**
|
/**
|
||||||
* This workflow removes an existing shipping method from a draft order edit. It's used by the
|
* This workflow removes an existing shipping method from a draft order edit. It's used by the
|
||||||
* [Remove Shipping Method from Draft Order Edit Admin API Route](https://docs.medusajs.com/api/admin#draft-orders_deletedraftordersideditshippingmethodsmethodmethod_id).
|
* [Remove Shipping Method from Draft Order Edit Admin API Route](https://docs.medusajs.com/api/admin#draft-orders_deletedraftordersideditshippingmethodsmethodmethod_id).
|
||||||
*
|
*
|
||||||
* You can use this workflow within your customizations or your own custom workflows, allowing you to wrap custom logic around
|
* You can use this workflow within your customizations or your own custom workflows, allowing you to wrap custom logic around
|
||||||
* removing a shipping method from a draft order edit.
|
* removing a shipping method from a draft order edit.
|
||||||
*
|
*
|
||||||
* @example
|
* @example
|
||||||
* const { result } = await removeDraftOrderShippingMethodWorkflow(container)
|
* const { result } = await removeDraftOrderShippingMethodWorkflow(container)
|
||||||
* .run({
|
* .run({
|
||||||
@@ -53,15 +53,19 @@ export interface RemoveDraftOrderShippingMethodWorkflowInput {
|
|||||||
* shipping_method_id: "sm_123",
|
* shipping_method_id: "sm_123",
|
||||||
* }
|
* }
|
||||||
* })
|
* })
|
||||||
*
|
*
|
||||||
* @summary
|
* @summary
|
||||||
*
|
*
|
||||||
* Remove an existing shipping method from a draft order edit.
|
* Remove an existing shipping method from a draft order edit.
|
||||||
*/
|
*/
|
||||||
export const removeDraftOrderShippingMethodWorkflow = createWorkflow(
|
export const removeDraftOrderShippingMethodWorkflow = createWorkflow(
|
||||||
removeDraftOrderShippingMethodWorkflowId,
|
removeDraftOrderShippingMethodWorkflowId,
|
||||||
function (input: WorkflowData<RemoveDraftOrderShippingMethodWorkflowInput>) {
|
function (input: WorkflowData<RemoveDraftOrderShippingMethodWorkflowInput>) {
|
||||||
const order: OrderDTO = useRemoteQueryStep({
|
const order: OrderDTO & {
|
||||||
|
promotions: {
|
||||||
|
code: string
|
||||||
|
}[]
|
||||||
|
} = useRemoteQueryStep({
|
||||||
entry_point: "orders",
|
entry_point: "orders",
|
||||||
fields: draftOrderFieldsForRefreshSteps,
|
fields: draftOrderFieldsForRefreshSteps,
|
||||||
variables: { id: input.order_id },
|
variables: { id: input.order_id },
|
||||||
@@ -89,19 +93,10 @@ export const removeDraftOrderShippingMethodWorkflow = createWorkflow(
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
const appliedPromoCodes = transform(order, (order) => {
|
const appliedPromoCodes: string[] = transform(
|
||||||
const promotionLink = (order as any).promotion_link
|
order,
|
||||||
|
(order) => order.promotions?.map((promotion) => promotion.code) ?? []
|
||||||
if (!promotionLink) {
|
)
|
||||||
return []
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Array.isArray(promotionLink)) {
|
|
||||||
return promotionLink.map((promo) => promo.promotion.code)
|
|
||||||
}
|
|
||||||
|
|
||||||
return [promotionLink.promotion.code]
|
|
||||||
})
|
|
||||||
|
|
||||||
// If any the order has any promo codes, then we need to refresh the adjustments.
|
// If any the order has any promo codes, then we need to refresh the adjustments.
|
||||||
when(
|
when(
|
||||||
|
|||||||
+14
-18
@@ -28,10 +28,10 @@ export const updateDraftOrderActionItemId = "update-draft-order-action-item"
|
|||||||
/**
|
/**
|
||||||
* This workflow updates a new item that was added to a draft order edit. It's used by the
|
* This workflow updates a new item that was added to a draft order edit. It's used by the
|
||||||
* [Update New Item in Draft Order Edit Admin API Route](https://docs.medusajs.com/api/admin#draft-orders_postdraftordersidedititemsaction_id).
|
* [Update New Item in Draft Order Edit Admin API Route](https://docs.medusajs.com/api/admin#draft-orders_postdraftordersidedititemsaction_id).
|
||||||
*
|
*
|
||||||
* You can use this workflow within your customizations or your own custom workflows, allowing you to wrap custom logic around
|
* You can use this workflow within your customizations or your own custom workflows, allowing you to wrap custom logic around
|
||||||
* updating a new item in a draft order edit.
|
* updating a new item in a draft order edit.
|
||||||
*
|
*
|
||||||
* @example
|
* @example
|
||||||
* const { result } = await updateDraftOrderActionItemWorkflow(container)
|
* const { result } = await updateDraftOrderActionItemWorkflow(container)
|
||||||
* .run({
|
* .run({
|
||||||
@@ -43,9 +43,9 @@ export const updateDraftOrderActionItemId = "update-draft-order-action-item"
|
|||||||
* }
|
* }
|
||||||
* }
|
* }
|
||||||
* })
|
* })
|
||||||
*
|
*
|
||||||
* @summary
|
* @summary
|
||||||
*
|
*
|
||||||
* Update a new item in a draft order edit.
|
* Update a new item in a draft order edit.
|
||||||
*/
|
*/
|
||||||
export const updateDraftOrderActionItemWorkflow = createWorkflow(
|
export const updateDraftOrderActionItemWorkflow = createWorkflow(
|
||||||
@@ -53,7 +53,11 @@ export const updateDraftOrderActionItemWorkflow = createWorkflow(
|
|||||||
function (
|
function (
|
||||||
input: WorkflowData<OrderWorkflow.UpdateOrderEditAddNewItemWorkflowInput>
|
input: WorkflowData<OrderWorkflow.UpdateOrderEditAddNewItemWorkflowInput>
|
||||||
) {
|
) {
|
||||||
const order: OrderDTO = useRemoteQueryStep({
|
const order: OrderDTO & {
|
||||||
|
promotions: {
|
||||||
|
code: string
|
||||||
|
}[]
|
||||||
|
} = useRemoteQueryStep({
|
||||||
entry_point: "orders",
|
entry_point: "orders",
|
||||||
fields: draftOrderFieldsForRefreshSteps,
|
fields: draftOrderFieldsForRefreshSteps,
|
||||||
variables: { id: input.order_id },
|
variables: { id: input.order_id },
|
||||||
@@ -112,19 +116,11 @@ export const updateDraftOrderActionItemWorkflow = createWorkflow(
|
|||||||
order,
|
order,
|
||||||
})
|
})
|
||||||
|
|
||||||
const appliedPromoCodes: string[] = transform(context, (context) => {
|
const appliedPromoCodes: string[] = transform(
|
||||||
const promotionLink = (context as any).promotion_link
|
context,
|
||||||
|
(context) =>
|
||||||
if (!promotionLink) {
|
(context as any).promotions?.map((promotion) => promotion.code) ?? []
|
||||||
return []
|
)
|
||||||
}
|
|
||||||
|
|
||||||
if (Array.isArray(promotionLink)) {
|
|
||||||
return promotionLink.map((promo) => promo.promotion.code)
|
|
||||||
}
|
|
||||||
|
|
||||||
return [promotionLink.promotion.code]
|
|
||||||
})
|
|
||||||
|
|
||||||
// If any the order has any promo codes, then we need to refresh the adjustments.
|
// If any the order has any promo codes, then we need to refresh the adjustments.
|
||||||
when(
|
when(
|
||||||
|
|||||||
+9
-17
@@ -33,10 +33,10 @@ export const updateDraftOrderActionShippingMethodWorkflowId =
|
|||||||
/**
|
/**
|
||||||
* This workflow updates a new shipping method that was added to a draft order edit. It's used by the
|
* This workflow updates a new shipping method that was added to a draft order edit. It's used by the
|
||||||
* [Update New Shipping Method in Draft Order Edit Admin API Route](https://docs.medusajs.com/api/admin#draft-orders_postdraftordersideditshippingmethodsaction_id).
|
* [Update New Shipping Method in Draft Order Edit Admin API Route](https://docs.medusajs.com/api/admin#draft-orders_postdraftordersideditshippingmethodsaction_id).
|
||||||
*
|
*
|
||||||
* You can use this workflow within your customizations or your own custom workflows, allowing you to wrap custom logic around
|
* You can use this workflow within your customizations or your own custom workflows, allowing you to wrap custom logic around
|
||||||
* updating a new shipping method in a draft order edit.
|
* updating a new shipping method in a draft order edit.
|
||||||
*
|
*
|
||||||
* @example
|
* @example
|
||||||
* const { result } = await updateDraftOrderActionShippingMethodWorkflow(container)
|
* const { result } = await updateDraftOrderActionShippingMethodWorkflow(container)
|
||||||
* .run({
|
* .run({
|
||||||
@@ -48,9 +48,9 @@ export const updateDraftOrderActionShippingMethodWorkflowId =
|
|||||||
* }
|
* }
|
||||||
* }
|
* }
|
||||||
* })
|
* })
|
||||||
*
|
*
|
||||||
* @summary
|
* @summary
|
||||||
*
|
*
|
||||||
* Update a new shipping method in a draft order edit.
|
* Update a new shipping method in a draft order edit.
|
||||||
*/
|
*/
|
||||||
export const updateDraftOrderActionShippingMethodWorkflow = createWorkflow(
|
export const updateDraftOrderActionShippingMethodWorkflow = createWorkflow(
|
||||||
@@ -142,19 +142,11 @@ export const updateDraftOrderActionShippingMethodWorkflow = createWorkflow(
|
|||||||
order,
|
order,
|
||||||
})
|
})
|
||||||
|
|
||||||
const appliedPromoCodes = transform(context, (context) => {
|
const appliedPromoCodes: string[] = transform(
|
||||||
const promotionLink = (context as any).promotion_link
|
context,
|
||||||
|
(context) =>
|
||||||
if (!promotionLink) {
|
(context as any).promotions?.map((promotion) => promotion.code) ?? []
|
||||||
return []
|
)
|
||||||
}
|
|
||||||
|
|
||||||
if (Array.isArray(promotionLink)) {
|
|
||||||
return promotionLink.map((promo) => promo.promotion.code)
|
|
||||||
}
|
|
||||||
|
|
||||||
return [promotionLink.promotion.code]
|
|
||||||
})
|
|
||||||
|
|
||||||
when(
|
when(
|
||||||
appliedPromoCodes,
|
appliedPromoCodes,
|
||||||
|
|||||||
@@ -33,10 +33,10 @@ export const updateDraftOrderItemWorkflowId = "update-draft-order-item"
|
|||||||
/**
|
/**
|
||||||
* This workflow updates an item in a draft order edit. It's used by the
|
* This workflow updates an item in a draft order edit. It's used by the
|
||||||
* [Update Item in Draft Order Edit Admin API Route](https://docs.medusajs.com/api/admin#draft-orders_postdraftordersidedititemsitemitem_id).
|
* [Update Item in Draft Order Edit Admin API Route](https://docs.medusajs.com/api/admin#draft-orders_postdraftordersidedititemsitemitem_id).
|
||||||
*
|
*
|
||||||
* You can use this workflow within your customizations or your own custom workflows, allowing you to wrap custom logic around
|
* You can use this workflow within your customizations or your own custom workflows, allowing you to wrap custom logic around
|
||||||
* updating an item in a draft order edit.
|
* updating an item in a draft order edit.
|
||||||
*
|
*
|
||||||
* @example
|
* @example
|
||||||
* const { result } = await updateDraftOrderItemWorkflow(container)
|
* const { result } = await updateDraftOrderItemWorkflow(container)
|
||||||
* .run({
|
* .run({
|
||||||
@@ -45,9 +45,9 @@ export const updateDraftOrderItemWorkflowId = "update-draft-order-item"
|
|||||||
* items: [{ id: "orli_123", quantity: 2 }],
|
* items: [{ id: "orli_123", quantity: 2 }],
|
||||||
* }
|
* }
|
||||||
* })
|
* })
|
||||||
*
|
*
|
||||||
* @summary
|
* @summary
|
||||||
*
|
*
|
||||||
* Update an item in a draft order edit.
|
* Update an item in a draft order edit.
|
||||||
*/
|
*/
|
||||||
export const updateDraftOrderItemWorkflow = createWorkflow(
|
export const updateDraftOrderItemWorkflow = createWorkflow(
|
||||||
@@ -115,19 +115,11 @@ export const updateDraftOrderItemWorkflow = createWorkflow(
|
|||||||
order,
|
order,
|
||||||
})
|
})
|
||||||
|
|
||||||
const appliedPromoCodes: string[] = transform(context, (context) => {
|
const appliedPromoCodes: string[] = transform(
|
||||||
const promotionLink = (context as any).promotion_link
|
context,
|
||||||
|
(context) =>
|
||||||
if (!promotionLink) {
|
(context as any).promotions?.map((promotion) => promotion.code) ?? []
|
||||||
return []
|
)
|
||||||
}
|
|
||||||
|
|
||||||
if (Array.isArray(promotionLink)) {
|
|
||||||
return promotionLink.map((promo) => promo.promotion.code)
|
|
||||||
}
|
|
||||||
|
|
||||||
return [promotionLink.promotion.code]
|
|
||||||
})
|
|
||||||
|
|
||||||
// If any the order has any promo codes, then we need to refresh the adjustments.
|
// If any the order has any promo codes, then we need to refresh the adjustments.
|
||||||
when(
|
when(
|
||||||
|
|||||||
+9
-17
@@ -56,10 +56,10 @@ export interface UpdateDraftOrderShippingMethodWorkflowInput {
|
|||||||
/**
|
/**
|
||||||
* This workflow updates an existing shipping method in a draft order edit. It's used by the
|
* This workflow updates an existing shipping method in a draft order edit. It's used by the
|
||||||
* [Update Shipping Method in Draft Order Edit Admin API Route](https://docs.medusajs.com/api/admin#draft-orders_postdraftordersideditshippingmethodsmethodmethod_id).
|
* [Update Shipping Method in Draft Order Edit Admin API Route](https://docs.medusajs.com/api/admin#draft-orders_postdraftordersideditshippingmethodsmethodmethod_id).
|
||||||
*
|
*
|
||||||
* You can use this workflow within your customizations or your own custom workflows, allowing you to wrap custom logic around
|
* You can use this workflow within your customizations or your own custom workflows, allowing you to wrap custom logic around
|
||||||
* updating an existing shipping method in a draft order edit.
|
* updating an existing shipping method in a draft order edit.
|
||||||
*
|
*
|
||||||
* @example
|
* @example
|
||||||
* const { result } = await updateDraftOrderShippingMethodWorkflow(container)
|
* const { result } = await updateDraftOrderShippingMethodWorkflow(container)
|
||||||
* .run({
|
* .run({
|
||||||
@@ -71,9 +71,9 @@ export interface UpdateDraftOrderShippingMethodWorkflowInput {
|
|||||||
* }
|
* }
|
||||||
* }
|
* }
|
||||||
* })
|
* })
|
||||||
*
|
*
|
||||||
* @summary
|
* @summary
|
||||||
*
|
*
|
||||||
* Update an existing shipping method in a draft order edit.
|
* Update an existing shipping method in a draft order edit.
|
||||||
*/
|
*/
|
||||||
export const updateDraftOrderShippingMethodWorkflow = createWorkflow(
|
export const updateDraftOrderShippingMethodWorkflow = createWorkflow(
|
||||||
@@ -123,19 +123,11 @@ export const updateDraftOrderShippingMethodWorkflow = createWorkflow(
|
|||||||
throw_if_key_not_found: true,
|
throw_if_key_not_found: true,
|
||||||
}).config({ name: "refetched-order-query" })
|
}).config({ name: "refetched-order-query" })
|
||||||
|
|
||||||
const appliedPromoCodes = transform(refetchedOrder, (refetchedOrder) => {
|
const appliedPromoCodes = transform(
|
||||||
const promotionLink = (refetchedOrder as any).promotion_link
|
refetchedOrder,
|
||||||
|
(refetchedOrder) =>
|
||||||
if (!promotionLink) {
|
refetchedOrder.promotions?.map((promotion) => promotion.code) ?? []
|
||||||
return []
|
)
|
||||||
}
|
|
||||||
|
|
||||||
if (Array.isArray(promotionLink)) {
|
|
||||||
return promotionLink.map((promo) => promo.promotion.code)
|
|
||||||
}
|
|
||||||
|
|
||||||
return [promotionLink.promotion.code]
|
|
||||||
})
|
|
||||||
|
|
||||||
when(
|
when(
|
||||||
appliedPromoCodes,
|
appliedPromoCodes,
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ export const OrderPromotion: ModuleJoinerConfig = {
|
|||||||
entity: "Promotion",
|
entity: "Promotion",
|
||||||
primaryKey: "id",
|
primaryKey: "id",
|
||||||
foreignKey: "promotion_id",
|
foreignKey: "promotion_id",
|
||||||
alias: "promotion",
|
alias: "promotions",
|
||||||
args: {
|
args: {
|
||||||
methodSuffix: "Promotions",
|
methodSuffix: "Promotions",
|
||||||
},
|
},
|
||||||
@@ -44,8 +44,8 @@ export const OrderPromotion: ModuleJoinerConfig = {
|
|||||||
serviceName: Modules.ORDER,
|
serviceName: Modules.ORDER,
|
||||||
entity: "Order",
|
entity: "Order",
|
||||||
fieldAlias: {
|
fieldAlias: {
|
||||||
promotion: {
|
promotions: {
|
||||||
path: "promotion_link.promotion",
|
path: "promotion_link.promotions",
|
||||||
isList: true,
|
isList: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -54,16 +54,7 @@ export const OrderPromotion: ModuleJoinerConfig = {
|
|||||||
primaryKey: "order_id",
|
primaryKey: "order_id",
|
||||||
foreignKey: "id",
|
foreignKey: "id",
|
||||||
alias: "promotion_link",
|
alias: "promotion_link",
|
||||||
},
|
isList: true,
|
||||||
},
|
|
||||||
{
|
|
||||||
serviceName: Modules.PROMOTION,
|
|
||||||
entity: "Promotion",
|
|
||||||
relationship: {
|
|
||||||
serviceName: LINKS.OrderPromotion,
|
|
||||||
primaryKey: "promotion_id",
|
|
||||||
foreignKey: "id",
|
|
||||||
alias: "order_link",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|||||||
Reference in new issue
Block a user