'use client'; import { useEffect } from 'react'; import { useRouter } from 'next/navigation'; import Link from 'next/link'; import { usePathname } from 'next/navigation'; import { useLanguage } from '@/context/LanguageContext'; import { useAuth } from '@/context/AuthContext'; import LanguageToggle from '@/components/LanguageToggle'; import Button from '@/components/ui/Button'; import { HomeIcon, CalendarIcon, TicketIcon, UsersIcon, CreditCardIcon, EnvelopeIcon, InboxIcon, PhotoIcon, Cog6ToothIcon, ArrowLeftOnRectangleIcon, Bars3Icon, XMarkIcon, BanknotesIcon, QrCodeIcon, DocumentTextIcon, } from '@heroicons/react/24/outline'; import clsx from 'clsx'; import { useState } from 'react'; export default function AdminLayout({ children, }: { children: React.ReactNode; }) { const router = useRouter(); const pathname = usePathname(); const { t, locale } = useLanguage(); const { user, isAdmin, isLoading, logout } = useAuth(); const [sidebarOpen, setSidebarOpen] = useState(false); useEffect(() => { if (!isLoading && (!user || !isAdmin)) { router.push('/login'); } }, [user, isAdmin, isLoading, router]); if (isLoading) { return (
); } if (!user || !isAdmin) { return null; } const navigation = [ { name: t('admin.nav.dashboard'), href: '/admin', icon: HomeIcon }, { name: t('admin.nav.events'), href: '/admin/events', icon: CalendarIcon }, { name: t('admin.nav.bookings'), href: '/admin/bookings', icon: TicketIcon }, { name: locale === 'es' ? 'Escáner' : 'Scanner', href: '/admin/scanner', icon: QrCodeIcon }, { name: t('admin.nav.users'), href: '/admin/users', icon: UsersIcon }, { name: t('admin.nav.payments'), href: '/admin/payments', icon: CreditCardIcon }, { name: locale === 'es' ? 'Opciones de Pago' : 'Payment Options', href: '/admin/payment-options', icon: BanknotesIcon }, { name: t('admin.nav.contacts'), href: '/admin/contacts', icon: EnvelopeIcon }, { name: t('admin.nav.emails'), href: '/admin/emails', icon: InboxIcon }, { name: t('admin.nav.gallery'), href: '/admin/gallery', icon: PhotoIcon }, { name: locale === 'es' ? 'Páginas Legales' : 'Legal Pages', href: '/admin/legal-pages', icon: DocumentTextIcon }, { name: locale === 'es' ? 'Configuración' : 'Settings', href: '/admin/settings', icon: Cog6ToothIcon }, ]; const handleLogout = () => { logout(); router.push('/'); }; return (
{/* Mobile sidebar backdrop */} {sidebarOpen && (
setSidebarOpen(false)} /> )} {/* Sidebar */} {/* Main content */}
{/* Top bar */}
{/* Page content */}
{children}
); }