"use client"; import { useState, useEffect } from "react"; import { NDKEvent } from "@nostr-dev-kit/ndk"; import { getTagsValues } from "@/lib/nostr/utils"; import { groupEventsByDay } from "."; import { useNDK } from "@/app/_providers/ndk"; import { nip19 } from "nostr-tools"; import CalendarSection, { CalendarSectionLoading } from "./CalendarSection"; import useEvents from "@/lib/hooks/useEvents"; type EventsFromCalendar = { calendar: NDKEvent; loader?: () => JSX.Element; empty?: () => JSX.Element; }; export default function EventsFromCalendar({ calendar, loader: Loader, empty: Empty, }: EventsFromCalendar) { const calendarEvents = getTagsValues("a", calendar.tags); const { ndk } = useNDK(); const [eventsByDay, setEventsByDay] = useState([]); const [isFetching, setIsFetching] = useState(false); const calendarEventIdentifiers = calendarEvents .filter(Boolean) .map((e) => nip19.decode(e)) .filter(({ type }) => type === "naddr") .map((e) => e.data as nip19.AddressPointer); const { events } = useEvents({ filter: { kinds: calendarEventIdentifiers.map((k) => k.kind), authors: calendarEventIdentifiers.map((k) => k.pubkey), ["#d"]: calendarEventIdentifiers.map((k) => k.identifier), }, }); useEffect(() => { if (events) { const grouped = groupEventsByDay(events); setEventsByDay(grouped); } }, [events]); if (isFetching) { if (Loader) { return ; } return ; } if (Empty && eventsByDay.length === 0) { return ; } return ( <> {eventsByDay.map((e) => ( ))} ); }