import Link from "next/link"; import type { Metadata } from "next"; import { cookies } from "next/headers"; import { PenSquare, MessagesSquare, ChevronRight } from "lucide-react"; import { fetchPosts, fetchBoards } from "@/lib/api"; import { authCookieHeader } from "@/lib/cookies"; import { getMeCached } from "@/lib/serverData"; import Pagination from "@/components/Pagination"; import PostRow from "@/components/PostRow"; import PinnedPosts from "@/components/PinnedPosts"; import FeedNewTip from "@/components/home/FeedNewTip"; interface PageProps { params: Promise<{ id: string }>; searchParams: Promise<{ page?: string }>; } export async function generateMetadata({ params }: PageProps): Promise { const { id } = await params; const { boards } = await fetchBoards(); const board = boards.find((b) => b.id === Number(id)); return { title: board ? `${board.name} · 姜十三论坛` : "板块 · 姜十三论坛", description: board?.description || "板块帖子列表", }; } export default async function BoardPage({ params, searchParams }: PageProps) { const { id } = await params; const { page: pageStr } = await searchParams; const page = Math.max(1, parseInt(pageStr || "1", 10) || 1); const cookie = authCookieHeader(await cookies()); const [postsData, boardsData, me] = await Promise.all([ fetchPosts(page, 20, Number(id), "latest", "", false, cookie), fetchBoards(), getMeCached(cookie || undefined), ]); const boardIndex = boardsData.boards.findIndex((b) => b.id === Number(id)); const board = boardIndex >= 0 ? boardsData.boards[boardIndex] : null; const user = me.user; // 第一页:置顶帖独立成区,列表只保留非置顶 const pinned = page === 1 ? postsData.posts.filter((p) => p.pinned > 0) : []; const rows = page === 1 ? postsData.posts.filter((p) => p.pinned <= 0) : postsData.posts; return (
{/* 面包屑 */}
{board?.name.slice(0, 1) || "?"}

{board?.name || "未知板块"}

{board?.description && (

{board.description}

)}

{postsData.total} 篇讨论

在此板块发帖
{rows.length > 0 ? (
全部讨论 第 {page} 页
{user && (
)} {rows.map((post, i) => ( ))}
) : ( pinned.length === 0 && (

该板块还没有帖子

来发第一篇,抢占沙发

写新帖
) )}
); }