import { PostList } from "@/app/components/PostList"; import { HeroBanner } from "@/app/components/HeroBanner"; import { headers } from "next/headers"; // Next 15: params/searchParams가 Promise가 될 수 있어 안전 언랩 처리합니다. export default async function BoardDetail({ params, searchParams }: { params: any; searchParams: any }) { const p = params?.then ? await params : params; const sp = searchParams?.then ? await searchParams : searchParams; const id = p.id as string; const sort = (sp?.sort as "recent" | "popular" | undefined) ?? "recent"; // 보드 slug 조회 (새 글 페이지 프리셋 전달) const h = await headers(); const host = h.get("host") ?? "localhost:3000"; const proto = h.get("x-forwarded-proto") ?? "http"; const base = process.env.NEXT_PUBLIC_BASE_URL || `${proto}://${host}`; const res = await fetch(new URL("/api/boards", base).toString(), { cache: "no-store" }); const { boards } = await res.json(); const board = (boards || []).find((b: any) => b.id === id); const siblingBoards = (boards || []).filter((b: any) => b.category?.id && b.category.id === board?.category?.id); const categoryName = board?.category?.name ?? ""; return (
{/* 상단 배너 (홈과 동일) */}
{/* 보드 탭 + 리스트 카드 */}
{/* 상단 탭 영역 */}
{categoryName} {siblingBoards.map((b: any) => ( {b.name} ))}
{/* 리스트 */}
); }