// File: frontend/app/(protected)/layout.jsx import { cookies } from "next/headers"; // 1. ยังคงใช้ฟังก์ชันฝั่ง Server import { redirect } from "next/navigation"; import { Users } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger } from '@/components/ui/dropdown-menu'; // 2. Import SideNavigation Component ที่เราสร้างขึ้นมาใหม่ import { SideNavigation } from "./_components/SideNavigation"; // (ฟังก์ชัน fetchSession และตัวแปรอื่นๆ เหมือนเดิม) const API_BASE = process.env.NEXT_PUBLIC_API_URL || "http://localhost:3001"; async function fetchSession() { const cookieStore = cookies(); const token = cookieStore.get("access_token")?.value; if (!token) return null; try { const res = await fetch(`${API_BASE}/api/auth/me`, { headers: { Authorization: `Bearer ${token}` }, cache: "no-store", }); if (!res.ok) return null; return await res.json(); } catch (error) { console.error("Failed to fetch session:", error); return null; } } export default async function ProtectedLayout({ children }) { // 3. ดึงข้อมูล Session บน Server const session = await fetchSession(); if (!session?.user) { redirect("/login"); } return (
{/* Optional: Add a search bar */}
{session.user.username || 'My Account'} Settings {/* ปุ่ม Logout จริงๆ ควรอยู่ใน Client Component ที่เรียกใช้ useAuth() hook */} Logout
{children}
); }