diff options
Diffstat (limited to 'components/updates')
| -rw-r--r-- | components/updates/DateFormatter.js | 9 | ||||
| -rw-r--r-- | components/updates/PostPreview.js | 15 | ||||
| -rw-r--r-- | components/updates/getPostMetadata.js | 24 |
3 files changed, 48 insertions, 0 deletions
diff --git a/components/updates/DateFormatter.js b/components/updates/DateFormatter.js new file mode 100644 index 0000000..9e236d0 --- /dev/null +++ b/components/updates/DateFormatter.js @@ -0,0 +1,9 @@ + +import { parseISO, format } from 'date-fns' + +const DateFormatter = (dateString) => { + const date = parseISO(dateString) + return <time dateTime={dateString}>{format(date, 'LLLL d, yyyy')}</time> +} + +export default DateFormatter diff --git a/components/updates/PostPreview.js b/components/updates/PostPreview.js new file mode 100644 index 0000000..ca261c0 --- /dev/null +++ b/components/updates/PostPreview.js @@ -0,0 +1,15 @@ +import Link from "next/link"; +import DateFormatter from '@/components/updates/DateFormatter' + +export default function PostPreview(props) { + return ( + <div key="post" className="bg-zinc-800 py-3 px-5 border border-gray-600 rounded-lg space-y-3"> + <Link href={`/updates/${props.slug}`}> + <h2 className="font-medium text-2xl hover:underline">{props.title}</h2> + </Link> + <span>By {props.author}</span> + <p>{props.description}</p> + <p className="font-medium text-sm">Posted on {DateFormatter(props.date)}</p> + </div> + ) +} diff --git a/components/updates/getPostMetadata.js b/components/updates/getPostMetadata.js new file mode 100644 index 0000000..515cc79 --- /dev/null +++ b/components/updates/getPostMetadata.js @@ -0,0 +1,24 @@ +import {readdirSync, readFileSync} from "fs"; +import matter from "gray-matter"; + +export default function getPostMetadata() { + const folder = "posts/"; + const files = readdirSync(folder); + const markdownPosts = files.filter((file) => file.endsWith(".md")); + + const posts = markdownPosts.map((fileName) => { + const fileContent = readFileSync(`posts/${fileName}`, "utf-8"); + const matterResult = matter(fileContent); + return { + title: matterResult.data.title, + author: matterResult.data.author, + date: matterResult.data.date, + description: matterResult.data.description, + slug: fileName.replace(".md", "") + } + }) + + // Sort the posts by date in descending order + posts.sort((a, b) => new Date(b.date) - new Date(a.date)); + return posts +} |
