-
Notifications
You must be signed in to change notification settings - Fork 5
Directive @default
Let define a GraphQL schema:
type Query {
films: Film!
}
type Film {
id: ID!
title: String!
}This schema allows us to write a query using the generated DSL that looks like this:
val context: ExampleContext = exampleContextOf(createMyAdapter())
val response = context.query {
films {
id()
title()
}
}Imagine that the id field is present in almost all of our queries in the application code. In order not to write
boilerplate code, we can ask Kobby to generate a DSL in such a way that this field is automatically added to the query.
This can be done using a GraphQL directive @default. Let's modify our schema:
directive @default on FIELD_DEFINITION
type Query {
films: [Film!]!
}
type Film {
id: ID! @default
title: String!
}Now we can write our query like this:
val context: ExampleContext = exampleContextOf(createMyAdapter())
val response = context.query {
films {
title()
}
}The generated DSL will automatically add the id field to the projection of the Film query. If you need to exclude
the id field from the query, use the __withoutId() function generated by Kobby:
val context: ExampleContext = exampleContextOf(createMyAdapter())
val response = context.query {
films {
__withoutId()
title()
}
}To exclude from the query all fields of type Film, marked with the directive @default, use the __minimize()
function:
val context: ExampleContext = exampleContextOf(createMyAdapter())
val response = context.query {
films {
__minimize()
title()
}
}The __minimize() function is automatically generated for all types defined in the schema, regardless of whether those
types have fields marked with @default directive or not.
- The
@defaultdirective can only be applied to a field with no arguments. - The
@defaultdirective can only be applied to a field that returns a scalar or enum type. - The
@defaultdirective cannot be applied to overridden fields. In this case, apply the directive to the base interface field.
In case of violation of any restriction, the directive will be ignored.