Campo sobre Campo
Directiva @applyField, para ejecutar un determinado campo sobre el valor resuelto del campo.
Descripción
Aplicada a algún campo, la directiva @applyField permite ejecutar otro campo (que esté disponible en el mismo tipo y se aplique sobre el mismo objeto), y bien pasar ese valor resultante a otra directiva, o sobrescribir el valor del campo.
Esto nos permite manipular el valor del campo de múltiples formas, aplicando alguna funcionalidad proporcionada mediante la extensión PHP Functions via Schema, y almacenando el nuevo resultado en la respuesta.
En la consulta de abajo, el campo Post.title para el objeto tiene el valor "Hello world!". Añadiendo @applyField para ejecutar el campo _strUpperCase (y precediéndolo con @passOnwards, que exporta el valor del campo bajo el dinámico $input):
{
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!"
}
}
}Podemos concatenar múltiples @applyFunction, usando la respuesta de uno como entrada en otro, realizando así múltiples operaciones sobre el mismo valor del campo.
En la consulta de abajo, hay 2 operaciones @applyFunction aplicadas:
- Transformar a mayúsculas, y pasar el valor adelante bajo
$ucTitle - Reemplazar
" "con"-"y sobrescribir el valor del campo
{
post(by: { id: 1 }) {
title
@passOnwards(as: "input")
@applyField(
name: "_strUpperCase"
arguments: {
text: $input
},
passOnwardsAs: "ucTitle"
)
@applyField(
name: "_strReplace"
arguments: {
search: " ",
replaceWith: "-",
in: $ucTitle
},
setResultInResponse: true
)
}
}...produciendo:
{
"data": {
"post": {
"title": "HELLO-WORLD!"
}
}
}Más ejemplos
Recuperar el valor opuesto al que proporciona el campo:
{
posts {
id
notHasComments: hasComments
@passOnwards(as: "hasComments")
@applyField(
name: "_not",
arguments: {
value: $hasComments
},
setResultInResponse: true
)
}
}Junto con la extensión Data Iteration Meta Directives, manipular todos los elementos de un array, acortando cada uno a no más de 20 caracteres de largo:
{
posts {
categoryNames
@underEachArrayItem(passValueOnwardsAs: "categoryName")
@applyField(
name: "_strSubstr"
arguments: {
string: $categoryName,
offset: 0,
length: 20
},
setResultInResponse: true
)
}
}Junto con la extensión Data Iteration Meta Directives, convertir el primer elemento de un array a mayúsculas:
{
posts {
categoryNames
@underArrayItem(passOnwardsAs: "value", index: 0)
@applyField(
name: "_strUpperCase"
arguments: {
text: $value
},
setResultInResponse: true
)
}
}