show site resources

This commit is contained in:
miloschwartz
2026-04-25 15:07:59 -07:00
parent ecacb26445
commit 477712b73c
13 changed files with 885 additions and 150 deletions

View File

@@ -69,6 +69,7 @@ export default async function PendingSitesPage(props: PendingSitesPageProps) {
address: site.address?.split("/")[0],
mbIn: formatSize(site.megabytesIn || 0, site.type),
mbOut: formatSize(site.megabytesOut || 0, site.type),
resourceCount: Number(site.resourceCount ?? 0),
orgId: params.orgId,
type: site.type as any,
online: site.online,

View File

@@ -42,6 +42,10 @@ export default async function SettingsLayout(props: SettingsLayoutProps) {
title: t("general"),
href: `/${params.orgId}/settings/sites/${params.niceId}/general`
},
{
title: t("siteResourcesTab"),
href: `/${params.orgId}/settings/sites/${params.niceId}/resources`
},
...(site.type !== "local"
? [
{

View File

@@ -0,0 +1,64 @@
import SiteResourcesOverview from "@app/components/SiteResourcesOverview";
import { internal } from "@app/lib/api";
import { authCookieHeader } from "@app/lib/api/cookies";
import type { ListResourcesResponse } from "@server/routers/resource";
import type { GetSiteResponse } from "@server/routers/site";
import type { ListAllSiteResourcesByOrgResponse } from "@server/routers/siteResource";
import type { AxiosResponse } from "axios";
type SiteResourcesPageProps = {
params: Promise<{ orgId: string; niceId: string }>;
};
export default async function SiteResourcesPage(props: SiteResourcesPageProps) {
const { orgId, niceId } = await props.params;
const siteRes = await internal.get<AxiosResponse<GetSiteResponse>>(
`/org/${orgId}/site/${niceId}`,
await authCookieHeader()
);
const site = siteRes.data.data;
const baseSearch = new URLSearchParams({
page: "1",
pageSize: "5",
siteId: String(site.siteId)
});
let initialPublicData: ListResourcesResponse | null = null;
let initialPrivateData: ListAllSiteResourcesByOrgResponse | null = null;
let initialPublicForbidden = false;
let initialPrivateForbidden = false;
try {
const res = await internal.get<AxiosResponse<ListResourcesResponse>>(
`/org/${orgId}/resources?${baseSearch.toString()}`,
await authCookieHeader()
);
initialPublicData = res.data.data;
} catch (e: any) {
initialPublicForbidden = e?.response?.status === 403;
}
try {
const res = await internal.get<
AxiosResponse<ListAllSiteResourcesByOrgResponse>
>(
`/org/${orgId}/site-resources?${baseSearch.toString()}`,
await authCookieHeader()
);
initialPrivateData = res.data.data;
} catch (e: any) {
initialPrivateForbidden = e?.response?.status === 403;
}
return (
<SiteResourcesOverview
siteId={site.siteId}
initialPublicData={initialPublicData}
initialPrivateData={initialPrivateData}
initialPublicForbidden={initialPublicForbidden}
initialPrivateForbidden={initialPrivateForbidden}
/>
);
}

View File

@@ -64,6 +64,7 @@ export default async function SitesPage(props: SitesPageProps) {
address: site.address?.split("/")[0],
mbIn: formatSize(site.megabytesIn || 0, site.type),
mbOut: formatSize(site.megabytesOut || 0, site.type),
resourceCount: Number(site.resourceCount ?? 0),
orgId: params.orgId,
type: site.type as any,
online: site.online,