--- import Layout from '@/layouts/Layout.astro'; import { Badge } from '@/components/ui/badge'; import EBookReader from '@/components/EBookReader'; import { getCollection, type CollectionEntry } from 'astro:content'; import { getRelatedBooks } from '@/lib/related-books'; import RelatedBooks from '@/components/RelatedBooks.astro'; export async function getStaticPaths() { const books = await getCollection('books'); return books .filter(book => book.data.collection === 'mims') .map(book => ({ params: { slug: book.slug.split('/').pop() }, props: { book } })); } interface Props { book: CollectionEntry<'books'>; } const { book } = Astro.props; const { title, shortTitle, description, topics, localPdf, coverImage, year, archiveOrgUrl, formats } = book.data; // Get all mims books for navigation const allBooks = await getCollection('books'); const mimsBooks = allBooks .filter(b => b.data.collection === 'mims') .sort((a, b) => a.data.sortOrder - b.data.sortOrder); const currentIndex = mimsBooks.findIndex(b => b.slug === book.slug); const prevBook = currentIndex > 0 ? mimsBooks[currentIndex - 1] : null; const nextBook = currentIndex < mimsBooks.length - 1 ? mimsBooks[currentIndex + 1] : null; const relatedBooks = getRelatedBooks(book, allBooks); ---
Home Mims Collection {shortTitle}
{year && (
Published {year}
)}

{title}

{description}

{topics.map((topic) => ( {topic.replace(/-/g, ' ')} ))}
Download {archiveOrgUrl && ( Archive.org )}