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