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
+}