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: "..."
}
)
}