import Link from "next/link"; import type { Metadata } from "next"; import { notFound, redirect } from "next/navigation"; import Footer from "@/components/landing-page/footer"; import LandingSiteNav from "@/components/landing-page/landing-site-nav"; import ArticleThumbnail from "@/components/landing-page/article-thumbnail"; import { ARTICLE_TYPE } from "@/constants/article-content-types"; import { fetchArticlePublic } from "@/lib/articles-public"; import { formatDate } from "@/utils/format-date"; type Props = { params: Promise<{ idSlug: string }>; }; function parseIdSlug(idSlug: string): { id: number; slug: string } | null { const match = idSlug.match(/^(\d+)-(.*)$/); if (!match) return null; const id = parseInt(match[1], 10); if (Number.isNaN(id)) return null; return { id, slug: match[2] }; } export async function generateMetadata({ params }: Props): Promise { const { idSlug } = await params; const parsed = parseIdSlug(idSlug); if (!parsed) return { title: "Artikel" }; const article = await fetchArticlePublic(parsed.id); if (!article || article.isPublish !== true) { return { title: "Artikel tidak ditemukan" }; } return { title: article.title, description: article.description?.slice(0, 160) || article.title, }; } export default async function NewsDetailPage({ params }: Props) { const { idSlug } = await params; const parsed = parseIdSlug(idSlug); if (!parsed) notFound(); const article = await fetchArticlePublic(parsed.id); if (!article || article.isPublish !== true) notFound(); if (article.slug !== parsed.slug) { redirect(`/news/detail/${article.id}-${article.slug}`); } const dateLabel = formatDate(article.publishedAt || article.createdAt); const primaryFile = article.files?.[0]; const mediaUrl = primaryFile?.fileUrl?.trim() || ""; return (
← Kembali ke Berita & Layanan

{dateLabel} {article.categoryName ? ` · ${article.categoryName}` : ""}

{article.title}

{article.typeId === ARTICLE_TYPE.VIDEO && mediaUrl ? (
) : null} {article.typeId === ARTICLE_TYPE.AUDIO && mediaUrl ? (
) : null} {article.description ? (

{article.description}

) : null} {article.htmlDescription ? (
) : null}
); }