1+ 'use client'
12import { EventProps , events } from './EventsData'
23import styles from './EventsSection.module.css'
34
4- import React from 'react'
5+ import React , { useEffect , useState } from 'react'
6+
7+ const dayOfWeek = [ 'Sunday' , 'Monday' , 'Tuesday' , 'Wednesday' , 'Thursday' , 'Friday' , 'Saturday' ]
58
69const EventsSection = ( ) : React . ReactElement => {
7- const removePastEvents = ( ) : EventProps [ ] => {
10+ const [ futureEvents , setFutureEvents ] = useState < EventProps [ ] > ( [ ] )
11+
12+ useEffect ( ( ) => {
813 const currentDate = new Date ( ) ;
914 currentDate . setHours ( 23 , 59 , 0 , 0 )
1015 const updatedEventsWithDates = events . map ( event => {
11- if ( event . endDate && event . endDate . getTime ( ) > currentDate . getTime ( ) ) {
16+ const newEvent : EventProps = JSON . parse ( JSON . stringify ( event ) )
17+ newEvent . date = new Date ( newEvent . date )
18+ if ( newEvent . endDate ) {
19+ newEvent . endDate = new Date ( newEvent . endDate )
20+ }
21+ if ( newEvent . endDate && newEvent . endDate . getTime ( ) > currentDate . getTime ( ) ) {
1222 // Set date to be the next event occurrence if weekly
13- const dayOffset = ( 7 + event . date . getDay ( ) - currentDate . getDay ( ) ) % 7
23+ const dayOffset = ( 7 + newEvent . date . getDay ( ) - currentDate . getDay ( ) ) % 7
1424 const nextOccurrence = new Date ( currentDate . getTime ( ) + dayOffset * 24 * 60 * 60 * 1000 )
15- nextOccurrence . setHours ( event . date . getHours ( ) , event . date . getMinutes ( ) )
16- event . date = nextOccurrence
25+ nextOccurrence . setHours ( newEvent . date . getHours ( ) , newEvent . date . getMinutes ( ) )
26+ newEvent . date = nextOccurrence
1727 }
18- return event
28+ return newEvent
1929 } ) ;
2030 const filteredEvents = updatedEventsWithDates . filter ( event => event . date . getTime ( ) > currentDate . getTime ( ) )
21- return filteredEvents
22- }
31+ setFutureEvents ( filteredEvents )
32+ } , [ ] )
2333
2434 return (
2535 < div className = { `flex-vertical ${ styles . container } ` } >
26- { removePastEvents ( ) . map ( ( event , i ) => < EventRow key = { i } event = { event } /> ) }
36+ { futureEvents . map ( ( event , i ) => < EventRow key = { i } event = { event } /> ) }
2737 </ div >
2838 )
2939}
@@ -33,7 +43,7 @@ const EventRow = ({ event }: { event: EventProps }): React.ReactElement => {
3343 < div className = { styles . eventRow } >
3444 < div className = { `flex-vertical ${ styles . eventRowLeft } ` } >
3545 < div className = { `sub-section-header-text` } > { event . date . getMonth ( ) + 1 } /{ event . date . getDate ( ) } </ div >
36- { event . endDate && < div > Weekly on Monday 's</ div > }
46+ { event . endDate && < div > Weekly on { dayOfWeek [ event . date . getDay ( ) ] } 's</ div > }
3747 </ div >
3848 < div className = { styles . eventRowRight } >
3949 < div className = { `flex-horizontal sub-section-header-text` } > { event . title } </ div >
0 commit comments