import { ReactNode, useState, useEffect } from 'react'; import { Link, useLocation } from 'react-router-dom'; import { useAuthStore } from '../../store/authStore'; import { useSettingsStore } from '../../store/settingsStore'; import { Button } from '../ui'; import { Menu, X, Sun, Moon, Settings, LogOut, MessageSquare, User, ChevronDown, Palette } from 'lucide-react'; interface LayoutProps { children: ReactNode; showSidebar?: boolean; sidebar?: ReactNode; className?: string; } export function Layout({ children, showSidebar = false, sidebar, className = '' }: LayoutProps) { const location = useLocation(); const { user, logout } = useAuthStore(); const { theme, toggleTheme, availableThemes, setThemeById } = useSettingsStore(); const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); const [isUserMenuOpen, setIsUserMenuOpen] = useState(false); const [isThemeMenuOpen, setIsThemeMenuOpen] = useState(false); // Close mobile menu on route change useEffect(() => { setIsMobileMenuOpen(false); }, [location.pathname]); // Close menus on outside click useEffect(() => { const handleClickOutside = () => { setIsUserMenuOpen(false); setIsThemeMenuOpen(false); }; if (isUserMenuOpen || isThemeMenuOpen) { document.addEventListener('click', handleClickOutside); return () => document.removeEventListener('click', handleClickOutside); } }, [isUserMenuOpen, isThemeMenuOpen]); // Prevent scroll when mobile menu is open useEffect(() => { if (isMobileMenuOpen) { document.body.style.overflow = 'hidden'; } else { document.body.style.overflow = ''; } return () => { document.body.style.overflow = ''; }; }, [isMobileMenuOpen]); const handleLogout = () => { logout(); setIsUserMenuOpen(false); }; const handleThemeSelect = (themeId: string) => { setThemeById(themeId); setIsThemeMenuOpen(false); }; return (
{user.name}
{user.email}