Utiliser "field to input"
Obtenez la valeur d'un champ, manipulez-la, et saisissez-la dans un autre champ, le tout dans la même requête.
Comment utiliser
Le champ dont on veut obtenir la valeur est référencé en utilisant la syntaxe "Variable" $, et __ avant l'alias ou le nom du champ. (Par exemple, la valeur du champ excerpt est référencée comme $__excerpt.) La réponse du deuxième champ peut elle-même être utilisée comme entrée pour un autre champ :
{
posts {
excerpt
# Référencement du champ précédent avec le nom "excerpt"
isEmptyExcerpt: _isEmpty(value: $__excerpt)
# Référencement du champ précédent avec l'alias "isEmptyExcerpt"
isNotEmptyExcerpt: _not(value: $__isEmptyExcerpt)
}
}La réponse sera :
{
"data": {
"posts": [
{
"excerpt": "Some post excerpt",
"isEmptyExcerpt": false,
"isNotEmptyExcerpt": true
},
{
"excerpt": "",
"isEmptyExcerpt": true,
"isNotEmptyExcerpt": false
}
]
}
}Le champ ne peut être référencé que par l'un de ses champs frères précédents dans le même nœud. Les requêtes suivantes ne fonctionneront PAS :
# Ceci échouera car la référence au champ doit apparaître après le champ, pas avant
{
posts {
isEmptyExcerpt: _isEmpty(value: $__excerpt)
excerpt
}
}
# Ceci échouera car la référence doit être faite dans le même nœud
{
posts {
excerpt
}
isEmptyExcerpt: _isEmpty(value: $__excerpt)
}Le champ ne peut pas non plus être référencé depuis un argument de directive (pour cela, utilisez la directive @passOnwards) :
# Ceci échouera car la référence ne peut être utilisée qu'en entrée d'un champ, pas d'une directive
{
posts {
hasComments
title @include(if: $__hasComments)
}
}Exemples
Si l'extrait de l'article est vide, utiliser le titre à la place :
{
posts {
title
originalExcerpt: excerpt
isEmptyExcerpt: _isEmpty(value: $__originalExcerpt)
excerpt: if(condition: $__isEmptyExcerpt, then: $__title, else: $__originalExcerpt)
}
}Récupérer des données depuis un endpoint REST externe, et manipuler ses données pour les adapter à vos besoins.
{
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")
}Cela produira :
{
"data": {
"externalData": {
"data": {
"user": {
"id": 1,
"name": "Leo",
"surname": "Loso"
}
}
},
"userName": "Leo",
"userLastName": "Loso"
}
}En utilisant la directive @remove sur externalData, nous pouvons également éviter d'afficher les données source de l'endpoint externe dans la réponse :
{
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")
}Cela produira désormais :
{
"data": {
"userName": "Leo",
"userLastName": "Loso"
}
}Récupérer les articles pour chaque utilisateur mentionnant l'e-mail de l'utilisateur :
{
users {
email
posts(filter: { search: $__email }) {
id
title
}
}
}Envoyer une newsletter en définissant les e-mails to et from via le champ 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: "..."
}
)
}