feat(core-flows): cart events (#9585)

This commit is contained in:
Carlos R. L. Rodrigues
2024-10-16 14:27:24 -03:00
committed by GitHub
parent 6a6c193042
commit f7fbc2f97c
6 changed files with 84 additions and 17 deletions

View File

@@ -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 },
})
)

View File

@@ -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: "refetchcart" })
refreshCartShippingMethodsStep({ cart })
parallelize(
refreshCartShippingMethodsStep({ cart }),
emitEventStep({
eventName: CartWorkflowEvents.UPDATED,
data: { id: input.cart.id },
})
)
updateTaxLinesWorkflow.runAsStep({
input: {

View File

@@ -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,

View File

@@ -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 },

View File

@@ -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])

View File

@@ -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",