"use client"; import { NDKEvent, type NDKKind } from "@nostr-dev-kit/ndk"; import CalendarSection, { CalendarSectionLoading, } from "./_components/CalendarSection"; import useEvents from "@/lib/hooks/useEvents"; import { getTagValues } from "@/lib/nostr/utils"; import { fromUnix, daysOffset } from "@/lib/utils/dates"; export default function Page() { const { events, isLoading } = useEvents({ filter: { kinds: [31923 as NDKKind], limit: 100, }, }); const eventsByDay = groupEventsByDay(events); if (isLoading && !eventsByDay.length) { return (
); } return (

Upcoming Events

{eventsByDay.map((e) => ( ))}
); } function groupEventsByDay(events: NDKEvent[]) { const eventDays: Record = {}; for (const event of events) { const eventStartTime = getTagValues("start", event.tags); if (!eventStartTime) continue; const startDate = fromUnix(parseInt(eventStartTime)); const daysAway = daysOffset(startDate); if (daysAway < 1) continue; if (eventDays[`${daysAway}`]) { eventDays[`${daysAway}`]!.push(event); } else { eventDays[`${daysAway}`] = [event]; } } const groupedArray = Object.entries(eventDays) .sort(([aKey], [bKey]) => { const aDay = parseInt(aKey); const bDay = parseInt(bKey); if (aDay > bDay) { return 1; } else if (aDay < bDay) { return -1; } return 0; }) .map(([_, events]) => events); return groupedArray; }