39 lines
1.1 KiB
TypeScript
Executable File
39 lines
1.1 KiB
TypeScript
Executable File
import { requireAuth } from '@/lib/auth/server';
|
|
import { getUsers, getRoles } from '@/lib/api/server/membership';
|
|
import type { UserListParams } from '@/lib/api/server/membership';
|
|
import { UserManagementTable } from '@/components/membership/UserManagementTable';
|
|
|
|
interface MembershipPageProps {
|
|
searchParams: Promise<{
|
|
username?: string;
|
|
role_name?: string;
|
|
sort_by?: string;
|
|
sort_desc?: string;
|
|
page?: string;
|
|
}>;
|
|
}
|
|
|
|
export default async function MembershipPage({ searchParams }: MembershipPageProps) {
|
|
const session = await requireAuth();
|
|
|
|
const resolvedParams = await searchParams;
|
|
|
|
const params: UserListParams = {
|
|
username: resolvedParams.username,
|
|
role_name: resolvedParams.role_name,
|
|
sort_by: resolvedParams.sort_by || 'username',
|
|
sort_desc: resolvedParams.sort_desc === 'true',
|
|
page: parseInt(resolvedParams.page || '1'),
|
|
limit: 20
|
|
};
|
|
|
|
const [userListData, roles] = await Promise.all([
|
|
getUsers(session.token!, params),
|
|
getRoles(session.token!)
|
|
]);
|
|
|
|
return (
|
|
<UserManagementTable initialData={userListData} roles={roles} currentUser={session.user!} />
|
|
);
|
|
}
|