blocks/community/event-list/event-card.tsx (68 lines of code) (raw):

import React, { FC } from 'react'; import { cardCn } from '@rescui/card'; import { Tag, presets } from '@rescui/tag'; import cn from 'classnames'; import { Preset } from '@rescui/tag/lib/parts/presets'; import styles from './event-card.module.css'; import { CommunityEvent } from './community-event'; import Button from '@rescui/button'; import { FilesIcon, YoutubeIcon } from '@rescui/icons'; interface EventCardProps { event: CommunityEvent; } const tagStyle: Preset = { ...presets.filledLight, color: '#27282c', }; export const EventCard: FC<EventCardProps> = ({ event }) => { const cardClassName = cn(cardCn({ paddings: 16, isClickable: true }), `${styles.card} ktl-text-3`); return ( <a className={cardClassName} href={event.url} target={'_blank'} rel="noopener noreferrer"> <div className={styles.header}> <div> {event.formattedDate} {event.location && <span>, {event.location}</span>} </div> <div className={styles.tags}> {event.online && ( <Tag {...tagStyle} isUppercase className={styles.tag}> <span className={styles.dot}>•</span>Online </Tag> )} <Tag {...tagStyle} isUppercase className={styles.tag}> {event.lang} </Tag> </div> </div> <div> <div className={styles.title}> <h4 className="ktl-h4" dangerouslySetInnerHTML={{ __html: event.subject }} /> {event.content && ( <div className={styles.materials}> {event.content.video && ( <Button href={event.content.video} target={'_blank'} /** @ts-ignore **/ rel="noopener noreferrer" size={'s'} icon={<YoutubeIcon />} /> )} {event.content.slides && ( <Button href={event.content.slides} target={'_blank'} /** @ts-ignore **/ rel="noopener noreferrer" size={'s'} icon={<FilesIcon />} /> )} </div> )} </div> <div className={styles.footerInfo}> <div className={styles.speaker}>{event.speaker}</div> <div dangerouslySetInnerHTML={{ __html: event.title }} /> </div> </div> </a> ); };