refactor: update blog page layout and add blog list functionality

This commit is contained in:
tuna2134
2025-05-04 04:20:13 +00:00
parent fa25d3da89
commit 6d4ef05b16
4 changed files with 57 additions and 6 deletions

View File

@@ -15,10 +15,10 @@ export default async function Page({ params }: Props) {
return (
<>
<div className="mb-6 rounded-lg border border-gray-300 p-2 shadow-md">
<h2 className="border-b-4 border-indigo-600 bg-indigo-600/20 p-1 text-2xl font-bold">
<h2 className="p-1 text-center text-2xl font-bold tracking-wider">
{metadata.title}
</h2>
<div className="mt-3 flex items-center space-x-2">
<div className="mt-4 flex items-center justify-center space-x-2">
<Timer />
<p>{metadata.datetime}</p>
</div>

View File

@@ -0,0 +1,42 @@
import fs from "fs/promises";
import { NextPage } from "next";
const Page: NextPage = async () => {
const blogs = (await fs.readdir("blogs"))
.filter((name) => name.endsWith(".mdx"))
.map(async (name) => ({
slug: name.replace(/\.mdx$/, ""),
metadata: (await import(`@/blogs/${name}`)).metadata,
}));
const blogList = await Promise.all(blogs);
blogList.sort((a, b) => {
const dateA = new Date(a.metadata.datetime);
const dateB = new Date(b.metadata.datetime);
return dateB.getTime() - dateA.getTime();
});
return (
<div>
<h1 className="text-center text-2xl font-bold"></h1>
<ul className="mt-6 grid grid-cols-2 gap-4">
{blogList.map((blog) => (
<li
key={blog.slug}
className="rounded-md bg-gray-100 p-2 shadow-md"
>
<a
href={`/blogs/${blog.slug}`}
className="text-xl text-blue-500 hover:underline"
>
{blog.metadata.title}
</a>
<p className="text-gray-500">
{blog.metadata.datetime}
</p>
</li>
))}
</ul>
</div>
);
};
export default Page;

View File

@@ -1,5 +1,5 @@
import type { Metadata } from "next";
import { Geist, Geist_Mono } from "next/font/google";
import { Geist, Geist_Mono, Noto_Sans_JP } from "next/font/google";
import "./globals.css";
const geistSans = Geist({
@@ -12,6 +12,11 @@ const geistMono = Geist_Mono({
subsets: ["latin"],
});
const notoSansJP = Noto_Sans_JP({
variable: "--font-noto-sans-jp",
subsets: ["latin"],
});
export const metadata: Metadata = {
title: "tuna2134",
description: "tuna2134 official website",
@@ -25,7 +30,7 @@ export default function RootLayout({
return (
<html lang="ja">
<body
className={`${geistSans.variable} ${geistMono.variable} antialiased`}
className={`${geistSans.variable} ${geistMono.variable} ${notoSansJP.variable} antialiased`}
>
{children}
</body>