import { type ForwardRefRenderFunction, type ReactElement, forwardRef, type ReactNode, } from 'react'; import { useIntl } from 'react-intl'; import { ButtonLink, type HeadingLevel, Icon, Link, VisuallyHidden, } from '../../atoms'; import { Card, CardActions, CardBody, CardFooter, CardHeader, type CardProps, CardTitle, CardCover, } from '../../molecules'; import { PostPreviewMeta, type PostPreviewMetaData } from './post-preview-meta'; import styles from './post-preview.module.scss'; const a11y = (chunks: ReactNode) => {chunks}; export type PostPreviewProps = Omit< CardProps, 'children' | 'cover' | 'linkTo' | 'meta' | 'variant' > & { /** * The post cover. */ cover?: ReactElement; /** * The post excerpt. */ excerpt: string; /** * The post title. */ heading: string; /** * The heading level to use on post title. */ headingLvl?: HeadingLevel; /** * The post meta. */ meta?: PostPreviewMetaData; /** * The post url. */ url: string; }; const PostPreviewWithRef: ForwardRefRenderFunction< HTMLDivElement, PostPreviewProps > = ( { className, cover, excerpt, heading, headingLvl, meta, url, ...props }, ref ) => { const wrapperClass = `${styles.wrapper} ${className}`; const intl = useIntl(); const coverLabel = intl.formatMessage( { defaultMessage: '{postTitle} cover', description: 'PostPreview: an accessible name for the figure wrapping the cover', id: 'iG5SHf', }, { postTitle: heading } ); const readMore = intl.formatMessage( { defaultMessage: 'Read more about {postTitle}', description: 'PostPreview: read more link', id: 'BYdQze', }, { postTitle: heading, a11y, } ); return ( {cover} ) : undefined } meta={meta ? : undefined} ref={ref} > {heading} {readMore} ); }; export const PostPreview = forwardRef(PostPreviewWithRef);