@@ -24,8 +24,11 @@ import { LAST_UPDATED, RECOMMENDED_FILTERS } from "@/data/staticData";
2424function EventsPage ( ) {
2525 const [ searchParams , setSearchParams ] = useSearchParams ( ) ;
2626 const view = ( searchParams . get ( "view" ) as "grid" | "calendar" ) || "grid" ;
27- const randomFilter = useMemo ( ( ) =>
28- RECOMMENDED_FILTERS [ Math . floor ( Math . random ( ) * RECOMMENDED_FILTERS . length ) ] [ 2 ] ,
27+ const randomFilter = useMemo (
28+ ( ) =>
29+ RECOMMENDED_FILTERS [
30+ Math . floor ( Math . random ( ) * RECOMMENDED_FILTERS . length )
31+ ] [ 2 ] ,
2932 [ ]
3033 ) ;
3134 const placeholder = searchParams . get ( "placeholder" ) || randomFilter ;
@@ -42,7 +45,7 @@ function EventsPage() {
4245 const {
4346 events,
4447 isLoading,
45- error,
48+ error,
4649 dtstart_utc,
4750 addedAt,
4851 searchTerm,
@@ -60,7 +63,9 @@ function EventsPage() {
6063 } = useEventSelection ( view ) ;
6164
6265 const todayString = getTodayString ( ) ;
63- const isShowingPastEvents = Boolean ( dtstart_utc && dtstart_utc !== todayString ) ;
66+ const isShowingPastEvents = Boolean (
67+ dtstart_utc && dtstart_utc !== todayString
68+ ) ;
6469 const isShowingNewEvents = Boolean ( addedAt ) ;
6570
6671 const getEventTypeText = ( ) => {
@@ -71,7 +76,7 @@ function EventsPage() {
7176 } ;
7277
7378 return (
74- < div className = "flex flex-col gap-4" >
79+ < >
7580 < SEOHead
7681 title = "Events - Discover University of Waterloo Club Events"
7782 description = "Browse and discover exciting club events at the University of Waterloo. Find upcoming events, filter by date, and stay connected with campus activities."
@@ -87,90 +92,97 @@ function EventsPage() {
8792 "campus activities" ,
8893 ] }
8994 />
90- < div className = "sm:text-left" >
91- < h1 className = "sm:text-3xl text-2xl font-bold mb-2" >
92- < NumberFlow
93- value = { events . length }
94- suffix = { ` ${ getEventTypeText ( ) } events` }
95- />
96- </ h1 >
97- < p className = "text-gray-600 dark:text-gray-400" > Updated { formatRelativeDateTime ( LAST_UPDATED ) } </ p >
98- </ div >
99-
10095 < div className = "flex flex-col gap-4" >
101- < div className = "flex items-center gap-4" >
102- < SearchInput placeholder = { placeholder } className = "flex-1" />
103- < Tabs
104- value = { view }
105- onValueChange = { ( value ) =>
106- handleViewChange ( value as "grid" | "calendar" )
107- }
108- >
109- < TabsList >
110- < TabsTrigger value = "grid" className = "flex items-center gap-2" >
111- < LayoutGrid className = "h-4 w-4" />
112- Grid
113- </ TabsTrigger >
114- < TabsTrigger value = "calendar" className = "flex items-center gap-2" >
115- < Calendar className = "h-4 w-4" />
116- Calendar
117- </ TabsTrigger >
118- </ TabsList >
119- </ Tabs >
96+ < div className = "sm:text-left" >
97+ < h1 className = "sm:text-3xl text-2xl font-bold mb-2 -mt-3 sm:mt-0" >
98+ < NumberFlow
99+ value = { events . length }
100+ suffix = { ` ${ getEventTypeText ( ) } events` }
101+ />
102+ </ h1 >
103+ < p className = "text-gray-600 dark:text-gray-400" >
104+ Updated { formatRelativeDateTime ( LAST_UPDATED ) }
105+ </ p >
120106 </ div >
121107
122- < QuickFilters / >
123-
124- < div className = "flex items-center justify-between" >
125- < div className = "flex gap-2" >
126- < FilterButton
127- isActive = { isShowingNewEvents }
128- onToggle = { handleToggleNewEvents }
129- icon = { < Sparkles className = "h-4 w-4" /> }
108+ < div className = "flex flex-col sm:gap-4 gap-3.5" >
109+ < div className = "flex items-center sm:gap-4 gap-2" >
110+ < SearchInput placeholder = { placeholder } className = "flex-1" / >
111+ < Tabs
112+ value = { view }
113+ onValueChange = { ( value ) =>
114+ handleViewChange ( value as "grid" | "calendar" )
115+ }
130116 >
131- Newly Added
132- </ FilterButton >
133- { ! isShowingNewEvents && (
134- < FilterButton
135- isActive = { isShowingPastEvents }
136- onToggle = { handleToggleStartDate }
137- icon = { < History className = "h-4 w-4" /> }
138- >
139- Past
140- </ FilterButton >
141- ) }
142- { view === "grid" && (
117+ < TabsList >
118+ < TabsTrigger value = "grid" className = "flex items-center gap-2" >
119+ < LayoutGrid className = "h-4 w-4" />
120+ Grid
121+ </ TabsTrigger >
122+ < TabsTrigger
123+ value = "calendar"
124+ className = "flex items-center gap-2"
125+ >
126+ < Calendar className = "h-4 w-4" />
127+ Calendar
128+ </ TabsTrigger >
129+ </ TabsList >
130+ </ Tabs >
131+ </ div >
132+
133+ < QuickFilters />
134+
135+ < div className = "flex items-center justify-between" >
136+ < div className = "flex gap-2" >
143137 < FilterButton
144- isActive = { isSelectMode }
145- onToggle = { toggleSelectMode }
146- icon = { < Calendar className = "h-4 w-4" /> }
138+ isActive = { isShowingNewEvents }
139+ onToggle = { handleToggleNewEvents }
140+ icon = { < Sparkles className = "h-4 w-4" /> }
147141 >
148- Export
142+ Newly Added
149143 </ FilterButton >
150- ) }
144+ { ! isShowingNewEvents && (
145+ < FilterButton
146+ isActive = { isShowingPastEvents }
147+ onToggle = { handleToggleStartDate }
148+ icon = { < History className = "h-4 w-4" /> }
149+ >
150+ Past
151+ </ FilterButton >
152+ ) }
153+ { view === "grid" && (
154+ < FilterButton
155+ isActive = { isSelectMode }
156+ onToggle = { toggleSelectMode }
157+ icon = { < Calendar className = "h-4 w-4" /> }
158+ >
159+ Export
160+ </ FilterButton >
161+ ) }
162+ </ div >
151163 </ div >
152164 </ div >
153- </ div >
154165
155- < EventsContent
156- view = { view }
157- data = { events }
158- isSelectMode = { isSelectMode }
159- selectedEvents = { selectedEvents }
160- onToggleEvent = { toggleEventSelection }
161- isLoading = { isLoading }
162- error = { error }
163- />
166+ < EventsContent
167+ view = { view }
168+ data = { events }
169+ isSelectMode = { isSelectMode }
170+ selectedEvents = { selectedEvents }
171+ onToggleEvent = { toggleEventSelection }
172+ isLoading = { isLoading }
173+ error = { error }
174+ />
164175
165- < FloatingEventExportBar
166- view = { view }
167- isSelectMode = { isSelectMode }
168- selectedEvents = { selectedEvents }
169- onCancel = { toggleSelectMode }
170- onExportICalendar = { exportToCalendar }
171- onExportGoogleCalendar = { exportToGoogleCalendar }
172- />
173- </ div >
176+ < FloatingEventExportBar
177+ view = { view }
178+ isSelectMode = { isSelectMode }
179+ selectedEvents = { selectedEvents }
180+ onCancel = { toggleSelectMode }
181+ onExportICalendar = { exportToCalendar }
182+ onExportGoogleCalendar = { exportToGoogleCalendar }
183+ />
184+ </ div >
185+ </ >
174186 ) ;
175187}
176188
0 commit comments