small fixes
This commit is contained in:
parent
70b10bbd56
commit
8fa9560195
@ -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>
|
||||||
|
@ -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]);
|
||||||
|
|
||||||
|
@ -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 />;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user