import { Suspense } from "react"; import { getServerSession } from "next-auth"; import { redirect } from "next/navigation"; import { Activity, Database, MessageCircle, Music2, RadioTower, } from "lucide-react"; import { AdminShellServer } from "@/components/admin-shell-server"; import { Skeleton } from "@/components/ui/skeleton"; import { SidebarGroup, SidebarGroupContent, SidebarMenu, SidebarMenuButton, SidebarMenuItem, } from "@/components/ui/sidebar"; import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/tooltip"; import { getAdminDiscordIds, getSessionDiscordId } from "@/lib/auth/auth"; import { authOptions } from "@/lib/auth/auth-options"; import { getAdminServiceHealth } from "@/lib/admin/service-health"; import { RobloxIcon, YoutubeIcon } from "@/lib/icons"; import { cn } from "@/lib/utils"; const iconByService = { database: Database, redis: RadioTower, youtube: YoutubeIcon, tiktok: Music2, discord: MessageCircle, roblox: RobloxIcon, } as const; async function AdminHealthStatus() { const snapshot = await getAdminServiceHealth(); const unavailable = snapshot.services.filter( (service) => service.status === "unavailable", ).length; const summary = unavailable ? `${unavailable} ${unavailable === 1 ? "service" : "services"} unavailable` : "All systems operational"; return (
{(["core", "integration"] as const).map((category) => (
{snapshot.services .filter((service) => service.category === category) .map((service) => { const Icon = iconByService[ service.id as keyof typeof iconByService ]; return ( svg]:shrink-0", category === "core" ? "[&>svg]:size-5" : "[&>svg]:size-4", service.status === "operational" ? "text-emerald-500" : "text-destructive", )} aria-label={`${service.label}: ${service.status}`} > {service.label}: {service.status} ); })}
))}
{summary}
); } function AdminHealthStatusSkeleton() { return ( ); } export default async function AdminLayout({ children, }: { children: React.ReactNode; }) { const session = await getServerSession(authOptions); const discordId = getSessionDiscordId(session); if (!discordId || !getAdminDiscordIds().includes(discordId)) { redirect("/"); } return ( }> } > {children} ); }