diff --git a/www/apps/resources/references/core_flows/Common/Steps_Common/functions/core_flows.Common.Steps_Common.useQueryGraphStep/page.mdx b/www/apps/resources/references/core_flows/Common/Steps_Common/functions/core_flows.Common.Steps_Common.useQueryGraphStep/page.mdx index 6c20cc8db1..bb571c722c 100644 --- a/www/apps/resources/references/core_flows/Common/Steps_Common/functions/core_flows.Common.Steps_Common.useQueryGraphStep/page.mdx +++ b/www/apps/resources/references/core_flows/Common/Steps_Common/functions/core_flows.Common.Steps_Common.useQueryGraphStep/page.mdx @@ -12,14 +12,83 @@ import { TypeList, WorkflowDiagram } from "docs-ui" This documentation provides a reference to the `useQueryGraphStep`. It belongs to the `@medusajs/medusa/core-flows` package. -## Type Parameters +This step fetches data across modules using the Query. - +Learn more in the [Query documentation](https://docs.medusajs.com/learn/fundamentals/module-links/query). -## Parameters +## Example - +To retrieve a list of records of a data model: -## Returns +```ts +const { data: products } = useQueryGraphStep({ + entity: "product", + fields: [ + "*", + "variants.*" + ] +}) +``` - +To retrieve a single item instead of a an array: + +```ts +const { data: products } = useQueryGraphStep({ + entity: "product", + fields: [ + "*", + "variants.*" + ], + filters: { + id: "123" + } +}) +``` + +To throw an error if a record isn't found matching the specified ID: + +```ts +const { data: products } = useQueryGraphStep({ + entity: "product", + fields: [ + "*", + "variants.*" + ], + filters: { + id: "123" + }, + options: { + throwIfKeyNotFound: true + } +}) +``` + +To set pagination configurations: + +```ts +const { data: products } = useQueryGraphStep({ + entity: "product", + fields: [ + "*", + "variants.*" + ], + filters: { + id: "123" + }, + pagination: { + take: 10, + skip: 10, + order: { + created_at: "DESC" + } + } +}) +``` + +## Input + + + +## Output + + diff --git a/www/apps/resources/references/helper_steps/functions/helper_steps.useQueryGraphStep/page.mdx b/www/apps/resources/references/helper_steps/functions/helper_steps.useQueryGraphStep/page.mdx index a32958396d..e45420e074 100644 --- a/www/apps/resources/references/helper_steps/functions/helper_steps.useQueryGraphStep/page.mdx +++ b/www/apps/resources/references/helper_steps/functions/helper_steps.useQueryGraphStep/page.mdx @@ -9,14 +9,83 @@ import { TypeList } from "docs-ui" This documentation provides a reference to the `useQueryGraphStep` step. It belongs to the `@medusajs/medusa/core-flows` package. -## Type Parameters +This step fetches data across modules using the Query. - +Learn more in the [Query documentation](https://docs.medusajs.com/learn/fundamentals/module-links/query). -## Parameters +## Example - +To retrieve a list of records of a data model: -## Returns +```ts +const { data: products } = useQueryGraphStep({ + entity: "product", + fields: [ + "*", + "variants.*" + ] +}) +``` - +To retrieve a single item instead of a an array: + +```ts +const { data: products } = useQueryGraphStep({ + entity: "product", + fields: [ + "*", + "variants.*" + ], + filters: { + id: "123" + } +}) +``` + +To throw an error if a record isn't found matching the specified ID: + +```ts +const { data: products } = useQueryGraphStep({ + entity: "product", + fields: [ + "*", + "variants.*" + ], + filters: { + id: "123" + }, + options: { + throwIfKeyNotFound: true + } +}) +``` + +To set pagination configurations: + +```ts +const { data: products } = useQueryGraphStep({ + entity: "product", + fields: [ + "*", + "variants.*" + ], + filters: { + id: "123" + }, + pagination: { + take: 10, + skip: 10, + order: { + created_at: "DESC" + } + } +}) +``` + +## Input + + + +## Output + + diff --git a/www/utils/packages/utils/src/step-utils.ts b/www/utils/packages/utils/src/step-utils.ts index eda89c6159..61c623faad 100644 --- a/www/utils/packages/utils/src/step-utils.ts +++ b/www/utils/packages/utils/src/step-utils.ts @@ -1,4 +1,10 @@ -import { ArrayType, SignatureReflection, SomeType, UnionType } from "typedoc" +import { + ArrayType, + ReferenceType, + SignatureReflection, + SomeType, + UnionType, +} from "typedoc" const disallowedIntrinsicTypeNames = ["unknown", "void", "any", "never"] @@ -6,6 +12,12 @@ export function isWorkflowStep(reflection: SignatureReflection): boolean { if (reflection.parent?.children?.some((child) => child.name === "__step__")) { return true } + if ( + reflection.type?.type === "reference" && + reflection.type.name === "ReturnType" + ) { + return getStepFunctionTypeArg(reflection.type) !== undefined + } if (reflection.type?.type !== "intersection") { return false } @@ -19,7 +31,21 @@ export function isWorkflowStep(reflection: SignatureReflection): boolean { export function getStepInputType( reflection: SignatureReflection ): SomeType | undefined { - if (!isWorkflowStep(reflection) || !reflection.parameters?.length) { + if (!isWorkflowStep(reflection)) { + return + } + + if (reflection.type?.type === "reference") { + const stepFunctionType = getStepFunctionTypeArg(reflection.type) + + if (stepFunctionType) { + return cleanUpType(stepFunctionType.typeArguments?.[0]) + } + + return + } + + if (!reflection.parameters?.length) { return } @@ -40,6 +66,16 @@ export function getStepOutputType( return } + if (reflection.type?.type === "reference") { + const stepFunctionType = getStepFunctionTypeArg(reflection.type) + + if (stepFunctionType) { + return cleanUpType(stepFunctionType.typeArguments?.[1]) + } + + return + } + if (reflection.type?.type !== "intersection") { return reflection.type } @@ -95,3 +131,9 @@ function cleanUpArrayType(arrayType: ArrayType): SomeType { return new ArrayType(cleanedUpType) } + +function getStepFunctionTypeArg(referenceType: ReferenceType) { + return referenceType.typeArguments?.find( + (typeArg) => typeArg.type === "reference" && typeArg.name === "StepFunction" + ) as ReferenceType | undefined +}