import { IconBrandOpenai, IconClockHour4, IconKey, IconLoader2, IconPlayerStopFilled, } from "@tabler/icons-react" import { useTranslation } from "react-i18next" import type { OAuthProviderStatus } from "@/api/oauth" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { CredentialCard } from "./credential-card" interface OpenAICredentialCardProps { status?: OAuthProviderStatus activeAction: string token: string onTokenChange: (value: string) => void onStartBrowserOAuth: () => void onStartDeviceCode: () => void onStopLoading: () => void onSaveToken: () => void onAskLogout: () => void } export function OpenAICredentialCard({ status, activeAction, token, onTokenChange, onStartBrowserOAuth, onStartDeviceCode, onStopLoading, onSaveToken, onAskLogout, }: OpenAICredentialCardProps) { const { t } = useTranslation() const actionBusy = activeAction !== "" const browserLoading = activeAction === "openai:browser" const deviceLoading = activeAction === "openai:device" const oauthLoading = browserLoading || deviceLoading const tokenLoading = activeAction === "openai:token" return ( OpenAI } description={t("credentials.providers.openai.description")} status={status?.status ?? "not_logged_in"} authMethod={status?.auth_method} details={ status?.account_id ? (

{t("credentials.labels.account")}: {status.account_id}

) : null } actions={
{oauthLoading && !deviceLoading && ( )}
onTokenChange(e.target.value)} type="password" placeholder={t("credentials.fields.openaiToken")} /> {tokenLoading && ( )}
} footer={ status?.logged_in ? ( ) : null } /> ) }