feat(core-flows): cart events (#9585)
This commit is contained in:
committed by
GitHub
parent
6a6c193042
commit
f7fbc2f97c
@@ -1,10 +1,11 @@
|
||||
import { MedusaError } from "@medusajs/framework/utils"
|
||||
import { CartWorkflowEvents, MedusaError } from "@medusajs/framework/utils"
|
||||
import {
|
||||
createWorkflow,
|
||||
parallelize,
|
||||
transform,
|
||||
WorkflowData,
|
||||
} from "@medusajs/framework/workflows-sdk"
|
||||
import { emitEventStep } from "../../common/steps/emit-event"
|
||||
import { useRemoteQueryStep } from "../../common/steps/use-remote-query"
|
||||
import {
|
||||
addShippingMethodToCartStep,
|
||||
@@ -137,6 +138,10 @@ export const addShippingMethodToCartWorkflow = createWorkflow(
|
||||
}),
|
||||
addShippingMethodToCartStep({
|
||||
shipping_methods: shippingMethodInput,
|
||||
}),
|
||||
emitEventStep({
|
||||
eventName: CartWorkflowEvents.UPDATED,
|
||||
data: { id: input.cart_id },
|
||||
})
|
||||
)
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ import {
|
||||
AddToCartWorkflowInputDTO,
|
||||
CreateLineItemForCartDTO,
|
||||
} from "@medusajs/framework/types"
|
||||
import { CartWorkflowEvents } from "@medusajs/framework/utils"
|
||||
import {
|
||||
createWorkflow,
|
||||
parallelize,
|
||||
@@ -9,6 +10,7 @@ import {
|
||||
WorkflowData,
|
||||
WorkflowResponse,
|
||||
} from "@medusajs/framework/workflows-sdk"
|
||||
import { emitEventStep } from "../../common/steps/emit-event"
|
||||
import { useRemoteQueryStep } from "../../common/steps/use-remote-query"
|
||||
import {
|
||||
createLineItemsStep,
|
||||
@@ -120,7 +122,13 @@ export const addToCartWorkflow = createWorkflow(
|
||||
list: false,
|
||||
}).config({ name: "refetch–cart" })
|
||||
|
||||
refreshCartShippingMethodsStep({ cart })
|
||||
parallelize(
|
||||
refreshCartShippingMethodsStep({ cart }),
|
||||
emitEventStep({
|
||||
eventName: CartWorkflowEvents.UPDATED,
|
||||
data: { id: input.cart.id },
|
||||
})
|
||||
)
|
||||
|
||||
updateTaxLinesWorkflow.runAsStep({
|
||||
input: {
|
||||
|
||||
@@ -2,7 +2,7 @@ import {
|
||||
AdditionalData,
|
||||
CreateCartWorkflowInputDTO,
|
||||
} from "@medusajs/framework/types"
|
||||
import { MedusaError } from "@medusajs/framework/utils"
|
||||
import { CartWorkflowEvents, MedusaError } from "@medusajs/framework/utils"
|
||||
import {
|
||||
WorkflowData,
|
||||
WorkflowResponse,
|
||||
@@ -11,6 +11,7 @@ import {
|
||||
parallelize,
|
||||
transform,
|
||||
} from "@medusajs/framework/workflows-sdk"
|
||||
import { emitEventStep } from "../../common/steps/emit-event"
|
||||
import { useRemoteQueryStep } from "../../common/steps/use-remote-query"
|
||||
import {
|
||||
createCartsStep,
|
||||
@@ -173,11 +174,17 @@ export const createCartWorkflow = createWorkflow(
|
||||
},
|
||||
})
|
||||
|
||||
refreshPaymentCollectionForCartWorkflow.runAsStep({
|
||||
input: {
|
||||
cart_id: cart.id,
|
||||
},
|
||||
})
|
||||
parallelize(
|
||||
refreshPaymentCollectionForCartWorkflow.runAsStep({
|
||||
input: {
|
||||
cart_id: cart.id,
|
||||
},
|
||||
}),
|
||||
emitEventStep({
|
||||
eventName: CartWorkflowEvents.CREATED,
|
||||
data: { id: cart.id },
|
||||
})
|
||||
)
|
||||
|
||||
const cartCreated = createHook("cartCreated", {
|
||||
cart,
|
||||
|
||||
@@ -2,7 +2,11 @@ import {
|
||||
AdditionalData,
|
||||
UpdateCartWorkflowInputDTO,
|
||||
} from "@medusajs/framework/types"
|
||||
import { MedusaError } from "@medusajs/framework/utils"
|
||||
import {
|
||||
CartWorkflowEvents,
|
||||
isDefined,
|
||||
MedusaError,
|
||||
} from "@medusajs/framework/utils"
|
||||
import {
|
||||
createHook,
|
||||
createWorkflow,
|
||||
@@ -12,7 +16,7 @@ import {
|
||||
WorkflowData,
|
||||
WorkflowResponse,
|
||||
} from "@medusajs/framework/workflows-sdk"
|
||||
import { useRemoteQueryStep } from "../../common"
|
||||
import { emitEventStep, useRemoteQueryStep } from "../../common"
|
||||
import {
|
||||
findOrCreateCustomerStep,
|
||||
findSalesChannelStep,
|
||||
@@ -113,15 +117,15 @@ export const updateCartWorkflow = createWorkflow(
|
||||
}
|
||||
|
||||
if (
|
||||
updateCartData.customer_id !== undefined ||
|
||||
updateCartData.email !== undefined
|
||||
isDefined(updateCartData.customer_id) ||
|
||||
isDefined(updateCartData.email)
|
||||
) {
|
||||
data_.customer_id = data.customerData.customer?.id || null
|
||||
data_.email =
|
||||
data.input?.email ?? (data.customerData.customer?.email || null)
|
||||
}
|
||||
|
||||
if (updateCartData.sales_channel_id !== undefined) {
|
||||
if (isDefined(updateCartData.sales_channel_id)) {
|
||||
data_.sales_channel_id = data.salesChannel?.id || null
|
||||
}
|
||||
|
||||
@@ -129,7 +133,34 @@ export const updateCartWorkflow = createWorkflow(
|
||||
}
|
||||
)
|
||||
|
||||
updateCartsStep([cartInput])
|
||||
when({ cartInput }, ({ cartInput }) => {
|
||||
return isDefined(cartInput.customer_id) || isDefined(cartInput.email)
|
||||
}).then(() => {
|
||||
emitEventStep({
|
||||
eventName: CartWorkflowEvents.CUSTOMER_UPDATED,
|
||||
data: { id: input.id },
|
||||
}).config({ name: "emit-customer-updated" })
|
||||
})
|
||||
|
||||
when({ input, cartToUpdate }, ({ input, cartToUpdate }) => {
|
||||
return (
|
||||
isDefined(input.region_id) &&
|
||||
input.region_id !== cartToUpdate?.region?.id
|
||||
)
|
||||
}).then(() => {
|
||||
emitEventStep({
|
||||
eventName: CartWorkflowEvents.REGION_UPDATED,
|
||||
data: { id: input.id },
|
||||
}).config({ name: "emit-region-updated" })
|
||||
})
|
||||
|
||||
parallelize(
|
||||
updateCartsStep([cartInput]),
|
||||
emitEventStep({
|
||||
eventName: CartWorkflowEvents.UPDATED,
|
||||
data: { id: input.id },
|
||||
})
|
||||
)
|
||||
|
||||
const cart = refreshCartItemsWorkflow.runAsStep({
|
||||
input: { cart_id: cartInput.id, promo_codes: input.promo_codes },
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
import { UpdateLineItemInCartWorkflowInputDTO } from "@medusajs/framework/types"
|
||||
import { CartWorkflowEvents } from "@medusajs/framework/utils"
|
||||
import {
|
||||
WorkflowData,
|
||||
WorkflowResponse,
|
||||
createWorkflow,
|
||||
parallelize,
|
||||
transform,
|
||||
} from "@medusajs/framework/workflows-sdk"
|
||||
import { emitEventStep } from "../../common/steps/emit-event"
|
||||
import { useRemoteQueryStep } from "../../common/steps/use-remote-query"
|
||||
import { updateLineItemsStepWithSelector } from "../../line-item/steps"
|
||||
import { refreshCartShippingMethodsStep } from "../steps"
|
||||
@@ -103,9 +106,15 @@ export const updateLineItemInCartWorkflow = createWorkflow(
|
||||
},
|
||||
})
|
||||
|
||||
refreshPaymentCollectionForCartWorkflow.runAsStep({
|
||||
input: { cart_id: input.cart.id },
|
||||
})
|
||||
parallelize(
|
||||
refreshPaymentCollectionForCartWorkflow.runAsStep({
|
||||
input: { cart_id: input.cart.id },
|
||||
}),
|
||||
emitEventStep({
|
||||
eventName: CartWorkflowEvents.UPDATED,
|
||||
data: { id: input.cart.id },
|
||||
})
|
||||
)
|
||||
|
||||
const updatedItem = transform({ result }, (data) => data.result?.[0])
|
||||
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
export const CartWorkflowEvents = {
|
||||
CREATED: "cart.created",
|
||||
UPDATED: "cart.updated",
|
||||
CUSTOMER_UPDATED: "cart.customer_updated",
|
||||
REGION_UPDATED: "cart.region_updated",
|
||||
}
|
||||
|
||||
export const CustomerWorkflowEvents = {
|
||||
CREATED: "customer.created",
|
||||
UPDATED: "customer.updated",
|
||||
|
||||
Reference in New Issue
Block a user