import { useEffect, useMemo, useState } from 'react'; import { useIsSettingsModalOpen, useSetIsSettingsModalOpen } from '../../contexts/UIContext'; import { useAuth } from '../../contexts/AuthContext'; import { IS_WORDPRESS } from '../../constants'; import { useAppRoute } from '../../hooks/useAppRoute'; import { SettingsSection } from '../../utils/appRoute'; import { ModalShell, StatusBadge } from '../ui'; import { useCurrentConversationId } from '../../contexts/ChatContext'; import AccountSettingsSection from './settings/AccountSettingsSection'; import AppearanceSettingsSection from './settings/AppearanceSettingsSection'; import AssistantSettingsSection from './settings/AssistantSettingsSection'; import BillingSettingsSection from './settings/BillingSettingsSection'; import SettingsSectionNav from './settings/SettingsSectionNav'; import { SECTION_BLURBS, SECTION_LABELS, visibleSettingsSections, } from './settings/settingsConfig'; import type { SettingsMessage } from './settings/types'; export default function SettingsModal() { const isSettingsModalOpen = useIsSettingsModalOpen(); const setIsSettingsModalOpen = useSetIsSettingsModalOpen(); const { route, openSettingsRoute, setRoute } = useAppRoute(); const requestedSection = route.name === 'settings' ? route.section : 'account'; const currentConversationId = useCurrentConversationId(); const { isLoggedIn } = useAuth(); const [message, setMessage] = useState(null); const sections = useMemo(() => visibleSettingsSections(isLoggedIn), [isLoggedIn]); const activeSection: SettingsSection = sections.includes(requestedSection) ? requestedSection : (sections[0] ?? 'appearance'); useEffect(() => { if (!isSettingsModalOpen) { setMessage(null); } }, [isSettingsModalOpen]); const close = () => { setIsSettingsModalOpen(false); setRoute( currentConversationId ? { name: 'conversation', conversationId: currentConversationId } : { name: 'home' }, ); }; const renderSection = () => { if (activeSection === 'appearance') return ; if (activeSection === 'assistant' && IS_WORDPRESS) return ; if (activeSection === 'billing') return ; return ( ); }; return (

{SECTION_LABELS[activeSection]}

{SECTION_BLURBS[activeSection]}

{message && {message.text}}
{renderSection()}
); }