40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
|
|
import { Suspense } from "react";
|
||
|
|
import { UserTable } from "@/components/admin/users/user-table";
|
||
|
|
import { Skeleton } from "@/components/ui/skeleton";
|
||
|
|
|
||
|
|
export default function UsersPage() {
|
||
|
|
return (
|
||
|
|
<div className="container mx-auto py-8 px-4">
|
||
|
|
<div className="mb-8">
|
||
|
|
<h1 className="text-3xl font-bold">User Management</h1>
|
||
|
|
<p className="text-muted-foreground mt-2">
|
||
|
|
Manage users, roles, and permissions
|
||
|
|
</p>
|
||
|
|
</div>
|
||
|
|
<Suspense fallback={<UserTableSkeleton />}>
|
||
|
|
<UserTable />
|
||
|
|
</Suspense>
|
||
|
|
</div>
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
function UserTableSkeleton() {
|
||
|
|
return (
|
||
|
|
<div className="space-y-4">
|
||
|
|
<div className="flex gap-4">
|
||
|
|
<Skeleton className="h-10 flex-1" />
|
||
|
|
<Skeleton className="h-10 w-[140px]" />
|
||
|
|
<Skeleton className="h-10 w-[140px]" />
|
||
|
|
<Skeleton className="h-10 w-[100px]" />
|
||
|
|
</div>
|
||
|
|
<div className="rounded-md border">
|
||
|
|
<div className="p-4 space-y-4">
|
||
|
|
{[...Array(5)].map((_, i) => (
|
||
|
|
<Skeleton key={i} className="h-12 w-full" />
|
||
|
|
))}
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
);
|
||
|
|
}
|