feat(core-flows, utils): add OrderEdit events (#12320)

* feat(core-flows, utils): add OrderEdit events

* fix: typo
This commit is contained in:
Frane Polić authored and GitHub committed 2025-04-30 17:44:39 +02:00
1 parent 90c61d1898
commit 8985998756
5 files changed
+79 -15

No files matched your search

@@ -1,5 +1,9 @@
import { OrderChangeDTO, OrderDTO } from "@medusajs/framework/types"
import { ChangeActionType, OrderChangeStatus } from "@medusajs/framework/utils"
import {
ChangeActionType,
OrderChangeStatus,
OrderEditWorkflowEvents,
} from "@medusajs/framework/utils"
import {
WorkflowData,
createStep,
@@ -7,7 +11,7 @@ import {
parallelize,
transform,
} from "@medusajs/framework/workflows-sdk"
import { useRemoteQueryStep } from "../../../common"
import { emitEventStep, useRemoteQueryStep } from "../../../common"
import { deleteOrderChangesStep, deleteOrderShippingMethods } from "../../steps"
import {
throwIfIsCancelled,
@@ -31,14 +35,14 @@ export type CancelBeginOrderEditValidationStepInput = {
/**
* This step validates that a requested order edit can be canceled.
* If the order is canceled or the order change is not active, the step will throw an error.
*
*
* :::note
*
*
* You can retrieve an order and order change details using [Query](https://docs.medusajs.com/learn/fundamentals/module-links/query),
* or [useQueryGraphStep](https://docs.medusajs.com/resources/references/medusa-workflows/steps/useQueryGraphStep).
*
*
* :::
*
*
* @example
* const data = cancelBeginOrderEditValidationStep({
* order: {
@@ -76,10 +80,10 @@ export const cancelBeginOrderEditWorkflowId = "cancel-begin-order-edit"
/**
* This workflow cancels a requested edit for an order. It's used by the
* [Cancel Order Edit Admin API Route](https://docs.medusajs.com/api/admin#order-edits_deleteordereditsid).
*
*
* You can use this workflow within your customizations or your own custom workflows, allowing you to cancel an order edit
* in your custom flow.
*
*
* @example
* const { result } = await cancelBeginOrderEditWorkflow(container)
* .run({
@@ -87,9 +91,9 @@ export const cancelBeginOrderEditWorkflowId = "cancel-begin-order-edit"
* order_id: "order_123",
* }
* })
*
*
* @summary
*
*
* Cancel a requested order edit.
*/
export const cancelBeginOrderEditWorkflow = createWorkflow(
@@ -128,9 +132,23 @@ export const cancelBeginOrderEditWorkflow = createWorkflow(
}
)
const eventData = transform(
{ order, orderChange },
({ order, orderChange }) => {
return {
order_id: order.id,
actions: orderChange.actions,
}
}
)
parallelize(
deleteOrderChangesStep({ ids: [orderChange.id] }),
deleteOrderShippingMethods({ ids: shippingToRemove })
deleteOrderShippingMethods({ ids: shippingToRemove }),
emitEventStep({
eventName: OrderEditWorkflowEvents.CANCELED,
data: eventData,
})
)
}
)
@@ -8,6 +8,7 @@ import {
ChangeActionType,
MathBN,
OrderChangeStatus,
OrderEditWorkflowEvents,
} from "@medusajs/framework/utils"
import {
WorkflowResponse,
@@ -17,7 +18,7 @@ import {
} from "@medusajs/framework/workflows-sdk"
import { reserveInventoryStep } from "../../../cart/steps/reserve-inventory"
import { prepareConfirmInventoryInput } from "../../../cart/utils/prepare-confirm-inventory-input"
import { useRemoteQueryStep } from "../../../common"
import { emitEventStep, useRemoteQueryStep } from "../../../common"
import { deleteReservationsByLineItemsStep } from "../../../reservation"
import { previewOrderChangeStep } from "../../steps"
import { confirmOrderChanges } from "../../steps/confirm-order-changes"
@@ -287,6 +288,21 @@ export const confirmOrderEditRequestWorkflow = createWorkflow(
},
})
const eventData = transform(
{ order, orderChange },
({ order, orderChange }) => {
return {
order_id: order.id,
actions: orderChange.actions,
}
}
)
emitEventStep({
eventName: OrderEditWorkflowEvents.CONFIRMED,
data: eventData,
})
return new WorkflowResponse(orderPreview)
}
)
@@ -3,14 +3,17 @@ import {
OrderDTO,
OrderPreviewDTO,
} from "@medusajs/framework/types"
import { OrderChangeStatus } from "@medusajs/framework/utils"
import {
OrderChangeStatus,
OrderEditWorkflowEvents,
} from "@medusajs/framework/utils"
import {
WorkflowResponse,
createStep,
createWorkflow,
transform,
} from "@medusajs/framework/workflows-sdk"
import { useRemoteQueryStep } from "../../../common"
import { emitEventStep, useRemoteQueryStep } from "../../../common"
import { previewOrderChangeStep } from "../../steps"
import { updateOrderChangesStep } from "../../steps/update-order-changes"
import {
@@ -134,7 +137,7 @@ export const requestOrderEditRequestWorkflow = createWorkflow(
const orderChange: OrderChangeDTO = useRemoteQueryStep({
entry_point: "order_change",
fields: ["id", "canceled_at"],
fields: ["id", "canceled_at", "actions.*"],
variables: {
filters: {
order_id: input.order_id,
@@ -152,6 +155,21 @@ export const requestOrderEditRequestWorkflow = createWorkflow(
const updateOrderChangesData = getOrderChangesData({ input, orderChange })
updateOrderChangesStep(updateOrderChangesData)
const eventData = transform(
{ order, orderChange },
({ order, orderChange }) => {
return {
order_id: order.id,
actions: orderChange.actions,
}
}
)
emitEventStep({
eventName: OrderEditWorkflowEvents.REQUESTED,
data: eventData,
})
return new WorkflowResponse(previewOrderChangeStep(order.id))
}
)
@@ -31,6 +31,12 @@ export const OrderWorkflowEvents = {
TRANSFER_REQUESTED: "order.transfer_requested",
}
export const OrderEditWorkflowEvents = {
REQUESTED: "order-edit.requested",
CONFIRMED: "order-edit.confirmed",
CANCELED: "order-edit.canceled",
}
export const UserWorkflowEvents = {
CREATED: "user.created",
UPDATED: "user.updated",