feat: add update viewer page with static generation
This commit is contained in:
@@ -0,0 +1,58 @@
|
|||||||
|
import type { Metadata } from "next"
|
||||||
|
import { notFound } from "next/navigation"
|
||||||
|
import Link from "next/link"
|
||||||
|
import { ArrowLeftIcon } from "lucide-react"
|
||||||
|
import { getAllUpdateSlugs, getUpdateBySlug } from "@/lib/updates"
|
||||||
|
import { UpdateViewer } from "@/components/updates/update-viewer"
|
||||||
|
|
||||||
|
export async function generateStaticParams() {
|
||||||
|
const slugs = getAllUpdateSlugs()
|
||||||
|
return slugs.map((slug) => ({ slug }))
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function generateMetadata({
|
||||||
|
params,
|
||||||
|
}: {
|
||||||
|
params: Promise<{ slug: string }>
|
||||||
|
}): Promise<Metadata> {
|
||||||
|
const { slug } = await params
|
||||||
|
let update
|
||||||
|
try {
|
||||||
|
update = await getUpdateBySlug(slug)
|
||||||
|
} catch {
|
||||||
|
return { title: "Update Not Found" }
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
title: `${update.meta.title} | DeckyVault`,
|
||||||
|
description: update.meta.summary,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default async function UpdatePage({
|
||||||
|
params,
|
||||||
|
}: {
|
||||||
|
params: Promise<{ slug: string }>
|
||||||
|
}) {
|
||||||
|
const { slug } = await params
|
||||||
|
let update
|
||||||
|
try {
|
||||||
|
update = await getUpdateBySlug(slug)
|
||||||
|
} catch {
|
||||||
|
notFound()
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<main className="w-full">
|
||||||
|
<div className="w-full max-w-4xl mx-auto px-4 pt-4">
|
||||||
|
<Link
|
||||||
|
href="/updates"
|
||||||
|
className="inline-flex items-center gap-1 text-sm text-text/60 hover:text-primary transition-colors"
|
||||||
|
>
|
||||||
|
<ArrowLeftIcon className="w-3 h-3" />
|
||||||
|
Back to updates
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
|
<UpdateViewer update={update} />
|
||||||
|
</main>
|
||||||
|
)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user