'use client' import { useState } from 'react' import { useRouter } from 'next/navigation' import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { Key, Trash2, Mail, Loader2, Building2 } from 'lucide-react' import { Button } from '@/components/ui/button' import { deleteUser, resetPassword, updateUserRole } from '@/lib/actions/users' import { assignCompanyToUser } from '@/lib/actions/companies' import { Badge } from '@/components/ui/badge' type Role = 'admin' | 'partner' | 'gesperrt' const ROLE_LABELS: Record = { admin: 'Admin', partner: 'Partner', gesperrt: 'Gesperrt', } const ROLE_BADGE_CLASSES: Record = { admin: 'bg-purple-500/20 text-purple-400 border border-purple-500/30', partner: 'bg-blue-500/20 text-blue-400 border border-blue-500/30', gesperrt: 'bg-red-500/20 text-red-400 border border-red-500/30', } interface UserListProps { initialUsers: any[] companies: { id: string; name: string }[] } export function UserList({ initialUsers, companies }: UserListProps) { const router = useRouter() const [loadingId, setLoadingId] = useState(null) const handleDelete = async (id: string) => { if (confirm('Möchten Sie diesen Benutzer wirklich löschen?')) { setLoadingId(id) await deleteUser(id) setLoadingId(null) router.refresh() } } const handleRoleChange = async (id: string, newRole: Role) => { setLoadingId(id + '-role') try { await updateUserRole(id, newRole) router.refresh() } catch (e) { console.error('Fehler beim Ändern der Rolle:', e) } finally { setLoadingId(null) } } const handleCompanyChange = async (userId: string, companyId: string) => { setLoadingId(userId + '-company') try { await assignCompanyToUser(userId, companyId === '' ? null : companyId) router.refresh() } catch (e) { console.error('Fehler beim Zuweisen der Firma:', e) } finally { setLoadingId(null) } } const handleResetPassword = async (email: string) => { try { await resetPassword(email) alert('Password-Reset Link generiert (siehe Mailpit/Supabase Log)') } catch (error) { alert('Fehler beim Passwort-Reset') } } return ( Benutzerverwaltung Rollen, Firmenzuweisungen, Passwörter und Benutzerkonten verwalten. E-Mail Rolle Firma Zuletzt angemeldet Aktionen {initialUsers.map((user) => { const role: Role = (['admin', 'partner', 'gesperrt'].includes(user.role) ? user.role : 'partner') as Role const isLoadingRole = loadingId === user.id + '-role' const isLoadingCompany = loadingId === user.id + '-company' const isLoadingDelete = loadingId === user.id return (
{user.email}
{ROLE_LABELS[role]} {isLoadingRole ? ( ) : ( )}
{isLoadingCompany ? ( ) : ( )}
{user.last_sign_in_at ? new Date(user.last_sign_in_at).toLocaleString('de-DE') : 'Noch nie'}
) })}
) }