import { useState } from 'react'; import { Dialog, DialogContent, DialogTitle, DialogDescription } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Checkbox } from '@/components/ui/checkbox'; import { Plus } from 'lucide-react'; import { useI18n } from '@/lib/hooks/use-i18n'; import { cn } from '@/lib/utils'; export interface NewProviderData { name: string; type: 'openai' | 'anthropic' | 'google'; baseUrl: string; icon: string; requiresApiKey: boolean; } interface AddProviderDialogProps { open: boolean; onOpenChange: (open: boolean) => void; onAdd: (provider: NewProviderData) => void; } export function AddProviderDialog({ open, onOpenChange, onAdd }: AddProviderDialogProps) { const { t } = useI18n(); // Internal state const [name, setName] = useState(''); const [type, setType] = useState<'openai' | 'anthropic' | 'google'>('openai'); const [baseUrl, setBaseUrl] = useState(''); const [icon, setIcon] = useState(''); const [requiresApiKey, setRequiresApiKey] = useState(true); // Reset form when dialog closes (derived state pattern) const [prevOpen, setPrevOpen] = useState(open); if (open !== prevOpen) { setPrevOpen(open); if (!open) { setName(''); setType('openai'); setBaseUrl(''); setIcon(''); setRequiresApiKey(true); } } const handleClose = () => { onOpenChange(false); }; const handleAdd = () => { onAdd({ name, type, baseUrl, icon, requiresApiKey, }); }; return ( {t('settings.addProviderDialog')} {t('settings.addProviderDescription')}

{t('settings.addProviderDialog')}

{/* Provider Name */}
setName(e.target.value)} />
{/* API Mode */}
{/* Default Base URL */}
setBaseUrl(e.target.value)} />
{/* Icon URL */}
setIcon(e.target.value)} />
{/* Requires API Key */}
setRequiresApiKey(checked as boolean)} />
{/* Footer */}
); }