Configurar o schema
Configurar o schemaUsando "field to input"

Usando "field to input"

Obtenha o valor de um campo, manipule-o e passe-o como entrada para outro campo, tudo na mesma query.

Como usar

O campo do qual se deseja obter o valor é referenciado usando a sintaxe "Variable" $, e __ antes do alias ou nome do campo. (Por exemplo, o valor do campo excerpt é referenciado como $__excerpt.) A resposta do segundo campo pode, por sua vez, ser usada como entrada para outro campo:

{
  posts {
    excerpt
 
    # Referenciando o campo anterior com o nome "excerpt"
    isEmptyExcerpt: _isEmpty(value: $__excerpt)
 
    # Referenciando o campo anterior com o alias "isEmptyExcerpt"
    isNotEmptyExcerpt: _not(value: $__isEmptyExcerpt)
  }
}

A resposta será:

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

O campo só pode ser referenciado por um de seus campos irmãos anteriores no mesmo nó. As seguintes queries NÃO funcionarão:

# Isso falhará porque a referência ao campo deve aparecer depois do campo, não antes
{
  posts {
    isEmptyExcerpt: _isEmpty(value: $__excerpt)
    excerpt
  }
}
 
# Isso falhará porque a referência deve ser feita dentro do mesmo nó
{
  posts {
    excerpt
  }
  isEmptyExcerpt: _isEmpty(value: $__excerpt)
}

O campo também não pode ser referenciado a partir do argumento de uma diretiva (para isso, use a diretiva @passOnwards):

# Isso falhará porque a referência só pode ser usada como entrada para um campo, não para uma diretiva
{
  posts {
    hasComments
    title @include(if: $__hasComments)
  }
}

Exemplos

Se o excerpt do post estiver vazio, use o título no lugar:

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

Recupere dados de um endpoint REST externo e manipule-os para atender às suas necessidades.

{
  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")
}

Isso produzirá:

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

Usando a diretiva @remove em externalData, também podemos evitar que os dados de origem do endpoint externo sejam exibidos na resposta:

{
  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")
}

Isso agora produzirá:

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

Recupere os posts de cada usuário que mencionam o e-mail do usuário:

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

Envie uma newsletter definindo os e-mails to e from através do 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: "..."
    }
  )
}