Skip to content

Commit b35aa4d

Browse files
committed
Improve error handling
1 parent eb29574 commit b35aa4d

File tree

3 files changed

+38
-12
lines changed

3 files changed

+38
-12
lines changed

src/app/conf/2023/speakers/[id]/page.tsx

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,15 @@ export default function SpeakerPage({ params }: SpeakerProps) {
4747
.filter(s => s.speakers && s.speakers.some(s => s.username === params.id))
4848
.map(s => ({
4949
...s,
50-
speakers: s.speakers!.map(
51-
s => speakers.find(speaker => speaker.username === s.username)!,
52-
),
50+
speakers: s.speakers!.map(other => {
51+
const s = speakers.find(s => s.username === other.username)
52+
if (!s) {
53+
throw new Error(
54+
`Speaker "${other.username}" not found for ${speaker.username} details page`,
55+
)
56+
}
57+
return s
58+
}),
5359
}))
5460

5561
return (

src/app/conf/2024/schedule/[id]/page.tsx

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,11 @@ function getEventTitle(event: ScheduleSession, speakers: string[]): string {
3434
type SessionProps = { params: { id: string } }
3535

3636
export function generateMetadata({ params }: SessionProps): Metadata {
37-
const event = schedule.find(s => s.id === params.id)!
37+
const event = schedule.find(s => s.id === params.id)
38+
39+
if (!event) {
40+
notFound()
41+
}
3842

3943
const keywords = [
4044
event.event_type,
@@ -77,14 +81,20 @@ const Tag = ({
7781

7882
export default function SessionPage({ params }: SessionProps) {
7983
const event = schedule.find(s => s.id === params.id)
84+
8085
if (!event) {
8186
notFound()
8287
}
8388

84-
// @ts-expect-error -- fixme
85-
event.speakers = (event.speakers || []).map(speaker =>
86-
speakers.find(s => s.username === speaker.username),
87-
)
89+
event.speakers = (event.speakers || []).map(speaker => {
90+
const s = speakers.find(s => s.username === speaker.username)
91+
if (!s) {
92+
throw new Error(
93+
`Speaker "${speaker.username}" not found for "${event.name}"`,
94+
)
95+
}
96+
return s
97+
})
8898

8999
const eventType = event.event_type.endsWith("s")
90100
? event.event_type.slice(0, -1)

src/app/conf/2024/speakers/[id]/page.tsx

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,27 @@ export function generateStaticParams() {
4040

4141
export default function SpeakerPage({ params }: SpeakerProps) {
4242
const decodedId = decodeURIComponent(params.id)
43-
const speaker = speakers.find(s => s.username === decodedId)!
43+
const speaker = speakers.find(s => s.username === decodedId)
44+
45+
if (!speaker) {
46+
throw new Error(`Speaker "${decodedId}" not found for details page`)
47+
}
4448

4549
const s = schedule
4650
.filter((s): s is typeof s & Required<Pick<typeof s, "speakers">> =>
4751
Boolean(s.speakers && s.speakers.some(s => s.username === decodedId)),
4852
)
4953
.map(s => ({
5054
...s,
51-
speakers: s.speakers.map(
52-
s => speakers.find(speaker => speaker.username === s.username)!,
53-
),
55+
speakers: s.speakers.map(other => {
56+
const s = speakers.find(s => other.username === s.username)
57+
if (!s) {
58+
throw new Error(
59+
`Speaker "${other.username}" not found for ${speaker.username} details page`,
60+
)
61+
}
62+
return s
63+
}),
5464
}))
5565

5666
return (

0 commit comments

Comments
 (0)