import { useState, useEffect } from 'react'; import { Modal } from '../ui/Modal'; import { useUIStore } from '../../stores/uiStore'; import { useAuthStore } from '../../stores/authStore'; import { AccountPanel } from './settingsPanels/AccountPanel'; import { VoicePanel } from './settingsPanels/VoicePanel'; import { PrivacyPanel } from './settingsPanels/PrivacyPanel'; import { ConnectionsPanel } from './settingsPanels/ConnectionsPanel'; import { InstancePanel } from './settingsPanels/InstancePanel'; type SettingsTab = 'account' | 'voice' | 'privacy' | 'connections' | 'instance'; export function UserSettingsModal() { const activeModal = useUIStore((s) => s.activeModal); const modalData = useUIStore((s) => s.modalData); const closeModal = useUIStore((s) => s.closeModal); const isAdmin = useAuthStore((s) => s.user?.isAdmin); const logout = useAuthStore((s) => s.logout); const [tab, setTab] = useState('account'); const isOpen = activeModal === 'userSettings'; // Deep-linking: read modalData.tab when opening useEffect(() => { if (isOpen) { const requested = modalData.tab as SettingsTab | undefined; if (requested && ['account', 'voice', 'privacy', 'connections', 'instance'].includes(requested)) { // Only allow instance tab for admins if (requested === 'instance' && !isAdmin) { setTab('account'); } else { setTab(requested); } } else { setTab('account'); } } }, [isOpen, modalData.tab, isAdmin]); const handleLogout = () => { logout(); closeModal(); }; const tabClass = (t: SettingsTab) => `w-full text-left px-2.5 py-1.5 rounded text-sm transition-colors ${ tab === t ? 'bg-interactive-selected text-txt-primary' : 'text-txt-tertiary hover:text-txt-secondary hover:bg-interactive-hover' }`; return (
{/* Sidebar */}
{isAdmin && ( )}
{/* Content */}
{tab === 'account' && } {tab === 'voice' && } {tab === 'privacy' && } {tab === 'connections' && } {tab === 'instance' && isAdmin && }
); }