_includes/resources/topic/TopicsLayout.11ty.tsx (66 lines of code) (raw):

import { ReferenceLayout, ReferenceLayoutProps, } from "../../layouts/ReferenceLayout.11y"; import { Topic } from "./TopicModels"; import { LayoutContext } from "../../../src/models"; export function TopicsLayout( this: LayoutContext, data: ReferenceLayoutProps, ): JSX.Element { const topics = this.getResources({ resourceTypes: ["topic"], }) as Topic[]; topics.sort((a, b) => { const aTitle = a.title.toLowerCase(); const bTitle = b.title.toLowerCase(); return aTitle < bTitle ? -1 : bTitle < aTitle ? 1 : 0; }); const listing = ( <section class="section"> <div class="container"> <div class="columns is-multiline"> {topics.map((topic) => { const figure = topic.logo ? ( <img data-template-src="thumbnail" data-template-alt="title" src={topic.logo} alt={topic.title} /> ) : ( <i class={`${topic.icon} has-text-${topic.accent} fa-5x`} /> ); return ( <div class="column is-6 is-4-desktop mb-5 has-box-hover"> <div class="is-flex has-position-relative"> <span class="mr-4"> <a href={topic.url}> <figure class="image is-128x128 has-text-centered"> {figure} </figure> </a> </span> <div> <a href={topic.url} aria-label={`Tag`} class="is-size-5 has-text-weight-bold mb-2 title is-stretched-link" > {topic.title} </a> {topic.subtitle && ( <p class="has-text-grey-dark">{topic.subtitle}</p> )} </div> </div> </div> ); })} </div> </div> </section> ); return <ReferenceLayout {...data} listing={listing} content={data.content} />; } export const render = TopicsLayout;