'use client'; import { useState, useEffect, useRef } from 'react'; import { useUserSettings } from '@/hooks/useLocalStorage'; import { defaultPreferences, type UserPreferences, type SettingsTabId } from './settings/types'; import SettingsTabs from './settings/SettingsTabs'; import GeneralSettings from './settings/GeneralSettings'; import NotificationSettings from './settings/NotificationSettings'; import ExportSettings from './settings/ExportSettings'; import DisplaySettings from './settings/DisplaySettings'; import AIAccessSettings from './settings/AIAccessSettings'; import AdvancedSettings from './settings/AdvancedSettings'; interface SettingsModalProps { isOpen: boolean; onClose: () => void; } export default function SettingsModal({ isOpen, onClose }: SettingsModalProps) { const { setTheme, setLanguage } = useUserSettings(); const [preferences, setPreferences] = useState(defaultPreferences); const [activeTab, setActiveTab] = useState('general'); const modalRef = useRef(null); const handleChange = ( updater: Partial | ((prev: UserPreferences) => UserPreferences) ) => { setPreferences((prev) => typeof updater === 'function' ? updater(prev) : { ...prev, ...updater } ); }; useEffect(() => { if (isOpen) { const saved = localStorage.getItem('userPreferences'); if (saved) { try { const parsed = JSON.parse(saved); setPreferences({ ...defaultPreferences, ...parsed }); } catch (error) { console.error('Ошибка загрузки настроек:', error); } } } }, [isOpen]); const handleSave = () => { localStorage.setItem('userPreferences', JSON.stringify(preferences)); setTheme(preferences.theme); setLanguage(preferences.language); window.dispatchEvent(new CustomEvent('settingsChanged', { detail: preferences })); alert('Настройки сохранены'); onClose(); }; const handleReset = () => { if (confirm('Вы уверены, что хотите сбросить все настройки к значениям по умолчанию?')) { setPreferences(defaultPreferences); localStorage.removeItem('userPreferences'); setTheme('light'); setLanguage('ru'); alert('Настройки сброшены'); } }; useEffect(() => { if (isOpen) { document.body.style.overflow = 'hidden'; const handleEscape = (e: KeyboardEvent) => { if (e.key === 'Escape') onClose(); }; document.addEventListener('keydown', handleEscape); return () => { document.body.style.overflow = ''; document.removeEventListener('keydown', handleEscape); }; } return undefined; }, [isOpen, onClose]); if (!isOpen) { return null; } return (
{ if (e.target === e.currentTarget) onClose(); }} >
e.stopPropagation()} >

Настройки

{activeTab === 'general' && ( )} {activeTab === 'notifications' && ( )} {activeTab === 'export' && ( )} {activeTab === 'display' && ( )} {activeTab === 'ai-access' && } {activeTab === 'advanced' && ( )}
); }