import { asc } from "drizzle-orm"; import { redirect } from "next/navigation"; import { getTranslations } from "next-intl/server"; import { createTeam, deleteTeam } from "@/actions/admin-teams"; import { StatusCard } from "@/components/admin/dashboard"; import { Button } from "@/components/ui/button"; import { db, WebsiteTeams } from "@/lib/db"; import { canAccess, getAdminContext, PERMS } from "@/lib/permissions"; type TeamRow = { id: bigint; rankName: string; badge: string | null; jobDescription: string | null; staffColor: string; hiddenRank: boolean; }; export default async function AdminTeams() { const { session, permissions } = await getAdminContext(); if (!canAccess(permissions, PERMS.USERS_VIEW, session.user.rank)) { redirect("/admin"); } const t = await getTranslations("pages.admin.teams"); let teams: TeamRow[] = []; try { teams = await db .select({ id: WebsiteTeams.id, rankName: WebsiteTeams.rankName, badge: WebsiteTeams.badge, jobDescription: WebsiteTeams.jobDescription, staffColor: WebsiteTeams.staffColor, hiddenRank: WebsiteTeams.hiddenRank, }) .from(WebsiteTeams) .orderBy(asc(WebsiteTeams.id)); } catch { teams = []; } const hidden = teams.filter((t) => t.hiddenRank).length; return (

{t("newTeamRank")}

{t("ranksTitle", { count: teams.length })}

{teams.length === 0 ? (
{t("noTeams")}
) : (
{teams.map((team) => ( ))}
{t("colId")} {t("rankName")} {t("badge")} {t("jobDescription")} {t("color")} {t("visibility")}
{String(team.id)} {team.rankName} {team.badge ?? "—"} {team.jobDescription ?? "—"} {team.staffColor} {team.hiddenRank ? t("hidden") : t("visible")}
)}
); }