Skip to content

Commit f7d7983

Browse files
committed
feat: add related events section on event page (#207)
1 parent 574f76d commit f7d7983

File tree

2 files changed

+61
-14
lines changed

2 files changed

+61
-14
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
---
2+
import EventCard from "@/components/EventCard/index.astro";
3+
import TiltedCard from "@/components/TiltedCard";
4+
import type { CollectionEntry } from "astro:content";
5+
6+
interface Props {
7+
currentEvent: CollectionEntry<"events">;
8+
relatedEvents: CollectionEntry<"events">[];
9+
}
10+
11+
const { currentEvent, relatedEvents } = Astro.props;
12+
---
13+
14+
{
15+
relatedEvents.length > 0 && (
16+
<div class="relative mx-auto flex w-full max-w-screen-lg flex-col gap-8 px-4 py-12 md:py-24">
17+
<h2 class="scroll-mt-32 font-heading text-2xl font-medium uppercase tracking-widest">
18+
More Events in {currentEvent.data.city}
19+
</h2>
20+
<div class="grid gap-4 md:grid-cols-3">
21+
{relatedEvents.map((event) => (
22+
<TiltedCard client:visible>
23+
<EventCard event={event} />
24+
</TiltedCard>
25+
))}
26+
</div>
27+
</div>
28+
)
29+
}

src/pages/events/[id]/index.astro

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -37,29 +37,45 @@ import { FAQ } from "@/components/Faq";
3737
import { EventMessage } from "@/components/EventMessage";
3838
import dayjs from "dayjs";
3939
import TiltedCard from "@/components/TiltedCard";
40+
import RelatedEvents from "@/components/RelatedEvents/index.astro";
4041
4142
export async function getStaticPaths() {
42-
const events = await getEventsCollection();
43+
const allEvents = await getEventsCollection();
4344
4445
return Promise.all(
45-
events.map(async (event) => ({
46-
params: { id: event.id },
47-
props: {
48-
event,
49-
subPages: await getEventSubPagesCollection(event),
50-
speakers: await getEntries(event.data.speakers ?? []),
51-
coOrganizers: await getEntries(event.data.coOrganizers ?? []),
52-
sponsors: await getEntries(
53-
(event.data.sponsors ?? []).map((s) => s.slug),
54-
),
55-
partners: await getEntries(event.data.partners ?? []),
56-
},
57-
})),
46+
allEvents.map(async (event) => {
47+
const relatedEvents = allEvents
48+
.filter(
49+
(e) =>
50+
e.id !== event.id &&
51+
e.data.city === event.data.city &&
52+
(dayjs(e.data.date).isAfter(dayjs()) ||
53+
dayjs(e.data.date).isAfter(dayjs().subtract(30, "day"))),
54+
)
55+
.sort((a, b) => dayjs(a.data.date).diff(dayjs(b.data.date)))
56+
.slice(0, 3);
57+
58+
return {
59+
params: { id: event.id },
60+
props: {
61+
event,
62+
relatedEvents,
63+
subPages: await getEventSubPagesCollection(event),
64+
speakers: await getEntries(event.data.speakers ?? []),
65+
coOrganizers: await getEntries(event.data.coOrganizers ?? []),
66+
sponsors: await getEntries(
67+
(event.data.sponsors ?? []).map((s) => s.slug),
68+
),
69+
partners: await getEntries(event.data.partners ?? []),
70+
},
71+
};
72+
}),
5873
);
5974
}
6075
6176
const {
6277
event,
78+
relatedEvents,
6379
speakers,
6480
coOrganizers: _coOrganizers,
6581
sponsors,
@@ -632,6 +648,8 @@ const ctaEventMetadata = {
632648
</a>
633649
</div>
634650

651+
<RelatedEvents currentEvent={event} relatedEvents={relatedEvents} />
652+
635653
<div class="py-8 md:py-12">
636654
<JoinTheCommunity />
637655
</div>

0 commit comments

Comments
 (0)