Extensión

Query Functions

Manipula los valores de los campos dentro de la consulta GraphQL, mediante una colección de utilidades y directivas especiales que proporcionan capacidades de meta-programación.

Logo
Target Image

Click to watch tutorial video - 12:09

Manipula los valores de los campos dentro de la consulta GraphQL, mediante una colección de utilidades y directivas especiales que proporcionan capacidades de meta-programación.

Field to Input

Obtén el valor de un campo, manipúlalo y pásalo como entrada a otro campo, todo dentro de la misma consulta.

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

Iteración y manipulación de valores de campos

Adición de meta-directivas al esquema GraphQL para iterar y manipular los elementos del valor de los campos de tipo array y object:

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

@underArrayItem hace que la directiva anidada se aplique a un elemento específico del array.

En la consulta siguiente, solo el primer elemento del array con los nombres de categoría se transforma a mayúsculas:

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

...produciendo:

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

Campo sobre campo

Adición de la directiva @applyField, para ejecutar un determinado campo sobre el valor del campo resuelto.

Aplicada a algún campo, la directiva @applyField permite ejecutar otro campo (que está disponible en el mismo tipo y se aplica sobre el mismo objeto), y o bien pasar ese valor resultante a otra directiva, o sobrescribir el valor del campo.

En la consulta siguiente, el campo Post.title para el objeto tiene el valor "Hello world!". Al añadir @applyField para ejecutar el campo _strUpperCase:

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

...el valor del campo se transforma a mayúsculas, produciendo:

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

Manipulación condicional de campos

Adición de las meta-directivas @if y @unless al esquema GraphQL, para ejecutar condicionalmente una directiva anidada sobre el campo.

@if ejecuta sus directivas anidadas solo si una condición tiene valor true.

En esta consulta, los usuarios "Leo" y "Peter" ven sus nombres convertidos a mayúsculas, ya que están en el array de "usuarios especiales", mientras que "Martin" no:

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

...produciendo:

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

Valor por defecto del campo

Adición de la directiva @default, para establecer un valor a los campos nulos o vacíos.

En el ejemplo siguiente, cuando una entrada no tiene una imagen destacada, el campo featuredImage devuelve null:

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

Usando @default, podemos entonces recuperar una imagen por defecto:

{
  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"
      }
    }
  }
}

Eliminación de la respuesta de un campo

Adición de la directiva @remove al esquema GraphQL, que elimina la salida de un campo de la respuesta.

En la consulta siguiente, generamos la URL para enviar una petición HTTP, concatenando el dominio del sitio y el endpoint de la REST API. Como los valores de estos componentes no nos interesan, no es necesario imprimirlos en la respuesta, y podemos hacer @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
    }
  )
}

...produciendo esta respuesta (observa que los campos siteURL y requestURL han sido eliminados):

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

Disparador de errores en la respuesta

Adición del campo global _fail y la directiva @fail al esquema GraphQL, para añadir explícitamente una entrada a la propiedad errors en la respuesta, y del campo global _warn y la directiva @warn, para añadir una entrada a la propiedad warnings en la respuesta.

El campo _fail añade el error siempre, y la directiva @fail cuando se cumple la condición especificada en el argumento condition:

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 el paquete All-Inclusive

Personal
$79
/año
“All-Inclusive” paquete
Licencia para 1 dominio
Comprar ->
  • 1 dominio
  • Soporte
  • Actualizaciones del producto
Organización
$99
/año
“All-Inclusive” paquete
Licencia para 3 dominios
Comprar ->
  • 3 dominios
  • Soporte
  • Actualizaciones del producto
Profesional
$199
/año
“All-Inclusive” paquete
Licencia para 10 dominios
Comprar ->
  • 10 dominios
  • Soporte
  • Actualizaciones del producto

La licencia es por 1 año (renovable cada año). Los precios están en USD.

¿Necesitas más dominios? Contáctanos

Garantía de devolución de 30 días

Compra cualquier extensión con la tranquilidad de poder solicitar un reembolso

Features illustration
Money back guarantee

Consulta nuestra política de reembolso

Testimonial image

“¡Este plugin es de otro nivel! Lleva tu sitio a una dimensión totalmente nueva y lo convierte en una bestia. Cuanto más exploras lo que puede hacer, más te va a impresionar. Si estás dudando, simplemente cómpralo: si no lo haces, te vas a arrepentir. La documentación habla por sí sola y es de lo más sólida que hay. Leo (el dev) es uno de los desarrolladores más despiertos y agudos con los que me he cruzado. Responde rapidísimo y se nota que sabe muchísimo. La verdad es que estoy entusiasmado con todo lo que puede hacer este plugin. Las posibilidades son prácticamente infinitas, y si te importa el SEO, esto va a ayudar a posicionar tu sitio fortísimo.”

olmate - Desarrollador web

Suscríbete a nuestra newsletter

Mantente al tanto de todas las novedades de Gato GraphQL.