Files
site-profile/src/pages/categories/[...slug].astro
Alex Lebens 500d9e2ea0
All checks were successful
renovate / renovate (push) Successful in 41s
test-build / build (push) Successful in 1m25s
test-build / guarddog (push) Successful in 1m43s
feat: move script handling to use swup instead of astro transitions, move animations to baselayout
2026-03-13 10:59:25 -05:00

78 lines
2.0 KiB
Plaintext

---
import { readItems, readSingleton } from '@directus/sdk';
import type { Post } from '@lib/directusTypes';
import HeaderSection from '@components/sections/HeaderSection.astro';
import BlogCard from '@components/cards/BlogCard.astro';
import BaseLayout from '@layouts/BaseLayout.astro';
import directus from '@lib/directus';
const category = Astro.props;
export async function getStaticPaths() {
const categories = await directus.request(readItems('categories'));
return categories.map((category) => ({
params: { slug: category.slug },
props: category,
}));
}
const global = await directus.request(readSingleton('site_global'));
const posts = await directus.request(
readItems('posts', {
filter: { published: { _eq: true } },
fields: ['*', { category: ['*'] }],
sort: ['-published_date'],
})
);
const categoriesPosts = posts
.sort((a: Post, b: Post) => b.published_date.valueOf() - a.published_date.valueOf())
.filter((b) => {
return b.category?.slug === category.slug;
});
---
<BaseLayout
title={category.title}
description={category.description}
structuredData={{
'@context': 'https://schema.org',
'@type': 'WebPage',
inLanguage: 'en-US',
'@id': Astro.url.href,
url: Astro.url.href,
name: `${category.title} | ${global.name}`,
description: category.description,
isPartOf: {
url: `${global.site_url}/categories`,
name: global.name,
description: global.about,
},
}}
>
<HeaderSection
title=`${category.title}`
subTitle={category.description}
logoExists
logoLight={category.logoLight}
logoDark={category.logoDark}
btnExists
btnTitle="Back to Categories"
btnURL="/categories"
/>
<section class="max-w-340 2xl:max-w-full mb-10 px-4 sm:px-6 lg:px-8 py-8 mx-auto mt-10">
<div class="columns-1 sm:columns-2 lg:columns-3 gap-6">
{categoriesPosts.map((b) =>
<div class="break-inside-avoid mb-6">
<BlogCard post={b} />
</div>
)}
</div>
</section>
</BaseLayout>