import { Dialog, DialogPanel } from '@headlessui/react'; import { Loader2, Pencil } from 'lucide-react'; import { useEffect, useState } from 'react'; import { AnimatePresence, motion } from 'framer-motion'; import { ConfigModelProvider, StringUIConfigField, UIConfigField, } from '@/lib/config/types'; import { toast } from 'sonner'; const UpdateProvider = ({ modelProvider, fields, setProviders, }: { fields: UIConfigField[]; modelProvider: ConfigModelProvider; setProviders: React.Dispatch>; }) => { const [open, setOpen] = useState(false); const [config, setConfig] = useState>({}); const [name, setName] = useState(modelProvider.name); const [loading, setLoading] = useState(false); useEffect(() => { const config: Record = { name: modelProvider.name, }; fields.forEach((field) => { config[field.key] = modelProvider.config[field.key] || field.default || ''; }); setConfig(config); }, [fields]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); try { const res = await fetch(`/api/providers/${modelProvider.id}`, { method: 'PATCH', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ name: name, config: config, }), }); if (!res.ok) { throw new Error('Failed to update provider'); } const data: ConfigModelProvider = (await res.json()).provider; setProviders((prev) => { return prev.map((p) => { if (p.id === modelProvider.id) { return data; } return p; }); }); toast.success('Provider updated successfully.'); } catch (error) { console.error('Error updating provider:', error); toast.error('Failed to update provider.'); } finally { setLoading(false); setOpen(false); } }; return ( <> {open && ( setOpen(false)} className="relative z-[60]" >

Update provider

setName(event.target.value)} className="w-full rounded-lg border border-light-200 dark:border-dark-200 bg-light-primary dark:bg-dark-primary px-4 py-3 pr-10 text-sm text-black/80 dark:text-white/80 placeholder:text-black/40 dark:placeholder:text-white/40 focus-visible:outline-none focus-visible:border-light-300 dark:focus-visible:border-dark-300 transition-colors disabled:cursor-not-allowed disabled:opacity-60" placeholder={'Provider Name'} type="text" required={true} />
{fields.map((field: UIConfigField) => (
setConfig((prev) => ({ ...prev, [field.key]: event.target.value, })) } className="w-full rounded-lg border border-light-200 dark:border-dark-200 bg-light-primary dark:bg-dark-primary px-4 py-3 pr-10 text-sm text-black/80 dark:text-white/80 placeholder:text-black/40 dark:placeholder:text-white/40 focus-visible:outline-none focus-visible:border-light-300 dark:focus-visible:border-dark-300 transition-colors disabled:cursor-not-allowed disabled:opacity-60" placeholder={ (field as StringUIConfigField).placeholder } type="text" required={field.required} />
))}
)}
); }; export default UpdateProvider;