Configurar el esquema
Configurar el esquemaUsar "field to input"

Usar "field to input"

Obtén el valor de un campo, manipúlalo, e introdúcelo en otro campo, todo dentro de la misma consulta.

Cómo usar

El campo del que obtener el valor se referencia utilizando la sintaxis de "Variable" $, y __ antes del alias o nombre del campo. (Por ejemplo, el valor del campo excerpt se referencia como $__excerpt.) La respuesta del segundo campo puede ella misma usarse como entrada para otro campo:

{
  posts {
    excerpt
 
    # Referenciando el campo previo con nombre "excerpt"
    isEmptyExcerpt: _isEmpty(value: $__excerpt)
 
    # Referenciando el campo previo con alias "isEmptyExcerpt"
    isNotEmptyExcerpt: _not(value: $__isEmptyExcerpt)
  }
}

La respuesta será:

{
  "data": {
    "posts": [
      {
        "excerpt": "Some post excerpt",
        "isEmptyExcerpt": false,
        "isNotEmptyExcerpt": true
      },
      {
        "excerpt": "",
        "isEmptyExcerpt": true,
        "isNotEmptyExcerpt": false
      }
    ]
  }
}

El campo solo puede ser referenciado por cualquiera de sus campos hermanos previos en el mismo nodo. Las siguientes consultas NO funcionarán:

# Esto fallará porque la referencia al campo debe aparecer después del campo, no antes
{
  posts {
    isEmptyExcerpt: _isEmpty(value: $__excerpt)
    excerpt
  }
}
 
# Esto fallará porque la referencia debe hacerse dentro del mismo nodo
{
  posts {
    excerpt
  }
  isEmptyExcerpt: _isEmpty(value: $__excerpt)
}

El campo tampoco puede ser referenciado desde un argumento de directiva (para eso, usa la directiva @passOnwards):

# Esto fallará porque la referencia solo puede usarse como entrada a un campo, no a una directiva
{
  posts {
    hasComments
    title @include(if: $__hasComments)
  }
}

Ejemplos

Si el extracto de la entrada está vacío, usa el título en su lugar:

{
  posts {
    title
    originalExcerpt: excerpt
    isEmptyExcerpt: _isEmpty(value: $__originalExcerpt)
    excerpt: if(condition: $__isEmptyExcerpt, then: $__title, else: $__originalExcerpt)
  }
}

Recupera datos de un endpoint REST externo, y manipula sus datos para adaptarlos a tus requisitos.

{
  externalData: _getJSON(url: "https://example.com/rest/some-external-endpoint")
  userName: _extract(object: $__externalData, path: "data.user.name")
  userLastName: _extract(object: $__externalData, path: "data.user.surname")
}

Esto producirá:

{
  "data": {
    "externalData": {
      "data": {
        "user": {
          "id": 1,
          "name": "Leo",
          "surname": "Loso"
        }
      }
    },
    "userName": "Leo",
    "userLastName": "Loso"
  }
}

Usando la directiva @remove sobre externalData, también podemos evitar imprimir los datos fuente del endpoint externo en la respuesta:

{
  externalData: _getJSON(url: "https://example.com/rest/some-external-endpoint") @remove
  userName: _extract(object: $__externalData, path: "data.user.name")
  userLastName: _extract(object: $__externalData, path: "data.user.surname")
}

Esto ahora producirá:

{
  "data": {
    "userName": "Leo",
    "userLastName": "Loso"
  }
}

Recupera las entradas para cada usuario que mencionen el email del usuario:

{
  users {
    email
    posts(filter: { search: $__email }) {
      id
      title
    }
  }
}

Envía una newsletter definiendo los emails to y from mediante el campo optionValue:

mutation {
  fromEmail: optionValue(name: "admin_email")
  toEmail: optionValue(name: "subscribers_email_list_recipient_address")
  _sendEmail(
    from: {
      email: $__fromEmail
    }
    to: $__toEmail
    subject: "Weekly summary"
    messageAs: {
      html: "..."
    }
  )
}