@@ -37,6 +37,7 @@ export function CPDashboard() {
3737 const [ events , setEvents ] = useState ( [ ] ) ;
3838 const [ searchInput , setSearchInput ] = useState ( '' ) ;
3939 const [ searchQuery , setSearchQuery ] = useState ( '' ) ;
40+ const [ selectedDate , setSelectedDate ] = useState ( '' ) ;
4041 const [ onlineOnly , setOnlineOnly ] = useState ( false ) ;
4142 const [ isLoading , setIsLoading ] = useState ( false ) ;
4243 const [ dateFilter , setDateFilter ] = useState ( '' ) ;
@@ -99,6 +100,25 @@ export function CPDashboard() {
99100 } ) ;
100101 } ;
101102
103+ // Helper function to extract date in YYYY-MM-DD format from event date
104+ const parseEventDate = dateString => {
105+ if ( ! dateString ) return null ;
106+
107+ try {
108+ // Try to parse as ISO date string or standard date
109+ const parsedDate = new Date ( dateString ) ;
110+ if ( ! isNaN ( parsedDate . getTime ( ) ) ) {
111+ const year = parsedDate . getFullYear ( ) ;
112+ const month = String ( parsedDate . getMonth ( ) + 1 ) . padStart ( 2 , '0' ) ;
113+ const day = String ( parsedDate . getDate ( ) ) . padStart ( 2 , '0' ) ;
114+ return `${ year } -${ month } -${ day } ` ;
115+ }
116+ } catch ( error ) {
117+ console . error ( 'Error parsing date:' , error ) ;
118+ }
119+ return null ;
120+ } ;
121+
102122 function isTomorrow ( dateString ) {
103123 const input = new Date ( dateString ) ;
104124
@@ -133,11 +153,17 @@ export function CPDashboard() {
133153 if ( ! isOnlineEvent ) return false ;
134154 }
135155
136- // Filter by date filter
156+ // Filter by date filter (Tomorrow / Weekend)
137157 if ( dateFilter === 'tomorrow' ) {
138- return isTomorrow ( event . date ) ;
158+ if ( ! isTomorrow ( event . date ) ) return false ;
139159 } else if ( dateFilter === 'weekend' ) {
140- return isComingWeekend ( event . date ) ;
160+ if ( ! isComingWeekend ( event . date ) ) return false ;
161+ }
162+
163+ // Filter by specific date (if selected)
164+ const eventDate = event . date ? parseEventDate ( event . date ) : null ;
165+ if ( selectedDate && eventDate !== selectedDate ) {
166+ return false ;
141167 }
142168
143169 // Filter by search query if provided
@@ -151,6 +177,11 @@ export function CPDashboard() {
151177 ) ;
152178 } ) ;
153179
180+ // Reset pagination to page 1 when filters change
181+ useEffect ( ( ) => {
182+ setPagination ( prev => ( { ...prev , currentPage : 1 } ) ) ;
183+ } , [ searchQuery , selectedDate , onlineOnly , dateFilter ] ) ;
184+
154185 const totalPages = Math . ceil ( filteredEvents . length / pagination . limit ) || 1 ;
155186
156187 const displayedEvents = filteredEvents . slice (
@@ -180,11 +211,11 @@ export function CPDashboard() {
180211 }
181212
182213 return (
183- < Container className = { styles . cp_dashboard_container } >
184- < header className = { styles . cp_dashboard_header } >
214+ < Container className = { styles . dashboardContainer } >
215+ < header className = { ` ${ styles . dashboardHeader } ${ darkMode ? styles . darkHeader : '' } ` } >
185216 < h1 > All Events</ h1 >
186217 < div >
187- < div className = { styles . cp_dashboard_search_container } >
218+ < div className = { styles . dashboardSearchContainer } >
188219 < Input
189220 id = "search"
190221 type = "search"
@@ -265,11 +296,24 @@ export function CPDashboard() {
265296 </ FormGroup >
266297 </ div >
267298 < div className = { styles . dashboardActions } >
268- < Button color = "primary" onClick = { ( ) => setDateFilter ( '' ) } >
299+ < Button
300+ color = "primary"
301+ onClick = { ( ) => {
302+ setDateFilter ( '' ) ;
303+ setSelectedDate ( '' ) ;
304+ } }
305+ >
269306 Clear date filter
270307 </ Button >
271308 </ div >
272- < Input type = "date" placeholder = "Ending After" className = { styles [ 'date-filter' ] } />
309+ < Input
310+ type = "date"
311+ placeholder = "Select Date"
312+ className = { styles . dateFilter }
313+ value = { selectedDate }
314+ onChange = { e => setSelectedDate ( e . target . value ) }
315+ style = { { marginTop : '10px' } }
316+ />
273317 </ div >
274318
275319 < div className = { styles . filterItem } >
@@ -316,7 +360,11 @@ export function CPDashboard() {
316360 < h2 className = { styles . sectionTitle } > Events</ h2 >
317361
318362 < Row >
319- { displayedEvents . length > 0 ? (
363+ { isLoading ? (
364+ < div className = { styles . noEvents } > Loading events...</ div >
365+ ) : error ? (
366+ < div className = { styles . noEvents } > { error } </ div >
367+ ) : displayedEvents . length > 0 ? (
320368 displayedEvents . map ( event => (
321369 < Col md = { 4 } key = { event . id } className = { styles . eventCardCol } >
322370 < Card className = { styles . eventCard } >
@@ -330,13 +378,15 @@ export function CPDashboard() {
330378 < CardBody >
331379 < h5 className = { styles . eventTitle } > { event . title } </ h5 >
332380 < p className = { styles . eventDate } >
333- < FaCalendarAlt /> { formatDate ( event . date ) }
381+ < FaCalendarAlt className = { styles . eventIcon } /> { formatDate ( event . date ) }
334382 </ p >
335383 < p className = { styles . eventLocation } >
336- < FaMapMarkerAlt /> { event . location }
384+ < FaMapMarkerAlt className = { styles . eventIcon } /> { ' ' }
385+ { event . location || 'Location TBD' }
337386 </ p >
338387 < p className = { styles . eventOrganizer } >
339- < FaUserAlt /> { event . organizer }
388+ < FaUserAlt className = { styles . eventIcon } /> { ' ' }
389+ { event . organizer || 'Organizer TBD' }
340390 </ p >
341391 </ CardBody >
342392 </ Card >
0 commit comments