import { Dialog, DialogPanel } from '@headlessui/react'; import { BrainCog, ChevronLeft, Search, Settings } from 'lucide-react'; import General from './Sections/General'; import { motion } from 'framer-motion'; import { useEffect, useState } from 'react'; import { toast } from 'sonner'; import Loader from '../ui/Loader'; import { cn } from '@/lib/utils'; import Models from './Sections/Models/Section'; import SearchSection from './Sections/Search'; const sections = [ { name: 'General', description: 'Adjust common settings.', icon: Settings, component: General, dataAdd: 'general', }, { name: 'Models', description: 'Configure model settings.', icon: BrainCog, component: Models, dataAdd: 'modelProviders', }, { name: 'Search', description: 'Manage search settings.', icon: Search, component: SearchSection, dataAdd: 'search', }, ]; const SettingsDialogue = ({ isOpen, setIsOpen, }: { isOpen: boolean; setIsOpen: (active: boolean) => void; }) => { const [isLoading, setIsLoading] = useState(true); const [config, setConfig] = useState(null); const [activeSection, setActiveSection] = useState(sections[0]); useEffect(() => { if (isOpen) { const fetchConfig = async () => { try { const res = await fetch('/api/config', { method: 'GET', headers: { 'Content-Type': 'application/json', }, }); const data = await res.json(); setConfig(data); } catch (error) { console.error('Error fetching config:', error); toast.error('Failed to load configuration.'); } finally { setIsLoading(false); } }; fetchConfig(); } }, [isOpen]); return ( setIsOpen(false)} className="relative z-50" > {isLoading ? (
) : (
{sections.map((section) => ( ))}
{activeSection.component && (

{activeSection.name}

{activeSection.description}

)}
)}
); }; export default SettingsDialogue;