# Gatsby Transformer Kontent GraphQL

This plugin overrides the default GraphQL types generated by the `gatsby-source-kontent` plugin.

## Configuration

- `projectId`: the Kentico project id used by the `gatsby-source-kontent` plugin
- `managementKey`: The **Management API** key of the Kentico project
- `typesToGenerate`: optional array listing the types that needs to be generated. if the array is empty, nothing will be handled by this plugin. If omitted, it will override all types

## Changes brought to the default `gatsby-source-kontent` GraphQL types

### Text element

- If the element is marked as required in Kentico Kontent, the GraphQL type will also be marked as required

### URL Slug element

- If the element is marked as required in Kentico Kontent, the GraphQL type will also be marked as required

### Asset element

- If the element is marked as required in Kentico Kontent, the GraphQL type will also be marked as required
- If the `Limit number of assets` constraint is configured in Kentico Kontent:
  - The element will return a single value if the limit is either `at most 1` or `exactly 1`
  - For whatever other value, the element will return an array

### Multiple choice element

- If the element is marked as required in Kentico Kontent, the GraphQL type will also be marked as required
- If the `Show in content item as` constraint is configured as "Radio buttons" in Kentico Kontent, The element will return a single value. Otherwhise it will be returned as an array.
- Every choice configured in Kentico Kontent will be transformed into a `enum` type in GraphQL, as to provide correct type-hinting in Typescript

### Linked Item and Subpages element

- If the element is marked as required in Kentico Kontent, the GraphQL type will also be marked as required
- If the `Limit number of assets` constraint is configured in Kentico Kontent:
  - The element will return a single value if the limit is either `at most 1` or `exactly 1`
  - For whatever other value, the element will return an array
- Every `Allowed content type` configured in Kentico Kontent will be transformed into a `union` type in GraphQL, as to provide correct type-hinting in Typescript
