Configurar el esquema
Configurar el esquemaUsar directivas componibles

Usar directivas componibles

Haz que una directiva modifique el comportamiento de otra directiva.

Esta funcionalidad permite poder usar una directiva, cuando de otra manera no podríamos utilizarla debido a un desajuste de tipos (es decir, cuando una directiva no puede aplicarse al campo, porque tiene un input que es diferente de la salida del campo).

Por ejemplo, el campo capabilities devuelve [String] (un array de strings), y la directiva @strUpperCase recibe String. Por tanto, ejecutar la siguiente consulta devuelve un error debido al desajuste de tipos:

query {
  user(by: {id: 1}) {
    capabilities @strUpperCase
  }
}

Con directivas componibles, podemos emplear la directiva @underEachArrayItem (que itera sobre un array de elementos, y aplica su directiva anidada a cada uno de ellos) para preparar el terreno antes de que se ejecute @strUpperCase, haciendo que reciba un único elemento (de tipo String).

La consulta de arriba puede satisfacerse así:

query {
  user(by: {id: 1}) {
    capabilities
      @underEachArrayItem
        @strUpperCase
  }
}

Meta directivas

Cada meta directiva puede afectar (o "anidar") múltiples directivas a la vez. Las directivas que se ven afectadas se indican mediante el argumento affectDirectivesUnderPos, que recibe un array de enteros positivos, definiendo cada uno de ellos la posición relativa de la directiva afectada.

Por defecto, el argumento affectDirectivesUnderPos tiene el valor por defecto [1], lo que significa que afectará a la directiva justo al lado.

En el ejemplo de abajo, tenemos:

  • @underEachArrayItem es la meta directiva
  • @strTranslate está anidada bajo @underEachArrayItem (valor por defecto implícito affectDirectivesUnderPos: [1])
{
  someField
    @underEachArrayItem
      @strTranslate
}

En el ejemplo de abajo, tenemos en su lugar:

  • @strTranslate y @strUpperCase están anidadas bajo @underEachArrayItem (como indican las posiciones relativas [1, 2] en el argumento affectDirectivesUnderPos)
{
  someField
    @underEachArrayItem(affectDirectivesUnderPos: [1, 2])
      @strTranslate
      @strUpperCase
}

Las meta directivas también pueden anidarse dentro de meta directivas.

En el ejemplo de abajo, tenemos:

  • @underEachArrayItem es la meta directiva más externa
  • @underJSONObjectProperty está anidada bajo @underEachArrayItem
  • @strUpperCase está anidada bajo @underJSONObjectProperty
query UppercaseEntriesInsideObject {
  entries: _echo(value: [
    {
      text: "Hello my friends"
    },
    {
      text: "How do you like this software so far?"
    }
  ])
   @underEachArrayItem
      @underJSONObjectProperty(by: { key: "text" })
        @strUpperCase
  }

Configuración

Para habilitar o deshabilitar las directivas componibles en el esquema GraphQL, ve al módulo "Composable Directives" en la página de Ajustes, y marca/desmarca la casilla Enable composable directives?:

Ajustes para Composable Directives
Ajustes para Composable Directives

Para habilitar o deshabilitar las directivas componibles en un endpoint específico, selecciona la opción deseada en el bloque "Composable Directives" desde la correspondiente Schema Configuration:

Composable Directives en la Schema Configuration
Composable Directives en la Schema Configuration