En nuestro archivo index.js
, queremos poder mostrar todos los próximos eventos en los que la gente puede confirmar su asistencia. En la parte superior del archivo podemos importar gql
y useQuery
desde el cliente apollo. También necesitaremos importar useState
y nuestro componente EventCard
.
import { useState } from "react"; import { gql, useQuery } from "@apollo/client"; import EventCard from "../components/EventCard";
Podemos definir nuestra consulta sobre la función Inicio
de la siguiente manera:
const UPCOMING_EVENTS = gql` query Events($currentTimestamp: String) { events(where: { eventTimestamp_gt: $currentTimestamp }) { id name eventTimestamp imageURL } } `;
Esta consulta retornará el ID, el nombre, la marca de tiempo del evento y la URL de la imagen para cada evento que aún no ha ocurrido.
Ahora, en nuestra función Inicio
, podemos obtener la marca de tiempo actual y cargar la consulta con el cliente apollo. Una vez obtengamos la lista de eventos, podemos mapearlos para generar una lista de tarjetas de eventos.
export default function Home() { const [currentTimestamp, setEventTimestamp] = useState( new Date().getTime().toString() ); const { loading, error, data } = useQuery(UPCOMING_EVENTS, { variables: { currentTimestamp }, }); if (loading) return ( <Landing> <p>Loading...</p> </Landing> ); if (error) return ( <Landing> <p>`Error! ${error.message}`</p> </Landing> ); return ( <Landing> <ul role="list" className="grid grid-cols-2 gap-x-4 gap-y-8 sm:grid-cols-3 sm:gap-x-6 lg:grid-cols-4 xl:gap-x-8" > {data && data.events.map((event) => ( <li key={event.id}> <EventCard id={event.id} name={event.name} eventTimestamp={event.eventTimestamp} imageURL={event.imageURL} /> </li> ))} </ul> </Landing> ); }
¡Ahora en la página de inicio debemos poder ver una lista de los eventos que hemos creado!
Escritoras: Sarah Schwartz, Traductoras: Dami, Brenda, Caro Meneses