import React, { useState } from "react"; import { Anchor, Alert, Button, Group, Space, Text } from "@mantine/core"; import { IconInfoCircle } from "@tabler/icons-react"; import { Helmet } from "react-helmet-async"; import { Trans, useTranslation } from "react-i18next"; import SettingsTitle from "@/components/settings/settings-title"; import { getAppName, getAppUrl } from "@/lib/config"; import { ApiKeyTable } from "@/ee/api-key/components/api-key-table"; import { CreateApiKeyModal } from "@/ee/api-key/components/create-api-key-modal"; import { ApiKeyCreatedModal } from "@/ee/api-key/components/api-key-created-modal"; import { UpdateApiKeyModal } from "@/ee/api-key/components/update-api-key-modal"; import { RevokeApiKeyModal } from "@/ee/api-key/components/revoke-api-key-modal"; import Paginate from "@/components/common/paginate"; import { useCursorPaginate } from "@/hooks/use-cursor-paginate"; import { useGetApiKeysQuery } from "@/ee/api-key/queries/api-key-query.ts"; import { IApiKey } from "@/ee/api-key"; import { useAtom } from "jotai"; import { workspaceAtom } from "@/features/user/atoms/current-user-atom.ts"; import useUserRole from "@/hooks/use-user-role.tsx"; export default function UserApiKeys() { const { t } = useTranslation(); const { cursor, goNext, goPrev } = useCursorPaginate(); const [createModalOpened, setCreateModalOpened] = useState(false); const [createdApiKey, setCreatedApiKey] = useState(null); const [updateModalOpened, setUpdateModalOpened] = useState(false); const [revokeModalOpened, setRevokeModalOpened] = useState(false); const [selectedApiKey, setSelectedApiKey] = useState(null); const { data, isLoading } = useGetApiKeysQuery({ cursor }); const [workspace] = useAtom(workspaceAtom); const { isAdmin } = useUserRole(); const mcpEnabled = workspace?.settings?.ai?.mcp === true; const restrictToAdmins = workspace?.settings?.api?.restrictToAdmins === true; const canCreate = !restrictToAdmins || isAdmin; const handleCreateSuccess = (response: IApiKey) => { setCreatedApiKey(response); }; const handleUpdate = (apiKey: IApiKey) => { setSelectedApiKey(apiKey); setUpdateModalOpened(true); }; const handleRevoke = (apiKey: IApiKey) => { setSelectedApiKey(apiKey); setRevokeModalOpened(true); }; return ( <> {t("API keys")} - {getAppName()} , }} /> {mcpEnabled && canCreate && ( }> {t( "Your workspace has MCP enabled. Use your API key to connect AI assistants.", )}{" "} {t("Learn more")} {t("MCP server URL:")}{" "} {`${getAppUrl()}/mcp`} )} {canCreate ? ( ) : restrictToAdmins ? ( }> {t("API key creation is restricted to admins by your workspace administrator.")} ) : null} {data?.items.length > 0 && ( goNext(data?.meta?.nextCursor)} onPrev={goPrev} /> )} setCreateModalOpened(false)} onSuccess={handleCreateSuccess} /> setCreatedApiKey(null)} apiKey={createdApiKey} /> { setUpdateModalOpened(false); setSelectedApiKey(null); }} apiKey={selectedApiKey} /> { setRevokeModalOpened(false); setSelectedApiKey(null); }} apiKey={selectedApiKey} /> ); }