diff --git a/src/components/sections/CategorySection.astro b/src/components/sections/CategorySection.astro index 5554779..d9f56f0 100644 --- a/src/components/sections/CategorySection.astro +++ b/src/components/sections/CategorySection.astro @@ -1,8 +1,7 @@ --- -import { getCollection } from 'astro:content'; import { readItems } from '@directus/sdk'; -import type { Post } from '@lib/directusTypes'; +import type { Post, Category } from '@lib/directusTypes'; import CategoryCard from '@components/cards/CategoryCard.astro'; import directus from '@lib/directus'; @@ -43,7 +42,7 @@ const postMap: Map = posts return acc; }, new Map()); -const categories = (await getCollection('categories')) +const categories = (await directus.request(readItems('categories'))) .sort((a, b) => { const aCount = postMap.get(a.slug)?.length ?? 0; const bCount = postMap.get(b.slug)?.length ?? 0; @@ -81,8 +80,8 @@ const categories = (await getCollection('categories')) > diff --git a/src/content/categories/books.md b/src/content/categories/books.md deleted file mode 100644 index edb7db8..0000000 --- a/src/content/categories/books.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 'Books' -description: 'Books I have read or listened to' ---- diff --git a/src/content/categories/cloud.md b/src/content/categories/cloud.md deleted file mode 100644 index be545cf..0000000 --- a/src/content/categories/cloud.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 'Cloud' -description: "Its just someone else's server" ---- diff --git a/src/content/categories/homelab.md b/src/content/categories/homelab.md deleted file mode 100644 index b4cb7c4..0000000 --- a/src/content/categories/homelab.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 'Homelab' -description: 'What happens when rack servers find a home' ---- diff --git a/src/content/categories/kubernetes.md b/src/content/categories/kubernetes.md deleted file mode 100644 index 6748a04..0000000 --- a/src/content/categories/kubernetes.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 'Kubernetes' -description: 'The container orchestration system' ---- diff --git a/src/content/categories/life.md b/src/content/categories/life.md deleted file mode 100644 index 4c3d91d..0000000 --- a/src/content/categories/life.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 'Life' -description: 'Just random musings on everyday stuff' ---- diff --git a/src/content/categories/minnesota.md b/src/content/categories/minnesota.md deleted file mode 100644 index bece7cd..0000000 --- a/src/content/categories/minnesota.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 'Minnesota' -description: 'Land of 10,000 Lakes' ---- diff --git a/src/content/categories/postgresql.md b/src/content/categories/postgresql.md deleted file mode 100644 index 0186d03..0000000 --- a/src/content/categories/postgresql.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 'PostgreSQL' -description: 'PostgreSQL is an open-source relational database management system (RDBMS)' ---- diff --git a/src/content/categories/python.md b/src/content/categories/python.md deleted file mode 100644 index 48d9487..0000000 --- a/src/content/categories/python.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 'Python' -description: 'Generally my go to language' ---- diff --git a/src/content/categories/tool.md b/src/content/categories/tool.md deleted file mode 100644 index 87408ab..0000000 --- a/src/content/categories/tool.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 'Tool' -description: 'Usually just the software kind' ---- diff --git a/src/content/categories/whatis.md b/src/content/categories/whatis.md deleted file mode 100644 index 5455e40..0000000 --- a/src/content/categories/whatis.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: 'What Is?' -description: 'A series on discovery' ---- diff --git a/src/content/config.ts b/src/content/config.ts deleted file mode 100644 index 9e37776..0000000 --- a/src/content/config.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { defineCollection, z } from 'astro:content'; - -const categoryCollection = defineCollection({ - type: 'content', - schema: () => - z.object({ - title: z.string(), - description: z.string(), - }), -}); - -export const collections = { categories: categoryCollection }; diff --git a/src/lib/directus.ts b/src/lib/directus.ts index b4bf295..1920d85 100644 --- a/src/lib/directus.ts +++ b/src/lib/directus.ts @@ -4,6 +4,7 @@ import type { Global, Weather, Post, + Category, Application, Experience, Education, @@ -18,6 +19,7 @@ type Schema = { site_global: Global; site_weather: Weather; posts: Post[]; + categories: Category[]; site_applications: Application; site_experience: Experience; site_education: Education; diff --git a/src/lib/directusTypes.ts b/src/lib/directusTypes.ts index a3830d6..0e55020 100644 --- a/src/lib/directusTypes.ts +++ b/src/lib/directusTypes.ts @@ -49,6 +49,12 @@ export type Post = { updated_date: Date; }; +export type Category = { + slug: string; + title: string; + description: string; +}; + export type Application = { id: string; name: string; diff --git a/src/pages/blog/[...slug].astro b/src/pages/blog/[...slug].astro index a78d860..f59d38b 100644 --- a/src/pages/blog/[...slug].astro +++ b/src/pages/blog/[...slug].astro @@ -1,5 +1,5 @@ --- -import { type CollectionEntry, getCollection } from 'astro:content'; + import { Image } from 'astro:assets'; import getReadingTime from 'reading-time'; import { marked } from 'marked'; @@ -7,6 +7,8 @@ import markedShiki from 'marked-shiki'; import { createHighlighter } from 'shiki'; import { readItems, readSingleton } from '@directus/sdk'; +import type { Category } from '@lib/directusTypes'; + import SocialShareButton from '@components/buttons/SocialShareButton.astro'; import BaseLayout from '@layouts/BaseLayout.astro'; import directus from '@lib/directus'; @@ -24,11 +26,14 @@ export async function getStaticPaths() { } const global = await directus.request(readSingleton('site_global')); -const category: CollectionEntry<'categories'> = (await getCollection('categories')) - .filter((c) => c.slug === post.category) - .pop() as CollectionEntry<'categories'>; +const [category] = post.category ? await directus.request( + readItems('categories', { + filter: { slug: { _eq: post.category },}, + limit: 1, + })) + : []; -const readingTime = getReadingTime(post.content); +const readingTime = getReadingTime(post.content || ''); const highlighter = await createHighlighter({ themes: ['github-light', 'github-dark'], @@ -48,7 +53,7 @@ marked.use(markedShiki({ } })); -const content = marked.parse(post.content); +const content = marked.parse(post.content || ''); ---
    + {category && (
  1. - {category?.data?.title} + {category.title} /
  2. + )}
  3. {formatDate(post.published_date)} diff --git a/src/pages/categories/[...slug].astro b/src/pages/categories/[...slug].astro index 4612fe7..dfcdc02 100644 --- a/src/pages/categories/[...slug].astro +++ b/src/pages/categories/[...slug].astro @@ -1,21 +1,20 @@ --- -import { getCollection } from 'astro:content'; import { readItems, readSingleton } from '@directus/sdk'; -import type { Post } from '@lib/directusTypes'; +import type { Post, Category } 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; +const category = Astro.props; export async function getStaticPaths() { - const categories = await getCollection('categories'); + const categories = await directus.request(readItems('categories')); return categories.map((category) => ({ params: { slug: category.slug }, - props: { category }, + props: category, })); } @@ -36,16 +35,16 @@ const categoriesPosts = posts ---