import { sql } from "drizzle-orm"; import { redirect } from "next/navigation"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { db } from "@/lib/db"; import { canAccess, getAdminContext, PERMS } from "@/lib/permissions"; import { getWatchedUserIds } from "@/lib/services/watch"; import { UserAccountInfo } from "../../_components/user-account-info"; import { UserHero } from "../../_components/user-hero"; import { loadUserById } from "../../_lib/load-user"; import { UserActivityLog } from "../../[id]/user-activity-log"; import { UserBadgesSection } from "../../[id]/user-badges-section"; import { UserBanSection } from "../../[id]/user-ban-section"; import { UserEditForm } from "../../[id]/user-edit-form"; import { UserQuickActions } from "../../[id]/user-quick-actions"; import { UserRooms } from "../../[id]/user-rooms"; // TODO: Cache Components adoption. Refactor this route so this opt-out can be removed. // See: https://nextjs.org/docs/app/guides/migrating-to-cache-components export const instant = false; export default async function UserEditPage({ params, }: { params: Promise<{ locale: string; id: string }>; }) { const { id } = await params; const { session, permissions } = await getAdminContext(); if (!canAccess(permissions, PERMS.USERS_EDIT, session.user.rank)) { redirect("/admin"); } const data = await loadUserById(id); const watched = await getWatchedUserIds(session.user.id); // Fetch rank list from permissions table for the rank dropdown const [rawRanks] = (await db.execute( sql`SELECT id, rank_name FROM permissions ORDER BY id ASC`, )) as unknown as [{ id: number; rank_name: string }[], unknown]; const ranks = (rawRanks ?? []).map((r) => ({ id: Number(r.id), name: String(r.rank_name || `Rank ${r.id}`), })); return (
Edit Profile Bans {data.activeBan && ( )} Badges ({data.user.badges.length}) Rooms ({data.roomCount}) Activity Account Info ({ id: b.id, reason: b.banReason, type: b.type, staffName: b.staff.username, timestamp: b.timestamp, banExpire: b.banExpire, }))} /> ({ id: b.id, badgeCode: b.badgeCode, }))} />
); }