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