52 lines
1.9 KiB
TypeScript
52 lines
1.9 KiB
TypeScript
import { getUsers } from '@/lib/actions/users'
|
|
import { getCompanies } from '@/lib/actions/companies'
|
|
import { UserList } from '@/components/admin/user-list'
|
|
import { UserDialog } from '@/components/admin/user-dialog'
|
|
import { Users } from 'lucide-react'
|
|
import { Suspense } from 'react'
|
|
|
|
export const dynamic = 'force-dynamic'
|
|
|
|
export default async function AdminUsersPage() {
|
|
const companies = await getCompanies()
|
|
|
|
return (
|
|
<div className="flex-1 space-y-8 p-8 pt-6">
|
|
<div className="flex items-center justify-between space-y-2">
|
|
<div>
|
|
<h2 className="text-3xl font-bold tracking-tight text-gradient flex items-center gap-3">
|
|
<Users className="w-8 h-8 text-primary" />
|
|
Benutzerverwaltung
|
|
</h2>
|
|
<p className="text-slate-400">
|
|
Verwalten Sie Benutzerkonten, Berechtigungen und Sicherheit.
|
|
</p>
|
|
</div>
|
|
<div className="flex items-center space-x-2">
|
|
<UserDialog companies={companies} />
|
|
</div>
|
|
</div>
|
|
<Suspense fallback={<div className="h-40 w-full animate-pulse bg-white/5 rounded-xl" />}>
|
|
<UserDataWrapper />
|
|
</Suspense>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
async function UserDataWrapper() {
|
|
try {
|
|
const [users, companies] = await Promise.all([getUsers(), getCompanies()])
|
|
return <UserList initialUsers={users} companies={companies} />
|
|
} catch (error: any) {
|
|
console.error('[UserDataWrapper] Error loading users:', error)
|
|
return (
|
|
<div className="p-8 border border-destructive/50 bg-destructive/10 rounded-xl text-destructive text-center space-y-2">
|
|
<p>Fehler beim Laden der Benutzer. Stellen Sie sicher, dass der SERVICE_ROLE_KEY korrekt konfiguriert ist.</p>
|
|
<p className="text-xs font-mono text-destructive/80">
|
|
Details: {error instanceof Error ? error.message : JSON.stringify(error)}
|
|
</p>
|
|
</div>
|
|
)
|
|
}
|
|
}
|