Het schema configureren
Het schema configurerenGebruik van "field to input"

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