Files
HiveGrid-Wireframes/hivegrid-cloud/apps/web/app/routes/admin/api/keys.tsx
T

58 lines
1.9 KiB
TypeScript

import { LoaderFunctionArgs, useLoaderData } from "react-router";
import { Outlet } from "react-router";
import { useTranslation } from "react-i18next";
import ApiKeysTable from "~/components/core/apiKeys/ApiKeysTable";
import EditPageLayout from "~/components/ui/layouts/EditPageLayout";
import { useAdminData } from "~/utils/data/useAdminData";
import { RedactedApiKeyWithDetails, getAllApiKeys } from "~/utils/db/apiKeys.db.server";
import { verifyUserHasPermission } from "~/utils/helpers/.server/PermissionsService";
import { getUserHasPermission } from "~/utils/helpers/PermissionsHelper";
import { adminPath } from "~/utils/app/CanonicalUrlUtils";
type LoaderData = {
apiKeys: RedactedApiKeyWithDetails[];
};
export const loader = async ({ request }: LoaderFunctionArgs) => {
await verifyUserHasPermission(request, "admin.apiKeys.view");
const apiKeys = await getAllApiKeys();
const data: LoaderData = {
apiKeys,
};
return data;
};
export default function AdminApiKeysRoute() {
const { t } = useTranslation();
const data = useLoaderData<LoaderData>();
const adminData = useAdminData();
return (
<>
<EditPageLayout
title={t("models.apiKey.plural")}
tabs={[
{
name: t("shared.overview"),
routePath: adminPath("api", { mode: "host-aware" }),
},
{
name: t("models.apiCall.plural"),
routePath: adminPath("api/logs", { mode: "host-aware" }),
},
{
name: t("models.apiKey.plural"),
routePath: adminPath("api/keys", { mode: "host-aware" }),
},
]}
>
<ApiKeysTable
canCreate={getUserHasPermission(adminData, "admin.apiKeys.create")}
entities={adminData.entities}
items={data.apiKeys}
withTenant={true}
/>
<Outlet />
</EditPageLayout>
</>
);
}