--- import type { CollectionEntry } from 'astro:content'; type Journal = CollectionEntry<'journal'>; import { getCollection } from 'astro:content'; import { site } from '../data/site'; import { formatPosts, sortByDate } from '../utils'; import { dateToFormat, dateToISO, wordCount } from '../utils'; import Banner from '../components/Banner.astro'; import GridLayout from '../layouts/GridLayout.astro'; import Image from '../components/Image.astro'; import ListItem from '../components/ListItem.astro'; import OrderedList from '../components/OrderedList.astro'; import PageTitle from '../components/PageTitle.astro'; import Pagination from '../components/Pagination.astro'; import Tag from '../components/Tag.astro'; import TextLink from '../components/TextLink.astro'; import { mapping } from '../mdx-components'; export async function getStaticPaths() { const journalEntries = await getCollection('journal', ({ data }: Journal) => !data.draft); const numberOfPages = journalEntries.length; const formattedJournalEntries: Journal[] = formatPosts(journalEntries, { sortOrder: 'asc' }); return formattedJournalEntries.map((entry, index) => ({ params: { slug: entry.slug }, props: { entry, next: index + 1 === numberOfPages ? { slug: null, data: null } : formattedJournalEntries[index + 1], prev: index === 0 ? { slug: null, data: null } : formattedJournalEntries[index - 1], }, })); } const { entry, prev, next } = Astro.props; const { Content, remarkPluginFrontmatter: { minutesRead }, } = await entry.render(); const seriesEntries: Journal[] = await getCollection('journal', ({ data }: Journal) => { return data.series === entry.data.series && !data.draft; }); seriesEntries.sort(sortByDate).reverse(); const title = entry.data.title; const description = entry.data.description; const schema = JSON.stringify({ '@context': 'https://schema.org', '@type': 'Article', headline: entry.data.title, description: entry.data.description, datePublished: entry.data.date, dateModified: entry.data.updated, image: [ entry.data.cover ? site.url + entry.data.cover : `${site.url}/assets/images/branding/og/bonsai.jpg`, ], author: [ { '@type': 'Person', name: entry.data.author || site.author, url: `${site.url}/about`, }, ], mainEntityOfPage: { '@type': 'webPage', id: `${site.url}/${entry.slug}/}`, }, }); --- {entry.data.title} { entry.data.cover && ( {entry.data.title} ) }
{ entry.data.series && seriesEntries.length > 1 && ( {seriesEntries.map((item) => ( {entry.slug === item.slug ? ( <> {item.data.title} 📍 ) : ( {item.data.title} )} ))} ) } { entry.data.updated && (
Last Updated:
) }