Skip to content

Commit 8d851fa

Browse files
committed
Fix filters
1 parent 96f143a commit 8d851fa

File tree

4 files changed

+27
-21
lines changed

4 files changed

+27
-21
lines changed

src/app/conf/2025/schedule/_components/schedule-list.tsx

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ import {
1717
ResetFiltersButton,
1818
} from "./filters"
1919

20+
export interface FiltersConfig
21+
extends Partial<
22+
Record<keyof ScheduleSession /* key */, string /* label */>
23+
> {}
24+
2025
function getSessionsByDay(
2126
scheduleData: ScheduleSession[],
2227
filterStates: FilterStates,
@@ -27,7 +32,8 @@ function getSessionsByDay(
2732

2833
const states = Object.entries<FilterStates[keyof FilterStates]>(filterStates)
2934
const concurrentSessions: ConcurrentSessions = {}
30-
for (const session of filteredSortedSchedule) {
35+
36+
filteredSortedSchedule.forEach(session => {
3137
for (const [property, filterState] of states) {
3238
if (
3339
filterState &&
@@ -36,11 +42,11 @@ function getSessionsByDay(
3642
session[property as keyof ScheduleSession] as string,
3743
)
3844
) {
39-
continue
45+
return
4046
}
4147
}
4248
;(concurrentSessions[session.event_start] ||= []).push(session)
43-
}
49+
})
4450

4551
const sessionsByDay: ScheduleSessionsByDay = {}
4652
Object.entries(concurrentSessions).forEach(([date, sessions]) => {
@@ -59,23 +65,21 @@ function getSessionsByDay(
5965
return sessionsByDay
6066
}
6167

62-
interface Props {
63-
showEventType?: boolean
68+
export interface ScheduleListProps {
6469
showFilter?: boolean
6570
scheduleData: ScheduleSession[]
6671
year: `202${number}`
6772
eventsColors: Record<string, string>
68-
filterFields: Partial<Record<keyof ScheduleSession, string /* label */>>
73+
filterFields: FiltersConfig
6974
}
7075

7176
export function ScheduleList({
72-
showEventType,
7377
showFilter = true,
7478
scheduleData,
7579
year,
7680
eventsColors,
7781
filterFields,
78-
}: Props): ReactElement {
82+
}: ScheduleListProps): ReactElement {
7983
const [filtersState, setFiltersState] = useState<FilterStates>(() =>
8084
FilterStates.initial(
8185
Object.keys(filterFields) as (keyof ScheduleSession)[],
@@ -165,7 +169,6 @@ export function ScheduleList({
165169
<ScheduleSessionCard
166170
key={session.id}
167171
session={session}
168-
showEventType={showEventType}
169172
year={year}
170173
eventsColors={eventsColors}
171174
/>

src/app/conf/2025/schedule/_components/schedule-session-card.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,14 @@ function isString(x: unknown): x is string {
1414

1515
export function ScheduleSessionCard({
1616
session,
17-
showEventType,
1817
year,
1918
eventsColors,
2019
}: {
2120
session: ScheduleSession
22-
showEventType: boolean | undefined
2321
year: `202${number}`
2422
eventsColors: Record<string, string>
2523
}) {
26-
const eventType = session.event_type
24+
let eventType = session.event_type
2725

2826
const speakers = session.speakers
2927
? isString(session.speakers)
@@ -38,11 +36,12 @@ export function ScheduleSessionCard({
3836
speakers.map(s => s.name),
3937
)
4038

39+
if (eventType === eventTitle) eventType = ""
40+
4141
const eventColor = eventsColors[session.event_type]
4242

4343
return session.event_type === "Breaks" ? (
4444
<div className="flex size-full items-center bg-neu-0 px-4 py-2 font-normal">
45-
{showEventType ? eventType + " / " : ""}
4645
{eventTitle}
4746
</div>
4847
) : (
@@ -63,7 +62,6 @@ export function ScheduleSessionCard({
6362
</Tag>
6463
)}
6564
<span className="flex h-full flex-col justify-between gap-y-2">
66-
{showEventType ? eventType + " / " : ""}
6765
<span className="typography-body-md">{eventTitle}</span>
6866
<span className="flex flex-col">
6967
{(speakers?.length || 0) > 0 && (

src/app/conf/2025/schedule/page.tsx

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import { Metadata } from "next"
22

33
import { schedule } from "../_data"
4-
import { ScheduleList } from "./_components/schedule-list"
5-
import { filterCategories2024 } from "./_components/filter-categories"
4+
import { ScheduleList, FiltersConfig } from "./_components/schedule-list"
65
import { eventsColors, HERO_MARQUEE_ITEMS } from "../utils"
76
import { Button } from "../../_design-system/button"
87
import { GET_TICKETS_LINK } from "../links"
@@ -13,6 +12,12 @@ import { FAQ } from "../faq"
1312

1413
const year = "2025"
1514

15+
const FILTERS: FiltersConfig = {
16+
event_type: "Session Format",
17+
event_subtype: "Talk Category",
18+
company: "Audience",
19+
}
20+
1621
export const metadata: Metadata = {
1722
title: "Schedule",
1823
}
@@ -33,11 +38,7 @@ export default function SchedulePage() {
3338
eventsColors={eventsColors}
3439
year={year}
3540
scheduleData={schedule}
36-
filterFields={{
37-
event_subtype: "Talk Category",
38-
event_type: "Session Format",
39-
company: "Audience",
40-
}}
41+
filterFields={FILTERS}
4142
/>
4243
</div>
4344
<div className="gql-conf-navbar-strip border-t border-neu-200 bg-neu-0 py-8 text-neu-900 before:bg-white/40 dark:border-neu-100 before:dark:bg-blk/30 xl:py-16">

src/app/conf/2025/utils.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ export function getEventTitle(
3636
return name
3737
}
3838

39+
if (name.startsWith("Keynote: ")) {
40+
name = name.slice(8)
41+
}
42+
3943
speakers?.forEach(speaker => {
4044
const speakerInTitle = name.indexOf(`- ${speaker.replace("ı", "i")}`)
4145
if (speakerInTitle > -1) {

0 commit comments

Comments
 (0)