@@ -8,6 +8,19 @@ import { getEventFullDate } from "@/utils/utils";
8
8
import { usePathname , useRouter , useSearchParams } from "next/navigation" ;
9
9
import { useEffect , useMemo , useState } from "react" ;
10
10
11
+ function getPageHeading ( kind : string | null ) {
12
+ switch ( kind ) {
13
+ case "keynote" :
14
+ return "Keynotes" ;
15
+ case "presentation" :
16
+ return "Presentations" ;
17
+ case "workshop" :
18
+ return "Workshops" ;
19
+ default :
20
+ return "Schedule" ;
21
+ }
22
+ }
23
+
11
24
interface ScheduleTableProps {
12
25
sessions : SINFOSession [ ] ;
13
26
}
@@ -23,10 +36,15 @@ export default function ScheduleTable({ sessions }: ScheduleTableProps) {
23
36
const placeParam = searchParams . get ( "place" ) ;
24
37
25
38
const sessionsByDay = useMemo ( ( ) => {
26
- const sortedSessions = sessions . sort ( ( a , b ) =>
27
- a . date . localeCompare ( b . date )
28
- ) ;
29
- return sortedSessions . reduce (
39
+ const sessionsCleaned = sessions
40
+ . filter (
41
+ ( s ) =>
42
+ ( ! kindParam || s . kind . toLowerCase ( ) === kindParam ) &&
43
+ ( ! placeParam || s . place . toLowerCase ( ) === placeParam )
44
+ )
45
+ . sort ( ( a , b ) => a . date . localeCompare ( b . date ) ) ;
46
+
47
+ return sessionsCleaned . reduce (
30
48
( acc , s ) => {
31
49
const day = s . date . split ( "T" ) [ 0 ] ;
32
50
const daySessions = [ ...( acc [ day ] || [ ] ) , s ] ;
@@ -50,8 +68,6 @@ export default function ScheduleTable({ sessions }: ScheduleTableProps) {
50
68
51
69
const updateSearchParam = ( newDay : string ) => {
52
70
const params = new URLSearchParams ( searchParams . toString ( ) ) ;
53
- params . delete ( "kind" ) ;
54
- params . delete ( "place" ) ;
55
71
56
72
if ( newDay === dayParam ) {
57
73
params . delete ( "day" ) ;
@@ -69,6 +85,12 @@ export default function ScheduleTable({ sessions }: ScheduleTableProps) {
69
85
70
86
return (
71
87
< >
88
+ < div className = "flex flex-col items-start gap-y-2 p-4 text-start text-sm" >
89
+ < h1 className = "text-2xl font-bold" > { getPageHeading ( kindParam ) } </ h1 >
90
+ < p className = "text-sm text-gray-600" >
91
+ Checkout all the available sessions.
92
+ </ p >
93
+ </ div >
72
94
< GridList >
73
95
{ sortedDays . map ( ( d ) => (
74
96
< EventDayButton
@@ -83,15 +105,9 @@ export default function ScheduleTable({ sessions }: ScheduleTableProps) {
83
105
. filter ( ( d ) => ! showingDay || d === showingDay )
84
106
. map ( ( d ) => (
85
107
< List key = { d } title = { getEventFullDate ( d ) } >
86
- { sessionsByDay [ d ]
87
- . filter (
88
- ( s ) =>
89
- ( ! kindParam || s . kind === kindParam ) &&
90
- ( ! placeParam || s . place === placeParam )
91
- )
92
- . map ( ( s ) => (
93
- < SessionTile key = { s . id } session = { s } onlyShowHours = { true } />
94
- ) ) }
108
+ { sessionsByDay [ d ] . map ( ( s ) => (
109
+ < SessionTile key = { s . id } session = { s } onlyShowHours = { true } />
110
+ ) ) }
95
111
</ List >
96
112
) ) }
97
113
</ >
0 commit comments