import React, { useState } from 'react'; import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, DialogDescription, } from './ui/dialog'; import { Button } from './ui/button'; import { Input } from './ui/input'; import { Label } from './ui/label'; import { Alert, AlertDescription } from './ui/alert'; import { useSaveApiKey, type LLMProvider } from './hooks/useLLM'; export type ApiKeyModalProps = { open: boolean; onOpenChange: (open: boolean) => void; provider: LLMProvider; primaryEnvVar: string; onSaved: (meta: { provider: string; envVar: string }) => void; }; export function ApiKeyModal({ open, onOpenChange, provider, primaryEnvVar, onSaved, }: ApiKeyModalProps) { const [apiKey, setApiKey] = useState(''); const [error, setError] = useState(null); const saveApiKeyMutation = useSaveApiKey(); const submit = () => { if (!apiKey.trim()) { setError('API key is required'); return; } setError(null); saveApiKeyMutation.mutate( { provider, apiKey }, { onSuccess: (data) => { onSaved({ provider: data.provider, envVar: data.envVar }); onOpenChange(false); setApiKey(''); setError(null); }, onError: (err: Error) => { setError(err.message || 'Failed to save API key'); }, } ); }; return ( Set {provider} API Key This key will be stored in your .env (env var {primaryEnvVar}). It is not shared with the client. {error && ( {error} )}
setApiKey(e.target.value)} placeholder={`Enter ${provider} API key`} />
); }