mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 06:11:11 -05:00
68 lines
1.9 KiB
TypeScript
68 lines
1.9 KiB
TypeScript
import { useAdminGuard } from '@/hooks/useAdminGuard';
|
|
import { MFARequiredAlert } from '@/components/auth/MFARequiredAlert';
|
|
import { AdminLayout } from '@/components/layout/AdminLayout';
|
|
import { UserManagement } from '@/components/admin/UserManagement';
|
|
import { Skeleton } from '@/components/ui/skeleton';
|
|
import { Card, CardContent } from '@/components/ui/card';
|
|
|
|
export default function AdminUsers() {
|
|
const { isLoading, isAuthorized, needsMFA } = useAdminGuard();
|
|
|
|
if (isLoading) {
|
|
return (
|
|
<AdminLayout>
|
|
<div className="space-y-6">
|
|
<div>
|
|
<h1 className="text-2xl font-bold tracking-tight">User Management</h1>
|
|
<p className="text-muted-foreground mt-1">
|
|
Manage user profiles, roles, and permissions
|
|
</p>
|
|
</div>
|
|
|
|
<Card>
|
|
<CardContent className="p-6 space-y-4">
|
|
{[1, 2, 3, 4].map((i) => (
|
|
<div key={i} className="flex items-center gap-4 p-4 border rounded-lg">
|
|
<Skeleton className="h-10 w-10 rounded-full" />
|
|
<div className="flex-1 space-y-2">
|
|
<Skeleton className="h-4 w-48" />
|
|
<Skeleton className="h-3 w-32" />
|
|
</div>
|
|
<Skeleton className="h-8 w-24" />
|
|
</div>
|
|
))}
|
|
</CardContent>
|
|
</Card>
|
|
</div>
|
|
</AdminLayout>
|
|
);
|
|
}
|
|
|
|
if (!isAuthorized) {
|
|
return null;
|
|
}
|
|
|
|
if (needsMFA) {
|
|
return (
|
|
<AdminLayout>
|
|
<MFARequiredAlert />
|
|
</AdminLayout>
|
|
);
|
|
}
|
|
|
|
return (
|
|
<AdminLayout>
|
|
<div className="space-y-6">
|
|
<div>
|
|
<h1 className="text-2xl font-bold tracking-tight">User Management</h1>
|
|
<p className="text-muted-foreground mt-1">
|
|
Manage user profiles, roles, and permissions
|
|
</p>
|
|
</div>
|
|
|
|
<UserManagement />
|
|
</div>
|
|
</AdminLayout>
|
|
);
|
|
}
|