import Link from "next/link"; import { StatusCard } from "@/components/admin/dashboard"; import { ConfirmAction } from "@/components/admin/confirm-action"; import { prisma } from "@/lib/prisma"; import { getTranslations } from "next-intl/server"; 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 t = await getTranslations("pages.admin.users"); 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 (

{t("title")}

{q ? t("searchResults", { count: total, query: q }) : t("subtitle")}

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

{t("title")} ({total})

{users.length === 0 ? (

{t("noResults")}

) : (
{users.map((u) => ( ))}
{t("colId")} {t("colUsername")} {t("colRank")} {t("detail.credits")} {t("colOnline")} {t("colActions")}
{u.id} {u.username} {u.rank} {u.credits} {u.online === "1" ? t("colOnline") : t("offline")}
{t("edit")} {t("setRank")} {t("disconnect")} {t("alert")}
)}

{t("pagination", { page, pages, total })} {page < pages ? ( <> {" ยท "} {t("next")} โ†’ ) : null}

); }