Configurer le schéma
Configurer le schémaUtiliser "field to input"

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