import { desc, eq, sql } from "drizzle-orm"; import { ArrowLeftRight, Badge, BadgeDollarSign, BitcoinIcon, BookUser, Columns3Cog, Compass, Computer, Database, ExternalLink, GitGraph, Grid3X3, IdCard, ListTree, MoreHorizontal, Package, PlusCircle, ScrollText, Settings, SquareUserRound, UserRoundSearch, } from "lucide-react"; import Link from "next/link"; import { redirect } from "next/navigation"; import { type ReactNode, Suspense } from "react"; import { SimpleTooltip } from "@/components/tooltip"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuPortal, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInset, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarProvider, } from "@/components/ui/sidebar"; import { NavUser } from "@/components/user"; import { adminCheck } from "@/lib/auth"; import { db } from "@/lib/db"; import { tierlistTypes, tierlistVersions, versions } from "@/lib/db/schema"; import { SidebarLink, VersionCreateDialogForm } from "./client"; import { AdminNavbar } from "./navbar"; export default async function AdminLayout({ children, modal, }: { children: ReactNode; modal: ReactNode; }) { if (!(await adminCheck())) redirect("/login"); const vers = db .select() .from(versions) .orderBy(desc(versions.id)) .catch(() => [{ id: "..", name: "Error Fetching List." }]); const tlVersions = db .select({ name: sql`${tierlistTypes.name} || ' ' || ${tierlistVersions.name}`.as( "name", ), url: sql`${tierlistVersions.type} || '/' || ${tierlistVersions.id}`, }) .from(tierlistVersions) .orderBy(tierlistTypes.order, tierlistVersions.order) .innerJoin(tierlistTypes, eq(tierlistTypes.id, tierlistVersions.type)) .catch(() => []); return ( Buzzy Inc. Loading... } > Tierlist [WIP] Versions Badges Layout Guide Editor Versions [WIP] Create... Types Create Version Global Admin Pages } > Characters CDN Audit Log Settings {modal} {children} ); } async function HealthStatus() { const health: { database: boolean; enka: boolean; amber: boolean; red: boolean; } = await fetch("http://localhost:3000/api/health").then((r) => r.json()); return (
{/* Database */} {" "} {/* Enka */} {" "} {/* Amber */} {/* Cache */}
{Object.values(health).some((x) => !x) ? `${{ database: "ฐานข้อมูล", enka: "Enka ", amber: "Amber ", red: "SSE " }[Object.entries(health).find(([, v]) => !v)![0]]}มีปัญหา` : "ปกติทุกอย่าง"}
); } async function AdminNavbarLoader({ adminShortcuts, tierlistVersions, }: { adminShortcuts: Promise< { name: string; url: string; }[] >; tierlistVersions: Promise< { id: string; name: string; }[] >; }) { return ( ); } async function VersionsList({ versions: prom, }: { versions: Promise< { id: string; name: string; }[] >; }) { const vers = await prom; return ( <> {vers.map((v) => ( {v.name} ))} ); } async function AdminShortcuts({ versions: prom, }: { versions: Promise<{ name: string; url: string }[]>; }) { const versions = await prom; return ( Admin Pages Artifact Rubgram Donate Tierlist {versions.map((v) => ( {v.name} ))} ); } export const dynamic = "force-dynamic";