import { useEffect, useState } from 'react'; import { NavLink, Navigate, Outlet, useNavigate } from 'react-router-dom'; import { LayoutDashboard, MessageSquare, Tag, Terminal, Settings as SettingsIcon, LogOut, Loader2, Briefcase, HelpCircle, Bot, Users, MapPin, Newspaper } from 'lucide-react'; import { api } from '../lib/api.js'; function cx(...args) { return args.filter(Boolean).join(' '); } const NAV = [ { to: '/admin/dashboard', label: 'Дашборд', icon: LayoutDashboard }, { to: '/admin/reviews', label: 'Отзывы', icon: MessageSquare }, { to: '/admin/customers', label: 'Клиенты', icon: Users }, { to: '/admin/services', label: 'Прайс-лист', icon: Terminal }, { to: '/admin/promotions', label: 'Акции', icon: Tag }, { to: '/admin/cases', label: 'Кейсы', icon: Briefcase }, { to: '/admin/faqs', label: 'FAQ', icon: HelpCircle }, { to: '/admin/blog', label: 'Блог', icon: Newspaper }, { to: '/admin/contact', label: 'Контакты', icon: MapPin }, { to: '/admin/ai', label: 'ИИ-ассистент', icon: Bot }, { to: '/admin/settings', label: 'Настройки', icon: SettingsIcon }, ]; export default function AdminLayout() { const navigate = useNavigate(); const [status, setStatus] = useState('checking'); // checking | authed | anon useEffect(() => { let cancelled = false; api .me() .then(() => !cancelled && setStatus('authed')) .catch(() => !cancelled && setStatus('anon')); return () => { cancelled = true; }; }, []); async function handleLogout() { try { await api.logout(); } finally { navigate('/admin'); } } if (status === 'checking') { return (
); } if (status === 'anon') { return ; } return (
); }