import { marked } from "marked"; import ContentTable from "./ContentTable"; import Sidebar from "./Sidebar"; import styles from "../../../../styles/modules/Article.module.scss"; import LoadMarkdown from "./LoadMarkdown"; import { Article, Category, ContentTableEntry } from "@prisma/client"; import Image from "next/image"; import urlJoin from "url-join"; import { apiUrl } from "../../../global"; import { Prisma } from "@prisma/client"; import Markdown from "../../../Markdown"; type ArticleWithIncludes = Prisma.ArticleGetPayload<{ include: { contentTableEntries: true; category: true; image: true }; }>; export async function GetArticle(articleName: string): Promise { const result: Response = await fetch(urlJoin(apiUrl, `articles/${articleName ?? ""}`), { cache: "force-cache", next: { revalidate: 60 * 10 }, }); return result.json(); } function ParseMarkdown(markdown: string): string { let result = marked.parse(markdown); return result; } //* MAIN export default async function ArticlePage({ params }: { params: { articleName: string; categoryName: string } }) { const articleName: string = params.articleName.toLowerCase().replaceAll("%20", " "); const article: ArticleWithIncludes = await GetArticle(articleName); const dateUpdated: Date = new Date(article.dateUpdated); const dateCreated: Date = new Date(article.dateCreated); const dateOptions: Intl.DateTimeFormatOptions = { month: "long", day: "numeric", year: "numeric" }; const markdown: string = article?.markdown ?? ""; return (

{`Published on ${dateCreated.toLocaleDateString("en-US", dateOptions)}`}
{dateUpdated > dateCreated ? `Updated on ${dateUpdated.toLocaleDateString("en-US", dateOptions)}` : ""}

{article?.title}

{article?.image?.alt

{article?.introduction}

{/*
*/}
); } export async function generateStaticParams() { const articles: ArticleWithIncludes[] = await ( await fetch(urlJoin(apiUrl, `articles/`), { cache: "force-cache", next: { revalidate: 60 * 10 }, }) ).json(); return await Promise.all( articles.map(async (article) => ({ categoryName: article.category?.name ?? "", articleName: article.name ?? "", })) ); }