Extensão

Query Functions

Manipule os valores dos campos dentro da query GraphQL, por meio de uma coleção de utilitários e diretivas especiais que fornecem capacidades de meta-programação.

Logo
Target Image

Click to watch tutorial video - 12:09

Manipule os valores dos campos dentro da query GraphQL, por meio de uma coleção de utilitários e diretivas especiais que fornecem capacidades de meta-programação.

Field to Input

Obtenha o valor de um campo, manipule-o e passe-o como input para outro campo, tudo dentro da mesma query.

query {
  posts {
    excerpt
 
    # Referencing previous field with name "excerpt"
    isEmptyExcerpt: _isEmpty(value: $__excerpt)
 
    # Referencing previous field with alias "isEmptyExcerpt"
    isNotEmptyExcerpt: _not(value: $__isEmptyExcerpt)
  }
}

Iteração e Manipulação de Valores de Campos

Adição de meta-diretivas ao schema GraphQL, para iterar e manipular os elementos de valor de campos array e object:

  1. @underArrayItem
  2. @underJSONObjectProperty
  3. @underEachArrayItem
  4. @underEachJSONObjectProperty
  5. @objectClone

@underArrayItem faz com que a diretiva aninhada seja aplicada em um item específico do array.

Na query abaixo, apenas o primeiro item do array com os nomes das categorias é transformado em maiúsculas:

query {
  posts {
    categoryNames
      @underArrayItem(index: 0)
        @strUpperCase
  }
}

...produzindo:

{
  "data": {
    "posts": {
      "categoryNames": [
        "NEWS",
        "sports"
      ]
    }
  }
}

Campo sobre Campo

Adição da diretiva @applyField, para executar um determinado campo sobre o valor do campo resolvido.

Aplicada a algum campo, a diretiva @applyField permite executar outro campo (que está disponível no mesmo tipo e é aplicado no mesmo objeto), e ou passar o valor resultante adiante para outra diretiva, ou sobrescrever o valor do campo.

Na query abaixo, o campo Post.title do objeto tem o valor "Hello world!". Ao adicionar @applyField para executar o campo _strUpperCase:

{
  post(by: { id: 1 }) {
    title
      @passOnwards(as: "input")
      @applyField(
        name: "_strUpperCase"
        arguments: {
          text: $input
        },
        setResultInResponse: true
      )
  }
}

...o valor do campo é transformado em maiúsculas, produzindo:

{
  "data": {
    "post": {
      "title": "HELLO WORLD!"
    }
  }
}

Manipulação Condicional de Campos

Adição das meta-diretivas @if e @unless ao schema GraphQL, para executar condicionalmente uma diretiva aninhada no campo.

@if executa suas diretivas aninhadas somente se uma condição tiver valor true.

Nesta query, os usuários "Leo" e "Peter" têm seus nomes convertidos em maiúsculas, pois estão no array de "usuários especiais", enquanto "Martin" não:

query {
  users {
    name
      @passOnwards(as: "userName")
      @applyField(
        name: "_inArray"
        arguments: {
          value: $userName
          array: ["Leo", "John", "Peter"]
        }
        passOnwardsAs: "isSpecialUser"
      )
      @if(
        condition: $isSpecialUser
      )
        @strUpperCase
  }
}

...produzindo:

{
  "data": {
    "users": [
      {
        "name": "LEO"
      },
      {
        "name": "Martin"
      },
      {
        "name": "PETER"
      }
    ]
  }
}

Valor Padrão de Campo

Adição da diretiva @default, para definir um valor para campos nulos ou vazios.

No exemplo abaixo, quando um post não tem uma imagem destacada, o campo featuredImage retorna null:

{
  post(by: { id: 1 }) {
    featuredImage {
      id
      src
    }
  }
}
{
  "data": {
    "post": {
      "featuredImage": null
    }
  }
}

Usando @default, podemos recuperar uma imagem padrão:

{
  post(by: { id: 1 }) {
    featuredImage @default(value: 55) {
      id
      src
    }
  }
}
{
  "data": {
    "post": {
      "featuredImage": {
        "id": 55,
        "src": "http://mysite.com/wp-content/uploads/my-default-image.webp"
      }
    }
  }
}

Remoção de Campo da Resposta

Adição da diretiva @remove ao schema GraphQL, que remove a saída de um campo da resposta.

Na query abaixo, geramos a URL para enviar uma requisição HTTP concatenando o domínio do site e o endpoint da API REST. Como os valores desses componentes não são de nosso interesse, não há necessidade de exibi-los na resposta, e podemos removê-los com @remove:

query {
  siteURL: optionValue(name: "siteurl")
    @remove
 
  requestURL: _sprintf(
    string: "%s/wp-json/wp/v2/comments/11/?_fields=id,content,date",
    values: [$__siteURL]
  )
    @remove
 
  _sendJSONObjectItemHTTPRequest(
    input: {
      url: $__requestURL
    }
  )
}

...produzindo esta resposta (observe que os campos siteURL e requestURL foram removidos):

{
  "data": {
    "_sendJSONObjectItemHTTPRequest": {
      "id": 11,
      "date": "2020-12-12T04:07:36",
      "content": {
        "rendered": "<p>Btw, I really like this stuff<\/p>\n"
      }
    }
  }
}

Acionador de Erro na Resposta

Adição do campo global _fail e da diretiva @fail ao schema GraphQL, para adicionar explicitamente uma entrada à propriedade errors na resposta, e do campo global _warn e da diretiva @warn, para adicionar uma entrada à propriedade warnings na resposta.

O campo _fail adiciona o erro sempre, e a diretiva @fail sempre que a condição especificada no argumento condition for atendida:

query {
  _fail(message: "Some error")
  
  posts {
    featuredImage @fail(
      condition: IS_NULL,
      message: "The post does not have a featured image"
    ) {
      id
      src
    }
  }
  
  users {
    name @fail(
      condition: IS_EMPTY,
      message: "The retrieved user does not have a name"
    )
  }
}

Comprar pacote All-Inclusive

Pessoal
$79
/ano
“All-Inclusive” pacote
Licença para 1 domínio
Comprar ->
  • 1 domínio
  • Suporte
  • Atualizações do produto
Organização
$99
/ano
“All-Inclusive” pacote
Licença para 3 domínios
Comprar ->
  • 3 domínios
  • Suporte
  • Atualizações do produto
Profissional
$199
/ano
“All-Inclusive” pacote
Licença para 10 domínios
Comprar ->
  • 10 domínios
  • Suporte
  • Atualizações do produto

A licença é válida por 1 ano (renovável a cada ano). Os preços estão em USD.

Precisa de mais domínios? Fale conosco

Garantia de reembolso de 30 dias

Adquira qualquer extensão com a confiança de que você pode solicitar um reembolso

Testimonial image

“Este plugin é de outro nível! Leva seu site a um patamar completamente novo e o transforma em uma máquina poderosa. Quanto mais você explora o que ele pode fazer, mais impressionado você fica. Se você está em dúvida — é só pegar, você vai se arrepender se não pegar! A documentação fala por si mesma e é sólida como poucas. Leo (o desenvolvedor) é um dos desenvolvedores mais brilhantes e antenados que já conheci. É super responsivo e claramente sabe do que está falando. Estou sinceramente empolgado com tudo que este plugin consegue fazer. As possibilidades são praticamente infinitas e, se SEO é importante para você, essa ferramenta vai ajudar seu site a ranquear forte.”

olmate - Desenvolvedor web

Assine nossa newsletter

Fique por dentro de todas as atualizações do Gato GraphQL.