Skip to content

Commit 0f3bf34

Browse files
feat: add related events section on event page (#207) (#495)
Co-authored-by: Antoine Kingue <etorefr@gmail.com>
1 parent 3ac6a7e commit 0f3bf34

File tree

2 files changed

+55
-9
lines changed

2 files changed

+55
-9
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 { EventComputed } from "@/lib/events";
5+
6+
interface Props {
7+
currentEvent: EventComputed;
8+
relatedEvents: EventComputed[];
9+
}
10+
11+
const { currentEvent, relatedEvents } = Astro.props;
12+
---
13+
14+
{
15+
relatedEvents.length > 0 && currentEvent.data._computed.city?.data.name && (
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._computed.city.data.name}
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: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,21 +41,37 @@ import TiltedCard from "@/components/TiltedCard";
4141
import { lunalink } from "@bearstudio/lunalink";
4242
import { ROUTES } from "@/routes.gen";
4343
import { isEmpty } from "remeda";
44+
import RelatedEvents from "@/components/RelatedEvents/index.astro";
4445
4546
export async function getStaticPaths() {
46-
const events = await getEventsCollection();
47+
const allEvents = await getEventsCollection();
4748
4849
return Promise.all(
49-
events.map(async (event) => ({
50-
params: { id: event.id },
51-
props: {
52-
event,
53-
},
54-
})),
50+
allEvents.map(async (event) => {
51+
const relatedEvents = allEvents
52+
.filter(
53+
(e) =>
54+
e.id !== event.id &&
55+
event.data._computed.city?.id !== undefined &&
56+
e.data._computed.city?.id === event.data._computed.city?.id &&
57+
(dayjs(e.data.date).isAfter(dayjs()) ||
58+
dayjs(e.data.date).isAfter(dayjs().subtract(30, "day"))),
59+
)
60+
.sort((a, b) => dayjs(a.data.date).diff(dayjs(b.data.date)))
61+
.slice(0, 3);
62+
63+
return {
64+
params: { id: event.id },
65+
props: {
66+
event,
67+
relatedEvents,
68+
},
69+
};
70+
}),
5571
);
5672
}
5773
58-
const { event } = Astro.props;
74+
const { event, relatedEvents } = Astro.props;
5975
6076
const partners = await getEntries(event.data.partners ?? []);
6177
const speakers = await getEntries(event.data._computed.speakers ?? []);
@@ -65,7 +81,6 @@ const coOrganizers = (await getEntries(event.data.coOrganizers ?? [])).filter(
6581
const sponsors = await getEntries(
6682
(event.data.sponsors ?? []).map((s) => s.slug),
6783
);
68-
6984
const navItems = await getEventNavItems(event.id);
7085
7186
const { Content } = await render(event);
@@ -678,6 +693,8 @@ const ctaEventMetadata = {
678693
</a>
679694
</div>
680695

696+
<RelatedEvents currentEvent={event} relatedEvents={relatedEvents} />
697+
681698
<div class="py-8 md:py-12">
682699
<JoinTheCommunity />
683700
</div>

0 commit comments

Comments
 (0)