mirror of
https://github.com/fosrl/pangolin.git
synced 2026-07-08 23:24:54 +02:00
♻️ refactor private resource page
This commit is contained in:
@@ -1,18 +1,15 @@
|
|||||||
|
import PrivateResourcesBanner from "@app/components/PrivateResourcesBanner";
|
||||||
import type { InternalResourceRow } from "@app/components/PrivateResourcesTable";
|
import type { InternalResourceRow } from "@app/components/PrivateResourcesTable";
|
||||||
import PrivateResourcesTable from "@app/components/PrivateResourcesTable";
|
import PrivateResourcesTable from "@app/components/PrivateResourcesTable";
|
||||||
import SettingsSectionTitle from "@app/components/SettingsSectionTitle";
|
import SettingsSectionTitle from "@app/components/SettingsSectionTitle";
|
||||||
import PrivateResourcesBanner from "@app/components/PrivateResourcesBanner";
|
|
||||||
import { internal } from "@app/lib/api";
|
import { internal } from "@app/lib/api";
|
||||||
import { authCookieHeader } from "@app/lib/api/cookies";
|
import { authCookieHeader } from "@app/lib/api/cookies";
|
||||||
import { getCachedOrg } from "@app/lib/api/getCachedOrg";
|
import { getCachedOrg } from "@app/lib/api/getCachedOrg";
|
||||||
import OrgProvider from "@app/providers/OrgProvider";
|
import OrgProvider from "@app/providers/OrgProvider";
|
||||||
import type { ListResourcesResponse } from "@server/routers/resource";
|
|
||||||
import { GetSiteResponse } from "@server/routers/site/getSite";
|
|
||||||
import type { ListAllSiteResourcesByOrgResponse } from "@server/routers/siteResource";
|
import type { ListAllSiteResourcesByOrgResponse } from "@server/routers/siteResource";
|
||||||
import type ResponseT from "@server/types/Response";
|
|
||||||
import type { AxiosResponse } from "axios";
|
import type { AxiosResponse } from "axios";
|
||||||
import { getTranslations } from "next-intl/server";
|
|
||||||
import type { Metadata } from "next";
|
import type { Metadata } from "next";
|
||||||
|
import { getTranslations } from "next-intl/server";
|
||||||
import { redirect } from "next/navigation";
|
import { redirect } from "next/navigation";
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
@@ -24,13 +21,6 @@ export interface ClientResourcesPageProps {
|
|||||||
searchParams: Promise<Record<string, string>>;
|
searchParams: Promise<Record<string, string>>;
|
||||||
}
|
}
|
||||||
|
|
||||||
function parsePositiveInt(s: string | undefined): number | undefined {
|
|
||||||
if (!s) return undefined;
|
|
||||||
const n = Number(s);
|
|
||||||
if (!Number.isInteger(n) || n <= 0) return undefined;
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
export default async function ClientResourcesPage(
|
export default async function ClientResourcesPage(
|
||||||
props: ClientResourcesPageProps
|
props: ClientResourcesPageProps
|
||||||
) {
|
) {
|
||||||
@@ -39,7 +29,7 @@ export default async function ClientResourcesPage(
|
|||||||
const searchParams = new URLSearchParams(await props.searchParams);
|
const searchParams = new URLSearchParams(await props.searchParams);
|
||||||
|
|
||||||
let siteResources: ListAllSiteResourcesByOrgResponse["siteResources"] = [];
|
let siteResources: ListAllSiteResourcesByOrgResponse["siteResources"] = [];
|
||||||
let pagination: ListResourcesResponse["pagination"] = {
|
let pagination: ListAllSiteResourcesByOrgResponse["pagination"] = {
|
||||||
total: 0,
|
total: 0,
|
||||||
page: 1,
|
page: 1,
|
||||||
pageSize: 20
|
pageSize: 20
|
||||||
@@ -56,34 +46,6 @@ export default async function ClientResourcesPage(
|
|||||||
pagination = responseData.pagination;
|
pagination = responseData.pagination;
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
|
|
||||||
const siteIdParam = parsePositiveInt(
|
|
||||||
searchParams.get("siteId") ?? undefined
|
|
||||||
);
|
|
||||||
|
|
||||||
let initialFilterSite: {
|
|
||||||
siteId: number;
|
|
||||||
name: string;
|
|
||||||
type: string;
|
|
||||||
} | null = null;
|
|
||||||
if (siteIdParam) {
|
|
||||||
try {
|
|
||||||
const siteRes = await internal.get(
|
|
||||||
`/site/${siteIdParam}`,
|
|
||||||
await authCookieHeader()
|
|
||||||
);
|
|
||||||
const s = (siteRes.data as ResponseT<GetSiteResponse>).data;
|
|
||||||
if (s && s.orgId === params.orgId) {
|
|
||||||
initialFilterSite = {
|
|
||||||
siteId: s.siteId,
|
|
||||||
name: s.name,
|
|
||||||
type: s.type
|
|
||||||
};
|
|
||||||
}
|
|
||||||
} catch {
|
|
||||||
// leave null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let org = null;
|
let org = null;
|
||||||
try {
|
try {
|
||||||
const res = await getCachedOrg(params.orgId);
|
const res = await getCachedOrg(params.orgId);
|
||||||
@@ -153,7 +115,6 @@ export default async function ClientResourcesPage(
|
|||||||
pageIndex: pagination.page - 1,
|
pageIndex: pagination.page - 1,
|
||||||
pageSize: pagination.pageSize
|
pageSize: pagination.pageSize
|
||||||
}}
|
}}
|
||||||
initialFilterSite={initialFilterSite}
|
|
||||||
/>
|
/>
|
||||||
</OrgProvider>
|
</OrgProvider>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -117,15 +117,13 @@ type ClientResourcesTableProps = {
|
|||||||
orgId: string;
|
orgId: string;
|
||||||
pagination: PaginationState;
|
pagination: PaginationState;
|
||||||
rowCount: number;
|
rowCount: number;
|
||||||
initialFilterSite?: Selectedsite | null;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export default function PrivateResourcesTable({
|
export default function PrivateResourcesTable({
|
||||||
internalResources,
|
internalResources,
|
||||||
orgId,
|
orgId,
|
||||||
pagination,
|
pagination,
|
||||||
rowCount,
|
rowCount
|
||||||
initialFilterSite = null
|
|
||||||
}: ClientResourcesTableProps) {
|
}: ClientResourcesTableProps) {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const {
|
const {
|
||||||
@@ -142,7 +140,7 @@ export default function PrivateResourcesTable({
|
|||||||
const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);
|
const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);
|
||||||
|
|
||||||
const [selectedInternalResource, setSelectedInternalResource] =
|
const [selectedInternalResource, setSelectedInternalResource] =
|
||||||
useState<InternalResourceRow | null>();
|
useState<InternalResourceRow | null>(null);
|
||||||
const [isEditDialogOpen, setIsEditDialogOpen] = useState(false);
|
const [isEditDialogOpen, setIsEditDialogOpen] = useState(false);
|
||||||
const [editingResource, setEditingResource] =
|
const [editingResource, setEditingResource] =
|
||||||
useState<InternalResourceRow | null>();
|
useState<InternalResourceRow | null>();
|
||||||
|
|||||||
Reference in New Issue
Block a user