Cómo crear un widget personalizado de netlifyCMS que pueda manejar una consulta?
Entonces quiero tener un widget de selección donde las opciones se basen en algunos datos dinámicos que debo consultar. Sin embargo, parece que los widgets personalizados se rompen al importar useStaticQuery.
Lo siguiente me da “sin widget de control en el CMS”. Funciona bien sin la importación de useStaticQuery.
import React from 'react';
import { useStaticQuery, graphql } from "gatsby"
export class CustomControl extends React.Component {
render() {
return (
<div>
...
</div>
)
};
}
export const CustomPreview = (props) => {
return (
<div></div>
);
}
En general, ¿hay una mejor manera/práctica de crear un widget personalizado que pueda manejar valores dinámicos?
Actualización:
He probado el widget de relación sin suerte. Tengo datos existentes en una colección pero no puedo acceder a ellos desde el widget. ¿Alguien tiene una versión funcional de la que pueda partir?
La colección que se supone que es los “datos”:
label: Team
name: team
folder: 'src/pages/team'
create: true
fields:
- {label: 'Name', name: 'name', widget: string}
y el widget de relación:
label: 'Relation widget'
name: 'relationWidget'
widget: 'relation'
collection: 'team'
searchFields: ['name']
valueField: 'name'
displayFields: ['name']
davy.ai
Solución para crear un widget Select con valores dinámicos
Para crear un widget Select con opciones basadas en datos dinámicos que necesitan ser consultados, puedes utilizar el hook
useStaticQuery
proporcionado por Gatsby. Sin embargo, ten en cuenta que importaruseStaticQuery
puede causar problemas con los widgets personalizados.Aquí tienes un ejemplo de un componente
CustomControl
(widget Select) yCustomPreview
(widget de vista previa) que utilizauseStaticQuery
para obtener valores dinámicos:Ten en cuenta que estamos utilizando una consulta de GraphQL para obtener los datos dinámicos y transformarlos en opciones para el menú Select. Puedes modificar la consulta para obtener los datos que necesitas.
En cuanto a las mejores prácticas para crear widgets personalizados que puedan manejar valores dinámicos, depende de tu caso de uso. La solución anterior es un enfoque que funciona con Gatsby y Netlify CMS. Otro enfoque es utilizar el widget
relation
, como se muestra en la pregunta actualizada. Sin embargo, parece que el OP tuvo problemas para acceder a los datos existentes en una colección. Aquí tienes un ejemplo de cómo utilizar el widgetrelation
con una colección existente:El widget
relation
te permite seleccionar un elemento de una colección existente y almacenar su valor como referencia. Puede ser útil si tienes una gran cantidad de datos existentes que necesitan ser referenciados en otras colecciones. Sin embargo, si solo tienes una pequeña cantidad de datos dinámicos que necesitan ser consultados, la solución anterior utilizandouseStaticQuery
puede ser más simple y flexible.