import Link from "next/link"; import { StatusCard } from "@/components/admin/dashboard"; import { ConfirmAction } from "@/components/admin/confirm-action"; import { prisma } from "@/lib/prisma"; export const dynamic = "force-dynamic"; const PER_PAGE = 25; export default async function AdminUsers({ searchParams, }: { searchParams: Promise<{ q?: string; page?: string; form?: string }>; }) { const sp = await searchParams; const q = (sp.q ?? "").trim(); const page = Math.max(1, Number(sp.page ?? "1") || 1); const where = q ? { username: { contains: q } } : {}; const users = await prisma.user .findMany({ where, select: { id: true, username: true, rank: true, credits: true, online: true }, orderBy: { id: "desc" }, skip: (page - 1) * PER_PAGE, take: PER_PAGE, }) .catch(() => []); const total = await prisma.user.count({ where }).catch(() => 0); const pages = Math.max(1, Math.ceil(total / PER_PAGE)); const onlineOnPage = users.filter((u) => u.online === "1").length; return (

Users

{q ? `Search results for โ€œ${q}โ€.` : "Most recent accounts first."}

0 ? "ok" : "neutral"} icon="๐ŸŸข" />

Accounts ({total})

{users.length === 0 ? (

No users match this search.

) : (
{users.map((u) => ( ))}
ID Username Rank Credits Status Actions
{u.id} {u.username} {u.rank} {u.credits} {u.online === "1" ? "online" : "offline"}
Edit Set Rank Disconnect Alert
)}

Page {page} / {pages} ยท {total} users {page < pages ? ( <> {" ยท "} Next โ†’ ) : null}

); }