fix(core-flows,types,medusa): pass /store/shipping-options fields to workflow (#13527)

cc @willbouch since you asked to be tagged if I opened this PR.

The /store/shipping-options is one of only 2 store endpoints to not allow custom `fields` to be passed(other one is /store/returns if you guys want to add it to the backlog). This PR fixes that so that custom linked models can also be retrieved.

Note: This fix reveals a bug in the next.js starter

eac359cc8d/src/lib/data/fulfillment.ts (L23-L24)

`fields` was previously ignored, now it errors since it tries to parse the misspelled "fulfllment"(the i is missing). It worked before since both fields are already defined by default inside the workflow. So the `fields` line is totally redundant and should be removed(ideally before merging this).   
Maybe in the next release notes it should also warn users to remove it for those that already have a modified copy of the starter.
This commit is contained in:
Leonardo Benini
2025-09-22 15:31:59 +02:00
committed by GitHub
parent 3758303a1d
commit 458dd04bbf
4 changed files with 28 additions and 10 deletions

View File

@@ -0,0 +1,7 @@
---
"@medusajs/core-flows": patch
"@medusajs/types": patch
"@medusajs/medusa": patch
---
fix(core-flows,types,medusa): pass /store/shipping-options fields to workflow

View File

@@ -15,11 +15,8 @@ import {
AdditionalData,
ListShippingOptionsForCartWorkflowInput,
} from "@medusajs/types"
import { filterObjectByKeys, isDefined } from "@medusajs/framework/utils"
import {
pricingContextResult,
shippingOptionsContextResult,
} from "../utils/schemas"
import { deduplicate, filterObjectByKeys, isDefined } from "@medusajs/framework/utils"
import { pricingContextResult, shippingOptionsContextResult } from "../utils/schemas"
export const listShippingOptionsForCartWorkflowId =
"list-shipping-options-for-cart"
@@ -256,9 +253,9 @@ export const listShippingOptionsForCartWorkflow = createWorkflow(
}
)
const shippingOptions = useRemoteQueryStep({
entry_point: "shipping_options",
fields: [
const fields = transform(input, ({ fields = [] }) => {
return deduplicate([
...fields,
"id",
"name",
"price_type",
@@ -286,7 +283,11 @@ export const listShippingOptionsForCartWorkflow = createWorkflow(
"calculated_price.*",
"prices.*",
"prices.price_rules.*",
],
])
})
const shippingOptions = useRemoteQueryStep({
entry_point: "shipping_options",
fields,
variables: queryVariables,
}).config({ name: "shipping-options-query" })

View File

@@ -236,6 +236,12 @@ export type ListShippingOptionsForCartWorkflowInput = {
* If not specified, all applicable shipping options are retrieved.
*/
option_ids?: string[]
/**
* The fields and relations to retrieve in the shipping option. These fields
* are passed to [Query](https://docs.medusajs.com/learn/fundamentals/module-links/query),
* so you can pass names of custom models linked to the shipping option.
*/
fields?: string[]
/**
* Whether to retrieve return shipping options.
* By default, non-return shipping options are retrieved.

View File

@@ -10,7 +10,11 @@ export const GET = async (
const workflow = listShippingOptionsForCartWorkflow(req.scope)
const { result: shipping_options } = await workflow.run({
input: { cart_id, is_return: !!is_return },
input: {
cart_id,
is_return: !!is_return,
fields: req.queryConfig.fields
},
})
res.json({ shipping_options })