in _includes/resources/tip/TipLayout.11ty.tsx [18:101]
export function TipLayout(
this: LayoutContext,
data: TipLayoutData,
): JSX.Element {
const { collections, content, page } = data;
const tip = collections.resourceMap.get(page.url) as Tip;
if (!tip) {
throw new Error(`Tip "${page.url}" not in collection`);
}
// Unpack references and make it not undefined
if (!tip.references) {
throw new Error(`Tip ${tip.url} has no references.`);
}
const author = tip.references.author as Author;
if (!author) {
throw new Error(`Author "${tip.author}" not in collection`);
}
const topics = tip.references.topics
? (tip.references.topics as Topic[])
: [];
// For "related resources", get an array
const allResources = this.getResources({
resourceTypes: ["tip", "tutorial", "tutorialstep", "link", "article"],
});
// Main content
const main = (
<Fragment>
<div class="section">
<div class="container">
<div class="columns is-multiline">
<div class="column">
<main class="content">
<ArticleTitleSubtitle
title={tip.title}
subtitle={tip.subtitle}
/>
<ArticleAuthor author={author} displayDate={tip.displayDate} />
<EditArticle path={page.inputPath} />
<ArticleTopics topics={topics} />
{tip.animatedGif && <AnimatedGif {...tip.animatedGif} />}
{tip.screenshot && (
<img
src={tip.screenshot}
alt="Tip Screenshot"
style="object-fit: contain; object-position: top"
/>
)}
{tip.video && tip.videoVertical ? (
<div class="columns">
<div class="column is-one-third">
<VideoPlayer source={tip.video} vertical={true} />
</div>
<div class="column is-two-thirds">
{content && <div class="content">{content}</div>}
</div>
</div>
) : (
<Fragment>
{tip.video && <VideoPlayer source={tip.video} />}
{content && (
<div class="columns mt-2">
<div class="column is-11-desktop content">
{content}
</div>
</div>
)}
</Fragment>
)}
{tip.seealso && <SeeAlso items={tip.seealso} />}
</main>
</div>
</div>
</div>
</div>
<RelatedResources currentResource={tip} items={allResources} />
</Fragment>
);
return <BaseLayout {...data}>{main}</BaseLayout>;
}