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);