"use client"; import { PlusIcon, ShieldCheckIcon } from "@heroicons/react/24/outline"; import { useMemo, useState } from "react"; import { trpc } from "@/lib/trpc"; type Role = "user" | "admin"; export default function BenutzerPage() { const utils = trpc.useUtils(); const usersQuery = trpc.users.list.useQuery(); const createUser = trpc.users.create.useMutation({ onSuccess: () => { setCreateForm({ name: "", email: "", password: "", globalRole: "user" }); return utils.users.list.invalidate(); }, }); const updateUser = trpc.users.update.useMutation({ onSuccess: () => utils.users.list.invalidate(), }); const startRecovery = trpc.users.startTwoFactorRecovery.useMutation({ onSuccess: () => utils.users.list.invalidate(), }); const [search, setSearch] = useState(""); const [selectedUserId, setSelectedUserId] = useState(null); const [createForm, setCreateForm] = useState({ name: "", email: "", password: "", globalRole: "user" as Role, }); const users = usersQuery.data ?? []; const selectedUser = users.find((user) => user.id === selectedUserId) ?? users[0] ?? null; const filteredUsers = useMemo(() => { const needle = search.trim().toLowerCase(); if (!needle) return users; return users.filter((user) => [user.name, user.email, user.globalRole].filter(Boolean).some((value) => value!.toLowerCase().includes(needle)), ); }, [search, users]); function submitCreate() { if (!createForm.name.trim() || !createForm.email.trim() || createForm.password.length < 16) return; createUser.mutate({ name: createForm.name.trim(), email: createForm.email.trim(), password: createForm.password, globalRole: createForm.globalRole, }); } function updateRole(userId: string, role: Role) { const user = users.find((item) => item.id === userId); if (!user) return; updateUser.mutate({ userId, name: user.name ?? user.email, email: user.email, globalRole: role, image: user.image ?? null, }); } return (

Admin

Benutzerverwaltung

Benutzer, Rollen und 2FA-Wiederherstellung für Hellth Hub.

setSearch(event.target.value)} placeholder="Name, E-Mail oder Rolle suchen" className="w-full rounded-full border border-gray-200 px-4 py-3 text-sm font-semibold outline-none focus:border-[#0F766E]" />
{filteredUsers.map((user) => ( ))} {!filteredUsers.length ? ( ) : null}
Benutzer Rolle 2FA Aktion
{user.twoFactorEnabled ? "aktiv" : "aus"}
Keine Benutzer gefunden.
); }