import Link from "next/link"; import Image from "next/image"; import { redirect } from "next/navigation"; import { getServerSession } from "next-auth"; import { Check, ChartColumn } from "lucide-react"; import { authOptions } from "@/lib/auth"; import { isAdminEmail } from "@/lib/admin"; import { userRepo } from "@/server/repositories/user.repo"; type Tab = "ALL" | "ACTIVE" | "SUSPENDED"; const TABS: { key: Tab; label: string }[] = [ { key: "ALL", label: "Semua" }, { key: "ACTIVE", label: "Aktif" }, { key: "SUSPENDED", label: "Suspended" }, ]; interface PageProps { searchParams: Promise<{ tab?: string; q?: string }>; } export default async function AdminUsersPage({ searchParams }: PageProps) { const session = await getServerSession(authOptions); if (!session?.user) redirect("/login?callbackUrl=/admin/users"); if (!isAdminEmail(session.user.email)) { return (

Halaman ini hanya untuk admin SeTrip.

); } const params = await searchParams; const tab: Tab = TABS.some((t) => t.key === params.tab) ? (params.tab as Tab) : "ALL"; const q = (params.q ?? "").trim(); const users = await userRepo.searchForAdmin({ q: q || undefined, suspended: tab === "SUSPENDED" ? true : tab === "ACTIVE" ? false : undefined, }); return (

User Management

Cari user, lihat history booking & trip, dan suspend akun yang melakukan abuse (scam, harassment, TOS violation).

Stats
{q && ( Reset )}
{TABS.map((t) => ( {t.label} ))}
{users.length === 0 ? (

{q ? `Tidak ada user yang cocok dengan "${q}".` : "Tidak ada user pada tab ini."}

) : ( )}
); }