diff --git a/website/pages/_meta.ts b/website/pages/_meta.ts index baa9f41c71..7b0f42dca3 100644 --- a/website/pages/_meta.ts +++ b/website/pages/_meta.ts @@ -17,7 +17,7 @@ const meta = { title: 'Advanced Guides', }, 'constructing-types': '', - 'input-unions': '', + 'oneof-input-objects': 'OneOf input objects', 'defer-stream': '', '-- 3': { type: 'separator', diff --git a/website/pages/input-unions.mdx b/website/pages/oneof-input-objects.mdx similarity index 68% rename from website/pages/input-unions.mdx rename to website/pages/oneof-input-objects.mdx index 718c253077..a2a9a6d57c 100644 --- a/website/pages/input-unions.mdx +++ b/website/pages/oneof-input-objects.mdx @@ -7,8 +7,8 @@ import { Tabs } from 'nextra/components'; Some inputs will behave differently depending on what input we choose. Let's look at the case for a field named `product`, we can fetch a `Product` by either its `id` or its `name`. Currently we'd make a tradeoff for this by introducing two arguments that are both nullable, now if both are passed -as null we'd have to handle that in code. To fix this the `@oneOf` directive was introduced so we -can create these input-unions without sacrificing the strictly typed nature of our GraphQL Schema. +as null (or both non-null) we'd have to handle that in code - the type system wouldn't indicate that exactly one was required. To fix this, the `@oneOf` directive was introduced so we +can create this "exactly one option" constraint without sacrificing the strictly typed nature of our GraphQL Schema. @@ -19,13 +19,20 @@ const schema = buildSchema(` name: String! } - input ProductInput @oneOf { + input ProductLocation { + aisleNumber: Int! + shelfNumber: Int! + positionOnShelf: Int! + } + + input ProductSpecifier @oneOf { id: ID name: String + location: ProductLocation } type Query { - product(input: ProductInput!): Product + product(by: ProductSpecifier!): Product } `); ``` @@ -69,4 +76,5 @@ const schema = new GraphQLSchema({ It doesn't matter whether you have 2 or more inputs here, all that matters is -that your user will have to specify one, and only one, for this input to be valid. \ No newline at end of file +that your user will have to specify one, and only one, for this input to be valid. +The values are not limited to scalars, lists and other input object types are also allowed. \ No newline at end of file