import { prisma } from "@/lib/prisma"; import { insensitiveContains } from "@/lib/prisma-search"; import { BackLink } from "@/components/back-link"; import { ConfirmForm } from "@/components/confirm-form"; import { getCurrentAdmin } from "@/lib/auth"; import { formatDate } from "@/lib/format"; import { AdminActionButton, AdminActionLink, AdminBadge, AdminEmptyState, AdminPageHeader, AdminRowActions, AdminSearchForm, } from "@/components/admin-list"; import { blockCustomerAction, unblockCustomerAction, deleteCustomerAction } from "../actions"; import { getLocale } from "@/i18n/locale"; import { getDictionary } from "@/i18n/get-dictionary"; export default async function AdminBenutzerPage(props: PageProps<"/admin/benutzer">) { const t = getDictionary(await getLocale()); const roleLabels: Record = { KUNDE: t.adminUsersPage.roleCustomer, ADMIN: t.adminUsersPage.roleAdmin }; const { q } = await props.searchParams; const query = typeof q === "string" ? q.trim() : ""; const [admin, customers] = await Promise.all([ getCurrentAdmin(), prisma.customer.findMany({ where: query ? { OR: [ { firstName: insensitiveContains(query) }, { lastName: insensitiveContains(query) }, { email: insensitiveContains(query) }, ], } : undefined, orderBy: { createdAt: "desc" }, take: 100, }), ]); const newUser = { href: "/admin/benutzer/neu", label: t.adminUsersPage.newUser }; return (
{customers.map((customer) => { const isSelf = customer.id === admin?.id; const isTemporarilyLocked = Boolean(customer.lockedUntil && customer.lockedUntil > new Date()); return ( ); })}
{t.adminUsersPage.colName} {t.adminUsersPage.colEmail} {t.adminUsersPage.colRole} {t.adminUsersPage.colStatus} {t.adminUsersPage.col2fa} {t.adminUsersPage.colCreated}
{customer.firstName} {customer.lastName} {isSelf ? {t.adminUsersPage.youSuffix} : null} {customer.email} {customer.role === "ADMIN" ? ( {roleLabels.ADMIN} ) : ( (roleLabels[customer.role] ?? customer.role) )} {customer.blockedAt ? ( {t.adminUsersPage.statusBlocked} ) : isTemporarilyLocked ? ( {t.adminUsersPage.statusTemporarilyLocked} ) : ( {t.adminUsersPage.statusActive} )} {customer.twoFactorEnabled ? ( {t.adminUsersPage.statusActive} ) : ( — )} {formatDate(customer.createdAt)} {t.adminUsersPage.edit} {!isSelf ? ( customer.blockedAt ? (
{t.adminUsersPage.unblock}
) : (
{t.adminUsersPage.block}
) ) : null} {!isSelf ? ( {t.adminUsersPage.delete} ) : null}
{customers.length === 0 ? ( ) : null}
); }