@@ -13,6 +13,8 @@ import {
1313 Label ,
1414} from 'reactstrap' ;
1515import { FaCalendarAlt , FaMapMarkerAlt , FaUserAlt , FaSearch , FaTimes } from 'react-icons/fa' ;
16+ import { format } from 'date-fns' ;
17+ import { getUserTimezone , formatEventTimeWithTimezone } from '../../utils/timezoneUtils' ;
1618import styles from './CPDashboard.module.css' ;
1719import { ENDPOINTS } from '../../utils/URL' ;
1820import DatePicker from 'react-datepicker' ;
@@ -132,7 +134,7 @@ export function CPDashboard() {
132134 total : response . data . events ?. length || 0 ,
133135 } ) ) ;
134136 } catch ( err ) {
135- console . error ( 'Failed to fetch events' , err ) ;
137+ console . error ( 'Failed to load events: ' , err ) ;
136138 setError ( 'Failed to load events' ) ;
137139 } finally {
138140 setIsLoading ( false ) ;
@@ -180,34 +182,55 @@ export function CPDashboard() {
180182 } ;
181183
182184 const formatDate = dateStr => {
183- if ( ! dateStr ) {
185+ if ( ! dateStr ) return 'Date TBD' ;
186+ try {
187+ const date = new Date ( dateStr ) ;
188+ if ( Number . isNaN ( date . getTime ( ) ) ) {
189+ return 'Invalid date' ;
190+ }
191+ // Format: "Saturday, February 15"
192+ return format ( date , 'EEEE, MMMM d' ) ;
193+ } catch ( err ) {
194+ console . error ( 'Error formatting date:' , err ) ;
184195 return 'Date TBD' ;
185196 }
197+ } ;
186198
187- const date = new Date ( dateStr ) ;
188- return date . toLocaleString ( 'en-US' , {
189- weekday : 'long' ,
190- month : 'long' ,
191- day : 'numeric' ,
192- year : 'numeric' ,
193- hour : 'numeric' ,
194- minute : '2-digit' ,
195- } ) ;
199+ const formatTime = ( eventDate , timeStr ) => {
200+ if ( ! timeStr ) return 'Time TBD' ;
201+ try {
202+ const userTimezone = getUserTimezone ( ) ;
203+ return formatEventTimeWithTimezone ( eventDate , timeStr , userTimezone ) ;
204+ } catch ( err ) {
205+ console . error ( 'Error formatting time:' , err ) ;
206+ return 'Time TBD' ;
207+ }
208+ } ;
209+
210+ const getDisplayLocation = location => {
211+ if (
212+ location == null ||
213+ String ( location ) . trim ( ) === '' ||
214+ String ( location ) . toLowerCase ( ) === 'tbd'
215+ ) {
216+ return 'Location TBD' ;
217+ }
218+ return location ;
196219 } ;
197220
198221 const parseEventDate = dateString => {
199222 if ( ! dateString ) return null ;
200223
201224 try {
202225 const parsedDate = new Date ( dateString ) ;
203- if ( ! isNaN ( parsedDate . getTime ( ) ) ) {
226+ if ( ! Number . isNaN ( parsedDate . getTime ( ) ) ) {
204227 const year = parsedDate . getFullYear ( ) ;
205228 const month = String ( parsedDate . getMonth ( ) + 1 ) . padStart ( 2 , '0' ) ;
206229 const day = String ( parsedDate . getDate ( ) ) . padStart ( 2 , '0' ) ;
207230 return `${ year } -${ month } -${ day } ` ;
208231 }
209232 } catch ( err ) {
210- console . error ( 'Error parsing date:' , err ) ;
233+ console . error ( 'Error parsing event date:' , err ) ;
211234 }
212235 return null ;
213236 } ;
@@ -298,11 +321,17 @@ export function CPDashboard() {
298321 </ div >
299322 < CardBody >
300323 < h5 className = { styles . eventTitle } > { event . title } </ h5 >
301- < p className = { styles . eventDate } >
302- < FaCalendarAlt className = { styles . eventIcon } /> { formatDate ( event . date ) }
303- </ p >
324+ < div className = { styles . eventDate } >
325+ < FaCalendarAlt className = { styles . eventIcon } />
326+ < div >
327+ < div > { formatDate ( event . date ) } </ div >
328+ { event . startTime && (
329+ < div className = { styles . eventTime } > { formatTime ( event . date , event . startTime ) } </ div >
330+ ) }
331+ </ div >
332+ </ div >
304333 < p className = { styles . eventLocation } >
305- < FaMapMarkerAlt className = { styles . eventIcon } /> { event . location || 'Location TBD' }
334+ < FaMapMarkerAlt className = { styles . eventIcon } /> { getDisplayLocation ( event . location ) }
306335 </ p >
307336 < p className = { styles . eventOrganizer } >
308337 { event . organizerLogo && ! failedLogos . has ( event . _id ) ? (
0 commit comments