"use client" import { useState, useEffect } from "react" import { useAuth } from "@/lib/auth-context" import { type User } from "@/lib/types" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { MoreHorizontal, Shield, ShieldAlert, Trash, KeyRound } from "lucide-react" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog" import { Label } from "@/components/ui/label" import { useToast } from "@/components/ui/use-toast" export function UserManagement() { const { getAllUsers, updateUserRole, deleteUser, adminResetPassword, user: currentUser } = useAuth() const { toast } = useToast() const [users, setUsers] = useState([]) const [loading, setLoading] = useState(true) // State for reset password dialog const [resetDialogOpen, setResetDialogOpen] = useState(false) const [selectedUser, setSelectedUser] = useState(null) const [newPassword, setNewPassword] = useState("") const loadUsers = async () => { setLoading(true) const data = await getAllUsers() setUsers(data) setLoading(false) } useEffect(() => { loadUsers() }, []) const handleRoleChange = async (userId: number, newRole: string) => { const success = await updateUserRole(userId, newRole) if (success) { toast({ title: "Rolle aktualisiert", description: `User ist jetzt ${newRole}` }) loadUsers() } else { toast({ title: "Fehler", description: "Rolle konnte nicht geändert werden", variant: "destructive" }) } } const handleDelete = async (userId: number) => { if (confirm("Sind Sie sicher, dass Sie diesen Benutzer löschen möchten?")) { const success = await deleteUser(userId) if (success) { toast({ title: "Benutzer gelöscht" }) loadUsers() } else { toast({ title: "Fehler", description: "Benutzer konnte nicht gelöscht werden", variant: "destructive" }) } } } const handleResetPassword = async () => { if (!selectedUser || !newPassword) return const success = await adminResetPassword(selectedUser.id, newPassword) if (success) { toast({ title: "Passwort zurückgesetzt" }) setResetDialogOpen(false) setNewPassword("") setSelectedUser(null) } else { toast({ title: "Fehler", description: "Passwort konnte nicht zurückgesetzt werden", variant: "destructive" }) } } if (loading) return
Lade Benutzer...
return (
Name Email Rolle {users.map((user) => ( {user.name} {user.email}
{user.role === "ADMIN" && } {user.role === "LEHRKRAFT" && Lehrkraft} {user.role === "RAUMBETREUER" && Raumbetreuer} {user.role === "ADMIN" && Admin}
Aktionen navigator.clipboard.writeText(user.email)}> Email kopieren {/* Safety: Cannot modify ID 1 and cannot modify self here ideally, but backend blocks ID 1 */} {user.id !== 1 && ( <> { setSelectedUser(user) setResetDialogOpen(true) }}> Passwort zurücksetzen {user.role !== "ADMIN" && ( handleRoleChange(user.id, "ADMIN")}> Zum Admin machen )} {user.role !== "LEHRKRAFT" && ( handleRoleChange(user.id, "LEHRKRAFT")}> Zum Lehrer herabstufen )} {user.role !== "RAUMBETREUER" && ( handleRoleChange(user.id, "RAUMBETREUER")}> Zum Raumbetreuer machen )} handleDelete(user.id)} className="text-destructive"> Löschen )}
))}
Passwort zurücksetzen für {selectedUser?.name} Setzen Sie ein neues Passwort für diesen Benutzer.
setNewPassword(e.target.value)} className="col-span-3" />
) }