_includes/resourcecard/HorizontalResourceCard.11ty.tsx (92 lines of code) (raw):
import { Resource } from "../../src/ResourceModels";
import { Topic } from "../resources/topic/TopicModels";
import TopicTag from "../resources/topic/TopicTag.11ty";
import { AuthorIcon, doesExist } from "./Utilities.11ty";
export type HorizontalResourceCardProps = {
resource: Resource;
columnClassName?: string;
includeCardFooter?: boolean;
showThumbnail?: boolean;
showAuthor?: boolean;
};
const HorizontalResourceCard = ({
resource: { url, title, displayDate, subtitle, references },
resource,
columnClassName,
includeCardFooter = true,
showThumbnail = true,
showAuthor = true,
}: HorizontalResourceCardProps): JSX.Element => {
doesExist(references);
const { author, topics } = references;
let thumbnail = resource.getThumbnail();
const columnCssClass = columnClassName ? columnClassName : "is-12 pb-0";
return (
<div class={`column ${columnCssClass}`}>
<div class="card is-equal-height has-box-outline has-box-hover is-shadowless has-background-white-bis">
<div class="card-content">
<article class="media">
{showThumbnail && (
<figure class="media-left m-0 mr-4 is-hidden-mobile is-contained image is-80px">
<a href={url}>
<img width={140} height={80} src={thumbnail} alt={title} />
</a>
</figure>
)}
<div class="media-content">
<div class="has-position-relative">
<a
class="title is-size-4 is-stretched-link"
aria-label={`Resource`}
href={url}
>
{title}
</a>
{subtitle && (
<div class="content clamp clamp-3">{subtitle}</div>
)}
</div>
{includeCardFooter && (
<footer>
<div class="tags my-2">
{topics.map((topic: Topic) => (
<TopicTag topic={topic} />
))}
</div>
{showAuthor && (
<div class="media author">
<div class="p-2 media-left">
<a href={author.url}>
<figure class="image m-0 is-24x24">
<AuthorIcon {...author} />
</figure>
</a>
</div>
<div class="media-content">
<div class="content is-size-7">
<p class="m-0">
<a href={author.url}>
{author.title}{" "}
{(author as any).isGuest && "(Community)"}
</a>
</p>
<time
class="m-0 has-text-grey-dark"
datetime={displayDate}
>
{displayDate}
</time>
</div>
</div>
</div>
)}
</footer>
)}
</div>
</article>
</div>
</div>
</div>
);
};
export default HorizontalResourceCard;