diff --git a/www/apps/api-reference/components/Tags/Operation/Parameters/Types/Union/index.tsx b/www/apps/api-reference/components/Tags/Operation/Parameters/Types/Union/index.tsx index d81bfb3b1b..5933951632 100644 --- a/www/apps/api-reference/components/Tags/Operation/Parameters/Types/Union/index.tsx +++ b/www/apps/api-reference/components/Tags/Operation/Parameters/Types/Union/index.tsx @@ -3,6 +3,7 @@ import dynamic from "next/dynamic" import type { TagOperationParametersDefaultProps } from "../Default" import { TagOperationParametersObjectProps } from "../Object" import { Loading } from "docs-ui" +import mergeAllOfTypes from "../../../../../../utils/merge-all-of-types" const TagOperationParametersObject = dynamic( async () => import("../Object"), @@ -34,7 +35,9 @@ const TagOperationParametersUnion = ({ }: TagOperationParametersUnionProps) => { const objectSchema = schema.anyOf ? schema.anyOf.find((item) => item.type === "object" && item.properties) - : schema.allOf?.find((item) => item.type === "object" && item.properties) + : schema.allOf + ? mergeAllOfTypes(schema) + : undefined if (!objectSchema) { return ( diff --git a/www/apps/api-reference/utils/merge-all-of-types.ts b/www/apps/api-reference/utils/merge-all-of-types.ts new file mode 100644 index 0000000000..057bbedf43 --- /dev/null +++ b/www/apps/api-reference/utils/merge-all-of-types.ts @@ -0,0 +1,33 @@ +import type { PropertiesObject, SchemaObject } from "@/types/openapi" + +export default function mergeAllOfTypes( + allOfSchema: SchemaObject +): SchemaObject { + if (!allOfSchema.allOf) { + // return whatever the schema is + return allOfSchema + } + // merge objects' properties in this var + let properties: PropertiesObject = {} + let foundObjects = false + + allOfSchema.allOf.forEach((item) => { + if (item.type !== "object") { + return + } + + properties = Object.assign(properties, item.properties) + foundObjects = true + }) + + if (!foundObjects && allOfSchema.allOf.length) { + // return the first item in the union. + // allOf should always include an object but just in case + return allOfSchema.allOf[0] + } + + return { + type: "object", + properties, + } +}