Gebruik van "field to input"
Haal de waarde van een veld op, bewerk deze en geef hem als invoer door aan een ander veld — allemaal binnen dezelfde query.
Hoe te gebruiken
Het veld waarvan je de waarde wilt ophalen, wordt gerefereerd met de "Variable"-syntaxis $ en __ voor de alias of naam van het veld. (De waarde van het veld excerpt wordt bijvoorbeeld gerefereerd als $__excerpt.) De reactie van het tweede veld kan op zijn beurt worden gebruikt als invoer voor een ander veld:
{
posts {
excerpt
# Referentie naar het vorige veld met naam "excerpt"
isEmptyExcerpt: _isEmpty(value: $__excerpt)
# Referentie naar het vorige veld met alias "isEmptyExcerpt"
isNotEmptyExcerpt: _not(value: $__isEmptyExcerpt)
}
}De reactie zal zijn:
{
"data": {
"posts": [
{
"excerpt": "Some post excerpt",
"isEmptyExcerpt": false,
"isNotEmptyExcerpt": true
},
{
"excerpt": "",
"isEmptyExcerpt": true,
"isNotEmptyExcerpt": false
}
]
}
}Een veld kan alleen worden gerefereerd door eerdere zustervelden in hetzelfde knooppunt. De volgende queries zullen NIET werken:
# Dit mislukt omdat de referentie naar het veld na het veld moet verschijnen, niet ervoor
{
posts {
isEmptyExcerpt: _isEmpty(value: $__excerpt)
excerpt
}
}
# Dit mislukt omdat de referentie binnen hetzelfde knooppunt moet worden gedaan
{
posts {
excerpt
}
isEmptyExcerpt: _isEmpty(value: $__excerpt)
}Een veld kan ook niet worden gerefereerd vanuit een directive-argument (gebruik hiervoor de directive @passOnwards):
# Dit mislukt omdat de referentie alleen als invoer voor een veld kan worden gebruikt, niet voor een directive
{
posts {
hasComments
title @include(if: $__hasComments)
}
}Voorbeelden
Als de excerpt van een bericht leeg is, gebruik dan in plaats daarvan de titel:
{
posts {
title
originalExcerpt: excerpt
isEmptyExcerpt: _isEmpty(value: $__originalExcerpt)
excerpt: if(condition: $__isEmptyExcerpt, then: $__title, else: $__originalExcerpt)
}
}Haal gegevens op van een extern REST-eindpunt en bewerk ze naar jouw wensen.
{
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")
}Dit zal het volgende opleveren:
{
"data": {
"externalData": {
"data": {
"user": {
"id": 1,
"name": "Leo",
"surname": "Loso"
}
}
},
"userName": "Leo",
"userLastName": "Loso"
}
}Door de directive @remove te gebruiken op externalData, kunnen we ook voorkomen dat de brongegevens van het externe eindpunt in de reactie worden weergegeven:
{
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")
}Dit levert nu het volgende op:
{
"data": {
"userName": "Leo",
"userLastName": "Loso"
}
}Haal de berichten op voor elke gebruiker die het e-mailadres van de gebruiker vermelden:
{
users {
email
posts(filter: { search: $__email }) {
id
title
}
}
}Verstuur een nieuwsbrief door de to- en from-e-mailadressen te definiëren via het veld 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: "..."
}
)
}