@@ -174,15 +174,12 @@ function CommunityCalendar() {
174174 function WeeklyTimeGrid ( { events, selectedDate, onEventClick, darkMode } ) {
175175 const hours = Array . from ( { length : 24 } , ( _ , i ) => i ) ;
176176
177- // Find the Sunday of the currently selected week
178177 const startOfWeek = useMemo ( ( ) => {
179178 const d = new Date ( selectedDate ) ;
180- const day = d . getDay ( ) ; // 0 (Sun) to 6 (Sat)
181- d . setDate ( d . getDate ( ) - day ) ;
179+ d . setDate ( d . getDate ( ) - d . getDay ( ) ) ;
182180 return d ;
183181 } , [ selectedDate ] ) ;
184182
185- // Create an array of 7 Date objects for the header
186183 const weekDays = useMemo ( ( ) => {
187184 return Array . from ( { length : 7 } , ( _ , i ) => {
188185 const day = new Date ( startOfWeek ) ;
@@ -192,25 +189,27 @@ function CommunityCalendar() {
192189 } , [ startOfWeek ] ) ;
193190
194191 return (
195- < div className = { `${ styles . weekGridContainer } ${ darkMode ? styles . weekGridDark : '' } ` } >
196- { /* HEADER: Day Names and Numbers */ }
197- < div className = { styles . weekGridHeader } >
198- < div className = { styles . timeGutter } > </ div >
192+ < div
193+ className = { `${ styles . weekGridContainer } ${ darkMode ? styles . weekGridContainerDark : '' } ` }
194+ >
195+ < div className = { `${ styles . weekGridHeader } ${ darkMode ? styles . weekGridHeaderDark : '' } ` } >
196+ < div className = { styles . timeGutter } />
199197 { weekDays . map ( date => (
200198 < div key = { date . toString ( ) } className = { styles . dayColumnHeader } >
201- < div className = { styles . dayLabel } >
199+ < div className = { ` ${ styles . dayLabel } ${ darkMode ? styles . dayLabelDark : '' } ` } >
202200 { date . toLocaleDateString ( 'en-US' , { weekday : 'short' } ) }
203201 </ div >
204- < div className = { styles . dateLabel } > { date . getDate ( ) } </ div >
202+ < div className = { `${ styles . dateLabel } ${ darkMode ? styles . dateLabelDark : '' } ` } >
203+ { date . getDate ( ) }
204+ </ div >
205205 </ div >
206206 ) ) }
207207 </ div >
208208
209- { /* BODY: Time Rows */ }
210209 < div className = { styles . weekGridBody } >
211210 { hours . map ( hour => (
212- < div key = { hour } className = { styles . hourRow } >
213- < div className = { styles . timeLabel } >
211+ < div key = { hour } className = { ` ${ styles . hourRow } ${ darkMode ? styles . hourRowDark : '' } ` } >
212+ < div className = { ` ${ styles . timeLabel } ${ darkMode ? styles . timeLabelDark : '' } ` } >
214213 { hour === 0
215214 ? '12 AM'
216215 : hour > 12
@@ -219,36 +218,47 @@ function CommunityCalendar() {
219218 ? '12 PM'
220219 : `${ hour } AM` }
221220 </ div >
221+
222222 { weekDays . map ( date => {
223- // Filter events that happen on THIS day at THIS hour
224223 const cellEvents = events . filter ( e => {
225224 const eventDate = new Date ( e . date ) ;
226- // Check if date matches and if the hour in "10:00 AM" matches our current row
227- const eventHour = parseInt ( e . time . split ( ':' ) [ 0 ] ) ;
225+ const [ hStr ] = e . time . split ( ':' ) ;
226+ let h = parseInt ( hStr , 10 ) ;
228227 const isPM = e . time . toLowerCase ( ) . includes ( 'pm' ) ;
229- const normalizedEventHour =
230- isPM && eventHour !== 12
231- ? eventHour + 12
232- : ! isPM && eventHour === 12
233- ? 0
234- : eventHour ;
235-
236- return (
237- eventDate . toDateString ( ) === date . toDateString ( ) && normalizedEventHour === hour
238- ) ;
228+ const isAM = e . time . toLowerCase ( ) . includes ( 'am' ) ;
229+ if ( isPM && h !== 12 ) h += 12 ;
230+ if ( isAM && h === 12 ) h = 0 ;
231+
232+ return eventDate . toDateString ( ) === date . toDateString ( ) && h === hour ;
239233 } ) ;
240234
241235 return (
242- < div key = { date . toString ( ) } className = { styles . gridCell } >
243- { cellEvents . map ( event => (
236+ < div
237+ key = { date . toString ( ) }
238+ className = { `${ styles . gridCell } ${ darkMode ? styles . gridCellDark : '' } ` }
239+ >
240+ { cellEvents . map ( ev => (
244241 < button
245- key = { event . id }
242+ key = { ev . id }
246243 type = "button"
247- className = { styles . gridEvent }
248- onClick = { ( ) => onEventClick ( event ) }
244+ className = { `${ styles . gridEvent } ${ darkMode ? styles . gridEventDark : '' } ` }
245+ onClick = { ( ) => onEventClick ( ev ) }
246+ aria-label = { `Open event ${ ev . title } at ${ ev . time } ` }
249247 >
250- < div className = { styles . gridEventTime } > { event . time } </ div >
251- < div className = { styles . gridEventTitle } > { event . title } </ div >
248+ < div
249+ className = { `${ styles . gridEventTime } ${
250+ darkMode ? styles . gridEventTimeDark : ''
251+ } `}
252+ >
253+ { ev . time }
254+ </ div >
255+ < div
256+ className = { `${ styles . gridEventTitle } ${
257+ darkMode ? styles . gridEventTitleDark : ''
258+ } `}
259+ >
260+ { ev . title }
261+ </ div >
252262 </ button >
253263 ) ) }
254264 </ div >
0 commit comments