import { redirect } from "next/navigation" import { eq } from "drizzle-orm" import { db } from "@/lib/db" import { profiles } from "@/lib/db/schema" import { getSession, isAdminUser } from "@/lib/session" import { getMaintenanceMode } from "@/lib/settings" import { MaintenanceScreen } from "@/components/shared/maintenance-screen" import { Sidebar } from "@/components/dashboard/sidebar" import { Header } from "@/components/dashboard/header" import { CommandPalette } from "@/components/dashboard/command-palette" import { PageTransition } from "@/components/dashboard/page-transition" import { Breadcrumbs } from "@/components/dashboard/breadcrumbs" import { ScrollToTop } from "@/components/ui/scroll-to-top" import { ImpersonationBanner } from "@/components/admin/impersonation-banner" export default async function DashboardLayout({ children }: { children: React.ReactNode }) { const session = await getSession() const user = session?.user if (!user) { redirect("/login") } // Site maintenance mode: everyone except admins sees the maintenance screen. const maintenance = await getMaintenanceMode() if (maintenance.enabled && !isAdminUser(user)) { return } const profile = await db.query.profiles.findFirst({ where: eq(profiles.id, user.id), }) // Set by the Better Auth admin plugin while an admin is impersonating. const impersonating = Boolean((session?.session as { impersonatedBy?: string })?.impersonatedBy) return (
{impersonating && }
{children}
) }