blob: 796744dbd960ab368093b054e5674700e1b9e5d0 [file]
import React from 'react';
import { Event } from '../../data/events';
import Link from '@docusaurus/Link';
import styles from './EventCard.module.css';
interface EventCardProps {
event: Event;
isPast?: boolean;
}
export default function EventCard({ event, isPast }: EventCardProps): React.ReactElement {
const eventDate = new Date(event.date);
const formattedDate = event.endDate
? `${new Date(event.date).toLocaleDateString()} - ${new Date(event.endDate).toLocaleDateString()}`
: eventDate.toLocaleDateString();
return (
<div className={`${styles.eventCard} ${isPast ? styles.past : ''}`}>
{event.thumbnail && (
<div className={styles.thumbnail}>
<img src={event.thumbnail} alt={event.title} />
</div>
)}
<div className={styles.content}>
<div className={styles.type}>{event.type.toUpperCase()}</div>
<h4 className={styles.title}>{event.title}</h4>
<div className={styles.meta}>
<div className={styles.date}>{formattedDate}</div>
<div className={styles.location}>{event.location}</div>
</div>
<p className={styles.description}>{event.description}</p>
{event.speakers && event.speakers.length > 0 && (
<div className={styles.speakers}>
{event.speakers.map((speaker, idx) => (
<div key={idx} className={styles.speaker}>
{speaker.photo && <img src={speaker.photo} alt={speaker.name} />}
<span>{speaker.name}</span>
</div>
))}
</div>
)}
{event.links && (
<div className={styles.links}>
{event.links.registration && !isPast && (
<Link to={event.links.registration} className="button button--primary">
Register
</Link>
)}
{event.links.recording && (
<Link to={event.links.recording} className="button button--secondary">
Watch Recording
</Link>
)}
{event.links.slides && (
<Link to={event.links.slides}>View Slides</Link>
)}
{event.links.website && (
<Link to={event.links.website}>Event Website</Link>
)}
</div>
)}
</div>
</div>
);
}