Explicação do Código 📜
Importação de Dependências 🛠️
import React from 'react';
import { getPayloadHMR } from '@payloadcms/next/utilities';
import config from '../payload.config';
import RichTextContent from '@/components/RichTextContent';
- React: Importa o React para a criação de componentes.
- getPayloadHMR: Função de utilitário do Payload CMS para recuperar dados com Hot Module Replacement (HMR).
- config: Importa a configuração do Payload CMS a partir de
payload.config
. - RichTextContent: Importa o componente que renderiza conteúdo Rich Text.
Componente CourseCard
🎓
const CourseCard = ({ course }) => (
<div key={course.id}>
<h2>{course.nomeCurso}</h2>
<RichTextContent content={course.planoEnsino} />
</div>
);
- CourseCard: Componente funcional que recebe o
course
como propriedade e exibe:- nomeCurso: O título do curso.
- planoEnsino: O conteúdo do plano de ensino renderizado com o componente
RichTextContent
.
Função Assíncrona Teste
⏳
export default async function Teste({ content }) {
const payload = await getPayloadHMR({ config });
let courses;
try {
courses = await payload.find({
collection: 'cursos',
depth: 1,
pagination: false,
});
} catch (error) {
console.error('Erro ao buscar cursos:', error);
courses = { docs: [] }; // Fallback para evitar erros na renderização
}
return (
<div>
<RichTextContent content={content} />
<h1>Cursos</h1>
{courses.docs.length > 0 ? (
courses.docs.map((course) => <CourseCard key={course.id} course={course} />)
) : (
<p>Nenhum curso encontrado.</p>
)}
</div>
);
}
- Teste: Função assíncrona que executa a consulta de cursos a partir do Payload CMS.
- getPayloadHMR: Utiliza a configuração do
payload.config
para obter a instância do Payload CMS. - payload.find: Busca os cursos na coleção
cursos
, com profundidade 1 (informações relacionadas) e sem paginação. - Tratamento de erro: Se ocorrer um erro, exibe a mensagem de erro e define
courses.docs
como um array vazio. - Renderização:
- Se cursos forem encontrados, mapeia os resultados e exibe um
CourseCard
para cada um. - Caso contrário, exibe uma mensagem informando que nenhum curso foi encontrado.
- Se cursos forem encontrados, mapeia os resultados e exibe um
- getPayloadHMR: Utiliza a configuração do
Resumo ✨
O código exibe uma lista de cursos recuperados do Payload CMS, usando um componente CourseCard
para renderizar informações sobre cada curso. Em caso de falha na consulta, a renderização exibe uma mensagem de erro amigável. O conteúdo de texto enriquecido, como planos de ensino, é processado e exibido usando o componente RichTextContent
.
Código Completo 💻
import React from 'react';
import { getPayloadHMR } from '@payloadcms/next/utilities';
import config from '../payload.config';
import RichTextContent from '@/components/RichTextContent';
const CourseCard = ({ course }) => (
<div key={course.id}>
<h2>{course.nomeCurso}</h2>
<RichTextContent content={course.planoEnsino} />
</div>
);
export default async function Teste({ content }) {
const payload = await getPayloadHMR({ config });
let courses;
try {
courses = await payload.find({
collection: 'cursos',
depth: 1,
pagination: false,
});
} catch (error) {
console.error('Erro ao buscar cursos:', error);
courses = { docs: [] }; // Fallback para evitar erros na renderização
}
return (
<div>
<RichTextContent content={content} />
<h1>Cursos</h1>
{courses.docs.length > 0 ? (
courses.docs.map((course) => <CourseCard key={course.id} course={course} />)
) : (
<p>Nenhum curso encontrado.</p>
)}
</div>
);
}