diff --git a/public/images/events-empty-state-quiera.png b/public/images/events-empty-state-quiera.png new file mode 100644 index 0000000..65d1db8 Binary files /dev/null and b/public/images/events-empty-state-quiera.png differ diff --git a/src/app/events/page.tsx b/src/app/events/page.tsx index bcc4f76..4ca5cc4 100644 --- a/src/app/events/page.tsx +++ b/src/app/events/page.tsx @@ -1,9 +1,11 @@ import type { Metadata } from "next"; import Events from "@/views/Events"; -import { getPublicEvents } from "@/lib/public-api"; +import { getPublicEventBrowsePage } from "@/lib/public-api"; import { siteUrl } from "@/lib/site"; import { getCmsPageContent, getCmsSiteContent } from "@/lib/content-cms"; import { cmsPageMetadata, collectionPageStructuredData, safeJsonLd } from "@/lib/seo"; +import { getEventPath } from "@/lib/event-ui"; +import { parseEventCatalogParams } from "@/lib/event-catalog"; type SearchParams = Promise>; @@ -41,8 +43,18 @@ export default async function EventsPage({ }) { const resolved = await searchParams; const search = firstString(resolved.search).trim(); - const [events, content, siteContent] = await Promise.all([ - getPublicEvents({ search: search || undefined }), + const query = new URLSearchParams(); + Object.entries(resolved).forEach(([key, value]) => { + const firstValue = firstString(value); + if (firstValue !== "") query.set(key, firstValue); + }); + const requestedFilters = parseEventCatalogParams(query, Number.MAX_SAFE_INTEGER); + const [eventPage, content, siteContent] = await Promise.all([ + getPublicEventBrowsePage({ + ...requestedFilters, + priceMin: query.has("price_min") ? requestedFilters.priceMin : undefined, + priceMax: query.has("price_max") ? requestedFilters.priceMax : undefined, + }), getCmsPageContent("events"), getCmsSiteContent(), ]); @@ -51,9 +63,9 @@ export default async function EventsPage({ description: content.seo.description || content.intro, path: "/events", siteContent, - items: events.filter((event) => event.slug).map((event) => ({ + items: eventPage.results.map((event) => ({ name: event.title, - url: new URL(`/events/${encodeURIComponent(event.slug)}`, siteUrl).toString(), + url: new URL(getEventPath(event), siteUrl).toString(), description: event.description, })), }); @@ -61,7 +73,11 @@ export default async function EventsPage({ return ( <>