List orgs in server

This commit is contained in:
Fred KISSIE
2026-09-14 16:48:08 -04:00
committed by Owen
parent 9c8b93d6cc
commit e371f26d73
5 changed files with 519 additions and 1 deletions
+53 -1
View File
@@ -1,17 +1,69 @@
import SettingsSectionTitle from "@app/components/SettingsSectionTitle";
import OrgsTable, { type OrgRow } from "@app/components/OrgsTable";
import { internal } from "@app/lib/api";
import { authCookieHeader } from "@app/lib/api/cookies";
import type { AdminListOrgsResponse } from "@server/routers/org";
import type { AxiosResponse } from "axios";
import type { Metadata } from "next";
import { getTranslations } from "next-intl/server";
export interface OrganizationsPageProps {}
export const metadata: Metadata = {
title: "Organizations"
};
export const dynamic = "force-dynamic";
type OrganizationsPageProps = {
searchParams: Promise<Record<string, string>>;
};
export default async function OrganizationsPage(props: OrganizationsPageProps) {
const searchParams = new URLSearchParams(await props.searchParams);
let orgs: AdminListOrgsResponse["orgs"] = [];
let pagination: AdminListOrgsResponse["pagination"] = {
total: 0,
page: 1,
pageSize: 20
};
try {
const res = await internal.get<AxiosResponse<AdminListOrgsResponse>>(
`/admin/orgs?${searchParams.toString()}`,
await authCookieHeader()
);
const responseData = res.data.data;
orgs = responseData.orgs;
pagination = responseData.pagination;
} catch (e) {}
const t = await getTranslations();
const orgRows: OrgRow[] = orgs.map((org) => ({
orgId: org.orgId,
name: org.name,
subnet: org.subnet,
createdAt: org.createdAt,
userCount: org.userCount,
siteCount: org.siteCount,
resourceCount: org.resourceCount
}));
return (
<>
<SettingsSectionTitle
title={t("orgsManage")}
description={t("orgsDescription")}
/>
<OrgsTable
orgs={orgRows}
rowCount={pagination.total}
pagination={{
pageIndex: pagination.page - 1,
pageSize: pagination.pageSize
}}
/>
</>
);
}