fix(core-flows): data passed to to fulfillment provider context (#10660)
* fix: cart data passed to context, from location in validation * refactor: extract common fields to a const
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
// Always ensure that cartFieldsForPricingContext is present in cartFieldsForRefreshSteps
|
// Always ensure that cartFieldsForPricingContext is present in cartFieldsForRefreshSteps
|
||||||
|
// Always ensure that cartFieldsForCalculateShippingOptionsPrices is present in cartFieldsForRefreshSteps
|
||||||
export const cartFieldsForRefreshSteps = [
|
export const cartFieldsForRefreshSteps = [
|
||||||
"id",
|
"id",
|
||||||
"currency_code",
|
"currency_code",
|
||||||
@@ -18,6 +19,13 @@ export const cartFieldsForRefreshSteps = [
|
|||||||
"items.product.collection_id",
|
"items.product.collection_id",
|
||||||
"items.product.categories.id",
|
"items.product.categories.id",
|
||||||
"items.product.tags.id",
|
"items.product.tags.id",
|
||||||
|
"items.variant.id",
|
||||||
|
"items.variant.product.id",
|
||||||
|
"items.variant.weight",
|
||||||
|
"items.variant.length",
|
||||||
|
"items.variant.height",
|
||||||
|
"items.variant.width",
|
||||||
|
"items.variant.material",
|
||||||
"items.adjustments.*",
|
"items.adjustments.*",
|
||||||
"items.tax_lines.*",
|
"items.tax_lines.*",
|
||||||
"shipping_address.*",
|
"shipping_address.*",
|
||||||
@@ -146,3 +154,21 @@ export const productVariantsFields = [
|
|||||||
"inventory_items.inventory.location_levels.stock_locations.sales_channels.id",
|
"inventory_items.inventory.location_levels.stock_locations.sales_channels.id",
|
||||||
"inventory_items.inventory.location_levels.stock_locations.sales_channels.name",
|
"inventory_items.inventory.location_levels.stock_locations.sales_channels.name",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
// ensure that at least these fields are present when fetching cart for caluclating shipping options prices
|
||||||
|
export const cartFieldsForCalculateShippingOptionsPrices = [
|
||||||
|
"id",
|
||||||
|
"items.*",
|
||||||
|
"items.variant.id",
|
||||||
|
"items.variant.product.id",
|
||||||
|
"items.variant.weight",
|
||||||
|
"items.variant.length",
|
||||||
|
"items.variant.height",
|
||||||
|
"items.variant.width",
|
||||||
|
"items.variant.material",
|
||||||
|
"items.product.id",
|
||||||
|
"items.product.collection_id",
|
||||||
|
"items.product.categories.id",
|
||||||
|
"items.product.tags.id",
|
||||||
|
"shipping_address.*",
|
||||||
|
]
|
||||||
|
|||||||
@@ -94,7 +94,11 @@ export const addShippingMethodToCartWorkflow = createWorkflow(
|
|||||||
)
|
)
|
||||||
|
|
||||||
const shippingMethodInput = transform(
|
const shippingMethodInput = transform(
|
||||||
{ input, shippingOptions, validatedMethodData },
|
{
|
||||||
|
input,
|
||||||
|
shippingOptions,
|
||||||
|
validatedMethodData,
|
||||||
|
},
|
||||||
(data) => {
|
(data) => {
|
||||||
const options = (data.input.options ?? []).map((option) => {
|
const options = (data.input.options ?? []).map((option) => {
|
||||||
const shippingOption = data.shippingOptions.find(
|
const shippingOption = data.shippingOptions.find(
|
||||||
|
|||||||
@@ -6,10 +6,12 @@ import {
|
|||||||
WorkflowData,
|
WorkflowData,
|
||||||
WorkflowResponse,
|
WorkflowResponse,
|
||||||
} from "@medusajs/framework/workflows-sdk"
|
} from "@medusajs/framework/workflows-sdk"
|
||||||
|
import { CalculateShippingOptionPriceDTO } from "@medusajs/types"
|
||||||
|
|
||||||
import { useQueryGraphStep, validatePresenceOfStep } from "../../common"
|
import { useQueryGraphStep, validatePresenceOfStep } from "../../common"
|
||||||
import { useRemoteQueryStep } from "../../common/steps/use-remote-query"
|
import { useRemoteQueryStep } from "../../common/steps/use-remote-query"
|
||||||
import { calculateShippingOptionsPricesStep } from "../../fulfillment"
|
import { calculateShippingOptionsPricesStep } from "../../fulfillment"
|
||||||
import { CalculateShippingOptionPriceDTO } from "@medusajs/types"
|
import { cartFieldsForCalculateShippingOptionsPrices } from "../utils/fields"
|
||||||
|
|
||||||
const COMMON_OPTIONS_FIELDS = [
|
const COMMON_OPTIONS_FIELDS = [
|
||||||
"id",
|
"id",
|
||||||
@@ -57,15 +59,10 @@ export const listShippingOptionsForCartWithPricingWorkflow = createWorkflow(
|
|||||||
entity: "cart",
|
entity: "cart",
|
||||||
filters: { id: input.cart_id },
|
filters: { id: input.cart_id },
|
||||||
fields: [
|
fields: [
|
||||||
"id",
|
...cartFieldsForCalculateShippingOptionsPrices,
|
||||||
"sales_channel_id",
|
"sales_channel_id",
|
||||||
"currency_code",
|
"currency_code",
|
||||||
"region_id",
|
"region_id",
|
||||||
"shipping_address.city",
|
|
||||||
"shipping_address.country_code",
|
|
||||||
"shipping_address.province",
|
|
||||||
"shipping_address.postal_code",
|
|
||||||
"items.*",
|
|
||||||
"item_total",
|
"item_total",
|
||||||
"total",
|
"total",
|
||||||
],
|
],
|
||||||
@@ -245,8 +242,18 @@ export const listShippingOptionsForCartWithPricingWorkflow = createWorkflow(
|
|||||||
)
|
)
|
||||||
|
|
||||||
const shippingOptionsWithPrice = transform(
|
const shippingOptionsWithPrice = transform(
|
||||||
{ shippingOptionsFlatRate, shippingOptionsCalculated, prices },
|
{
|
||||||
({ shippingOptionsFlatRate, shippingOptionsCalculated, prices }) => {
|
shippingOptionsFlatRate,
|
||||||
|
shippingOptionsCalculated,
|
||||||
|
prices,
|
||||||
|
fulfillmentSetLocationMap,
|
||||||
|
},
|
||||||
|
({
|
||||||
|
shippingOptionsFlatRate,
|
||||||
|
shippingOptionsCalculated,
|
||||||
|
prices,
|
||||||
|
fulfillmentSetLocationMap,
|
||||||
|
}) => {
|
||||||
return [
|
return [
|
||||||
...shippingOptionsFlatRate.map((shippingOption) => {
|
...shippingOptionsFlatRate.map((shippingOption) => {
|
||||||
const price = shippingOption.calculated_price
|
const price = shippingOption.calculated_price
|
||||||
@@ -264,6 +271,10 @@ export const listShippingOptionsForCartWithPricingWorkflow = createWorkflow(
|
|||||||
is_tax_inclusive:
|
is_tax_inclusive:
|
||||||
prices[index]?.is_calculated_price_tax_inclusive,
|
prices[index]?.is_calculated_price_tax_inclusive,
|
||||||
calculated_price: prices[index],
|
calculated_price: prices[index],
|
||||||
|
stock_location:
|
||||||
|
fulfillmentSetLocationMap[
|
||||||
|
shippingOption.service_zone.fulfillment_set_id
|
||||||
|
],
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -53,22 +53,19 @@ export const listShippingOptionsForCartWorkflow = createWorkflow(
|
|||||||
({ scFulfillmentSetQuery }) => scFulfillmentSetQuery.data[0]
|
({ scFulfillmentSetQuery }) => scFulfillmentSetQuery.data[0]
|
||||||
)
|
)
|
||||||
|
|
||||||
const { fulfillmentSetIds, fulfillmentSetLocationMap } = transform(
|
const { fulfillmentSetIds } = transform(
|
||||||
{ scFulfillmentSets },
|
{ scFulfillmentSets },
|
||||||
({ scFulfillmentSets }) => {
|
({ scFulfillmentSets }) => {
|
||||||
const fulfillmentSetIds = new Set<string>()
|
const fulfillmentSetIds = new Set<string>()
|
||||||
const fulfillmentSetLocationMap = {}
|
|
||||||
|
|
||||||
scFulfillmentSets.stock_locations.forEach((stockLocation) => {
|
scFulfillmentSets.stock_locations.forEach((stockLocation) => {
|
||||||
stockLocation.fulfillment_sets.forEach((fulfillmentSet) => {
|
stockLocation.fulfillment_sets.forEach((fulfillmentSet) => {
|
||||||
fulfillmentSetLocationMap[fulfillmentSet.id] = stockLocation
|
|
||||||
fulfillmentSetIds.add(fulfillmentSet.id)
|
fulfillmentSetIds.add(fulfillmentSet.id)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
return {
|
return {
|
||||||
fulfillmentSetIds: Array.from(fulfillmentSetIds),
|
fulfillmentSetIds: Array.from(fulfillmentSetIds),
|
||||||
fulfillmentSetLocationMap,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@@ -130,19 +127,15 @@ export const listShippingOptionsForCartWorkflow = createWorkflow(
|
|||||||
}).config({ name: "shipping-options-query" })
|
}).config({ name: "shipping-options-query" })
|
||||||
|
|
||||||
const shippingOptionsWithPrice = transform(
|
const shippingOptionsWithPrice = transform(
|
||||||
{ shippingOptions, fulfillmentSetLocationMap },
|
{ shippingOptions },
|
||||||
({ shippingOptions, fulfillmentSetLocationMap }) =>
|
({ shippingOptions }) =>
|
||||||
shippingOptions.map((shippingOption) => {
|
shippingOptions.map((shippingOption) => {
|
||||||
const price = shippingOption.calculated_price
|
const price = shippingOption.calculated_price
|
||||||
const fulfillmentSetId =
|
|
||||||
shippingOption.service_zone.fulfillment_set_id
|
|
||||||
const stockLocation = fulfillmentSetLocationMap[fulfillmentSetId]
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...shippingOption,
|
...shippingOption,
|
||||||
amount: price?.calculated_amount,
|
amount: price?.calculated_amount,
|
||||||
is_tax_inclusive: !!price?.is_calculated_price_tax_inclusive,
|
is_tax_inclusive: !!price?.is_calculated_price_tax_inclusive,
|
||||||
stock_location: stockLocation,
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import {
|
|||||||
} from "@medusajs/framework/workflows-sdk"
|
} from "@medusajs/framework/workflows-sdk"
|
||||||
import { calculateShippingOptionsPricesStep } from "../steps"
|
import { calculateShippingOptionsPricesStep } from "../steps"
|
||||||
import { useQueryGraphStep } from "../../common"
|
import { useQueryGraphStep } from "../../common"
|
||||||
|
import { cartFieldsForCalculateShippingOptionsPrices } from "../../cart/utils/fields"
|
||||||
|
|
||||||
export const calculateShippingOptionsPricesWorkflowId =
|
export const calculateShippingOptionsPricesWorkflowId =
|
||||||
"calculate-shipping-options-prices-workflow"
|
"calculate-shipping-options-prices-workflow"
|
||||||
@@ -31,7 +32,7 @@ export const calculateShippingOptionsPricesWorkflow = createWorkflow(
|
|||||||
const cartQuery = useQueryGraphStep({
|
const cartQuery = useQueryGraphStep({
|
||||||
entity: "cart",
|
entity: "cart",
|
||||||
filters: { id: input.cart_id },
|
filters: { id: input.cart_id },
|
||||||
fields: ["id", "items.*", "shipping_address.*"],
|
fields: cartFieldsForCalculateShippingOptionsPrices,
|
||||||
}).config({ name: "cart-query" })
|
}).config({ name: "cart-query" })
|
||||||
|
|
||||||
const fulfillmentSetId = transform(
|
const fulfillmentSetId = transform(
|
||||||
|
|||||||
Reference in New Issue
Block a user