small fixes

This commit is contained in:
zmeyer44 2023-11-02 16:11:46 -04:00
parent 70b10bbd56
commit 8fa9560195
3 changed files with 20 additions and 10 deletions

View File

@ -15,6 +15,7 @@ import { type NDKKind } from "@nostr-dev-kit/ndk";
import Header from "./_components/Header"; import Header from "./_components/Header";
import EventsFromCalendar from "@/containers/EventsTimeline/EventsFromCalendar"; import EventsFromCalendar from "@/containers/EventsTimeline/EventsFromCalendar";
import { add } from "@/lib/server-actions/events/cache"; import { add } from "@/lib/server-actions/events/cache";
import { unixTimeNowInSeconds } from "@/lib/nostr/dates";
export default function EventPage({ export default function EventPage({
params: { naddr }, params: { naddr },
@ -61,8 +62,6 @@ export default function EventPage({
</div> </div>
); );
} }
const { tags } = event;
const eventReference = event.encode();
return ( return (
<div className="relative mx-auto max-w-5xl space-y-4 p-2 @container sm:p-4"> <div className="relative mx-auto max-w-5xl space-y-4 p-2 @container sm:p-4">
<Header event={event} /> <Header event={event} />
@ -73,6 +72,10 @@ export default function EventPage({
<div className="mx-auto w-full max-w-[900px] space-y-6"> <div className="mx-auto w-full max-w-[900px] space-y-6">
<EventsFromCalendar <EventsFromCalendar
calendar={event} calendar={event}
secondaryFilter={(e) =>
parseInt(getTagValues("start", e.tags) ?? "0") >
unixTimeNowInSeconds()
}
empty={() => ( empty={() => (
<div className="py-3 text-center text-sm text-muted-foreground"> <div className="py-3 text-center text-sm text-muted-foreground">
<p>No upcoming events</p> <p>No upcoming events</p>

View File

@ -24,7 +24,7 @@ import {
import { Skeleton } from "@/components/ui/skeleton"; import { Skeleton } from "@/components/ui/skeleton";
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";
import { unixTimeNowInSeconds } from "@/lib/nostr/dates"; import { unixTimeNowInSeconds } from "@/lib/nostr/dates";
import { uniqBy } from "ramda";
type CalendarCardProps = { type CalendarCardProps = {
calendar: NDKEvent; calendar: NDKEvent;
}; };
@ -61,7 +61,9 @@ export default function CalendarCard({ calendar }: CalendarCardProps) {
unixTimeNowInSeconds(), unixTimeNowInSeconds(),
); );
const sortedEvents = sortEventsByTagNumber(filteredEvents, "start"); const sortedEvents = sortEventsByTagNumber(filteredEvents, "start");
setUpcomingEvents(sortedEvents); setUpcomingEvents(
uniqBy((e) => getTagValues("name", e.tags), sortedEvents),
);
} }
}, [events]); }, [events]);

View File

@ -9,26 +9,26 @@ import CalendarSection, { CalendarSectionLoading } from "./CalendarSection";
import useEvents from "@/lib/hooks/useEvents"; import useEvents from "@/lib/hooks/useEvents";
type EventsFromCalendar = { type EventsFromCalendar = {
calendar: NDKEvent; calendar: NDKEvent;
secondaryFilter?: (event: NDKEvent) => Boolean;
loader?: () => JSX.Element; loader?: () => JSX.Element;
empty?: () => JSX.Element; empty?: () => JSX.Element;
}; };
export default function EventsFromCalendar({ export default function EventsFromCalendar({
calendar, calendar,
secondaryFilter,
loader: Loader, loader: Loader,
empty: Empty, empty: Empty,
}: EventsFromCalendar) { }: EventsFromCalendar) {
const calendarEvents = getTagsValues("a", calendar.tags); const calendarEvents = getTagsValues("a", calendar.tags);
const { ndk } = useNDK();
const [eventsByDay, setEventsByDay] = useState<NDKEvent[][]>([]); const [eventsByDay, setEventsByDay] = useState<NDKEvent[][]>([]);
const [isFetching, setIsFetching] = useState(false);
const calendarEventIdentifiers = calendarEvents const calendarEventIdentifiers = calendarEvents
.filter(Boolean) .filter(Boolean)
.map((e) => nip19.decode(e)) .map((e) => nip19.decode(e))
.filter(({ type }) => type === "naddr") .filter(({ type }) => type === "naddr")
.map((e) => e.data as nip19.AddressPointer); .map((e) => e.data as nip19.AddressPointer);
const { events } = useEvents({ const { events, isLoading } = useEvents({
filter: { filter: {
kinds: calendarEventIdentifiers.map((k) => k.kind), kinds: calendarEventIdentifiers.map((k) => k.kind),
authors: calendarEventIdentifiers.map((k) => k.pubkey), authors: calendarEventIdentifiers.map((k) => k.pubkey),
@ -37,11 +37,16 @@ export default function EventsFromCalendar({
}); });
useEffect(() => { useEffect(() => {
if (events) { if (events) {
if (secondaryFilter) {
const grouped = groupEventsByDay(events.filter(secondaryFilter));
setEventsByDay(grouped);
} else {
const grouped = groupEventsByDay(events); const grouped = groupEventsByDay(events);
setEventsByDay(grouped); setEventsByDay(grouped);
} }
}
}, [events]); }, [events]);
if (isFetching) { if (isLoading) {
if (Loader) { if (Loader) {
return <Loader />; return <Loader />;
} }