import type { Dispatch, SetStateAction } from "react"; import { useTranslation } from "react-i18next"; import { copyToClipboard } from "@/lib/clipboard"; import { deleteApiKey } from "@/main-axios"; import type { ApiKey } from "@/main-axios"; import { Button } from "@/components/button"; import { Input } from "@/components/input"; import { Copy, Network, Plus, RefreshCw, Trash2 } from "lucide-react"; import { toast } from "sonner"; import { AccordionSection } from "./AdminSettingsShared"; import type { AdminUser } from "./AdminManagementSections"; type AdminApiKeysSectionProps = { open: boolean; onToggle: () => void; apiKeys: ApiKey[]; setApiKeys: Dispatch>; loadApiKeys: () => void; showCreateKey: boolean; setShowCreateKey: Dispatch>; createdKeyToken: string | null; setCreatedKeyToken: Dispatch>; newKeyName: string; setNewKeyName: Dispatch>; newKeyUserId: string; setNewKeyUserId: Dispatch>; newKeyExpiry: string; setNewKeyExpiry: Dispatch>; users: AdminUser[]; handleCreateApiKey: () => void; newKeyLoading: boolean; }; export function AdminApiKeysSection({ open, onToggle, apiKeys, setApiKeys, loadApiKeys, showCreateKey, setShowCreateKey, createdKeyToken, setCreatedKeyToken, newKeyName, setNewKeyName, newKeyUserId, setNewKeyUserId, newKeyExpiry, setNewKeyExpiry, users, handleCreateApiKey, newKeyLoading, }: AdminApiKeysSectionProps) { const { t } = useTranslation(); return ( } open={open} onToggle={onToggle} >
{t("admin.apiKeysCount", { count: apiKeys.length })}{" "} {t("admin.apiKeysDocsLink")}
{showCreateKey && (
{t("admin.newApiKey")} {createdKeyToken ? (
{t("admin.apiKeyCreatedWarning")}
{createdKeyToken}
) : ( <>
setNewKeyName(e.target.value)} className="text-xs" />
setNewKeyExpiry(e.target.value)} className="text-xs" />
)}
)} {apiKeys.map((key) => (
{key.name} {!key.isActive && ( {t("admin.revokedBadge")} )}
{t("admin.apiKeyUser")}: {key.username} {key.tokenPrefix}… {key.createdAt.split("T")[0]} ·{" "} {key.expiresAt ? key.expiresAt.split("T")[0] : t("admin.apiKeyNoExpiry")}
))}
); }