feat: related field

This commit is contained in:
Lewis Wynne 2026-02-07 02:15:45 +00:00
parent 23d34ae3ab
commit c10ebb3c1d
4 changed files with 33 additions and 8 deletions

View file

@ -4,8 +4,8 @@ export const prerender = false;
import { getCollection, render } from 'astro:content';
import { requireAdminSession } from '../../lib/auth';
import Layout from '../../layouts/Layout.astro';
import { formatDate } from '../../lib/format';
import { getSlug, enrichPostWithDates } from '../../lib/md';
import { formatDate, formatListItem } from '../../lib/format';
import { getSlug, enrichPostWithDates, enrichPostsWithDates, resolveRelatedPosts } from '../../lib/md';
const { session, error } = await requireAdminSession(Astro.request);
if (error) return error;
@ -19,8 +19,10 @@ if (!rawPost) {
return new Response('Not found', { status: 404 });
}
const allPosts = enrichPostsWithDates(rawPosts);
const post = enrichPostWithDates(rawPost);
const { Content } = await render(post);
const related = post.data.related ? resolveRelatedPosts(post.data.related, allPosts) : [];
---
<Layout title={`${post.data.title} - lewis m.w.`}>
@ -29,4 +31,10 @@ const { Content } = await render(post);
<p class="muted" style="margin-top: 0;">{formatDate(post.dates.created)}{post.dates.updated && ` (updated ${formatDate(post.dates.updated)})`}</p>
<Content />
</article>
{related.length > 0 && (
<details open>
<summary>related</summary>
<pre set:html={related.map(p => formatListItem(p.dates.created, `/draft/${getSlug(p.id)}`, p.data.title)).join('\n')} />
</details>
)}
</Layout>