Files

48 lines
1.6 KiB
TypeScript
Raw Permalink Normal View History

2025-12-06 15:50:23 +01:00
import {PageParams} from "@/types/next";
2025-12-30 13:38:01 +01:00
import {Page, PageActions, PageContent, PageHeader, PageTitle} from "@/features/layout/page";
2025-12-06 15:50:23 +01:00
import {db} from "@/db";
2025-12-30 13:38:01 +01:00
import {desc, isNull} from "drizzle-orm";
2026-05-24 17:09:12 +02:00
import {AdminUserList} from "@/features/users/admin-user-list";
import {AdminUserAddModal} from "@/features/users/admin-user-add-modal";
2026-02-24 16:49:16 +01:00
import {SUPPORTED_PROVIDERS} from "@/lib/auth/config";
2025-12-06 15:50:23 +01:00
export default async function RoutePage(props: PageParams<{}>) {
const users = await db.query.user.findMany({
where: (fields) => isNull(fields.deletedAt),
with: {
accounts: true
2025-12-30 13:38:01 +01:00
},
orderBy: (fields) => desc(fields.createdAt),
});
const organizations = await db.query.organization.findMany({
with: {
members: true,
},
2025-12-06 15:50:23 +01:00
});
2026-02-24 16:49:16 +01:00
const credentialProvider = SUPPORTED_PROVIDERS.find(p => p.id === 'credential');
const isPasswordAuthEnabled = credentialProvider?.isActive || false;
2025-12-06 15:50:23 +01:00
return (
<Page>
<PageHeader className="flex flex-col">
<div className="flex justify-between">
<PageTitle className="mb-3">Active users</PageTitle>
{isPasswordAuthEnabled && (
<PageActions>
<AdminUserAddModal organizations={organizations}/>
</PageActions>
)}
2025-12-06 15:50:23 +01:00
</div>
</PageHeader>
<PageContent className="flex flex-col gap-5">
2026-02-24 16:49:16 +01:00
<AdminUserList users={users} isPasswordAuthEnabled={isPasswordAuthEnabled}/>
2025-12-06 15:50:23 +01:00
</PageContent>
</Page>
);
}
2025-12-30 13:38:01 +01:00