import React, { useState } from 'react'; import { Outlet, Link, useLocation } from 'react-router-dom'; import { useAuth } from '@/contexts/AuthContext'; import { useLanguage } from '@/contexts/LanguageContext'; import DashboardStyles from '@/components/layouts/DashboardStyles'; import CurrencySelector from '@/components/CurrencySelector'; import LanguageSelector from '@/components/LanguageSelector'; import { Home, Plus, Wallet, List, MessageSquare, Star, BookOpen, Heart, FileText, User, Users, Settings, LogOut, Search, Bell, Menu, Sun, Moon, Maximize, CreditCard, BarChart3, MapPin, DollarSign, AlertTriangle, RefreshCw, Navigation, Car, Target, Zap, Eye, Megaphone, ChevronDown, ChevronRight, Hotel, UtensilsCrossed, Brain, DoorOpen, BellRing, Key, Receipt, ChefHat, Grid3x3, Package, Globe, Compass, Map, Shield, Radio, Sparkles, Leaf, Store, Server, ShieldAlert, UserCircle } from 'lucide-react'; const DashboardLayout = ({ children }: { children: React.ReactNode }) => { const { user, logout } = useAuth(); const { t } = useLanguage(); const location = useLocation(); const [sidebarCollapsed, setSidebarCollapsed] = useState(false); const [expandedItems, setExpandedItems] = useState>({}); const currentTab = new URLSearchParams(location.search).get('tab') || 'overview'; const toggleExpanded = (itemTab: string) => { setExpandedItems(prev => ({ ...prev, [itemTab]: !prev[itemTab] })); }; const menuItems = [ { icon: Home, label: t('dashboard'), path: '/dashboard' }, { icon: Settings, label: 'Admin Panel', path: '/dashboard/admin', subItems: [ { icon: BarChart3, label: 'Resumen General', path: '/dashboard/admin?tab=overview' }, { icon: Users, label: 'Usuarios', path: '/dashboard/admin?tab=users' }, { icon: MapPin, label: 'Proveedores', path: '/dashboard/admin?tab=services' }, { icon: DollarSign, label: 'Financiero', path: '/dashboard/admin?tab=financial' }, { icon: FileText, label: 'Contenido', path: '/dashboard/admin?tab=content', subItems: [ { icon: Globe, label: 'Destinos', path: '/dashboard/admin?tab=content-destinations' }, { icon: MapPin, label: 'Lugares', path: '/dashboard/admin?tab=content-places' }, { icon: BookOpen, label: 'Guías', path: '/dashboard/admin?tab=content-guides' }, { icon: Car, label: 'Taxis', path: '/dashboard/admin?tab=content-taxis' }, { icon: Navigation, label: 'Geolocalización', path: '/dashboard/admin?tab=content-geolocation' }, { icon: Megaphone, label: 'Promocional', path: '/dashboard/admin?tab=content-promotional' }, { icon: Sparkles, label: 'AI Guías', path: '/dashboard/admin?tab=content-ai-guides' }, { icon: Eye, label: 'AR Content', path: '/dashboard/admin?tab=content-ar' } ] }, { icon: Map, label: 'Geolocalización', path: '/dashboard/admin?tab=geofences', subItems: [ { icon: Target, label: 'Geofences', path: '/dashboard/admin?tab=geofences' }, { icon: BarChart3, label: 'Analytics', path: '/dashboard/admin?tab=analytics' }, { icon: Zap, label: 'Testing', path: '/dashboard/admin?tab=testing' }, { icon: Shield, label: 'Emergencia Geo', path: '/dashboard/admin?tab=emergency-geo' }, { icon: Compass, label: 'Navegación', path: '/dashboard/admin?tab=navigation' } ] }, { icon: AlertTriangle, label: 'Emergencias', path: '/dashboard/admin?tab=emergency' }, { icon: MessageSquare, label: 'Soporte', path: '/dashboard/admin?tab=support' }, { icon: DollarSign, label: 'Comisiones', path: '/dashboard/commissions', subItems: [ { icon: BarChart3, label: 'Dashboard', path: '/dashboard/commissions/dashboard' }, { icon: Settings, label: 'Reglas', path: '/dashboard/commissions/rules' }, { icon: FileText, label: 'Historial', path: '/dashboard/commissions/payments' } ] }, { icon: Settings, label: 'Configuración', path: '/dashboard/config', subItems: [ { icon: Server, label: 'APIs', path: '/dashboard/config/apis' }, { icon: CreditCard, label: 'Pagos', path: '/dashboard/config/payments' }, { icon: Settings, label: 'Parámetros', path: '/dashboard/config/parameters' }, { icon: Radio, label: 'Integraciones', path: '/dashboard/config/integrations' }, { icon: FileText, label: 'Auditoría', path: '/dashboard/config/audit' }, { icon: Shield, label: 'Security Center', path: '/dashboard/config/security' }, { icon: Brain, label: 'Personalización', path: '/dashboard/config/personalization' } ] }, { icon: BarChart3, label: 'Analytics', path: '/dashboard/analytics' }, { icon: Search, label: 'Buscar Lugares', path: '/dashboard/search-places' }, { icon: Store, label: 'Buscar Comercios', path: '/dashboard/search-establishments' } ] }, { icon: Plus, label: 'Channel Manager', path: '/dashboard/channel-manager', subItems: [ { icon: BarChart3, label: 'Resumen', path: '/dashboard/channel-manager?tab=overview' }, { icon: Zap, label: 'Canales', path: '/dashboard/channel-manager?tab=channels' }, { icon: Home, label: 'Propiedades', path: '/dashboard/channel-manager?tab=listings' }, { icon: BookOpen, label: 'Reservas', path: '/dashboard/channel-manager?tab=reservations' }, { icon: BarChart3, label: 'Analytics', path: '/dashboard/channel-manager?tab=analytics' } ] }, { icon: Hotel, label: 'Hotel Management', path: '/dashboard/hotel', subItems: [ { icon: Home, label: 'Habitaciones', path: '/dashboard/hotel/rooms' }, { icon: DoorOpen, label: 'Check-in', path: '/dashboard/hotel/checkin' }, { icon: BellRing, label: 'Room Service', path: '/dashboard/hotel/room-service' }, { icon: Key, label: 'Acceso', path: '/dashboard/hotel/keyless' }, { icon: Users, label: t('staff'), path: '/dashboard/hotel/staff' } ] }, { icon: UtensilsCrossed, label: 'Restaurant POS', path: '/dashboard/restaurant', subItems: [ { icon: CreditCard, label: 'POS Terminal', path: '/dashboard/restaurant/pos' }, { icon: Receipt, label: 'Pedidos', path: '/dashboard/restaurant/orders' }, { icon: ChefHat, label: 'Cocina', path: '/dashboard/restaurant/kitchen' }, { icon: Receipt, label: 'Cuentas', path: '/dashboard/restaurant/bills' }, { icon: Grid3x3, label: 'Mesas', path: '/dashboard/restaurant/tables' }, { icon: UtensilsCrossed, label: 'Menú', path: '/dashboard/restaurant/menu' }, { icon: Package, label: t('inventory'), path: '/dashboard/restaurant/inventory' }, { icon: Users, label: t('staff'), path: '/dashboard/restaurant/staff' } ] }, { icon: Car, label: 'Vehicle Management', path: '/dashboard/vehicle-management' }, { icon: Leaf, label: 'Sustainability', path: '/dashboard/sustainability' }, { icon: ShieldAlert, label: 'POLITUR', path: '/dashboard/politur', subItems: [ { icon: AlertTriangle, label: 'Emergencias', path: '/dashboard/politur/emergency' }, { icon: FileText, label: 'Reportes', path: '/dashboard/politur/reports' } ] }, { icon: UserCircle, label: 'Guías Turísticos', path: '/dashboard/guides', subItems: [ { icon: Home, label: 'Dashboard', path: '/dashboard/guides' }, { icon: BookOpen, label: 'Crear Itinerario', path: '/dashboard/guides/itinerary' }, { icon: BookOpen, label: 'Biblioteca', path: '/dashboard/guides/library' } ] }, { icon: Store, label: t('commerce'), path: '/dashboard/commerce', subItems: [ { icon: Store, label: t('myStore'), path: '/dashboard/commerce/store' }, { icon: CreditCard, label: t('posTerminal'), path: '/dashboard/commerce/pos' }, { icon: Package, label: t('inventory'), path: '/dashboard/commerce/inventory' }, { icon: Users, label: t('customers'), path: '/dashboard/commerce/customers' }, { icon: Users, label: t('staff'), path: '/dashboard/commerce/staff' }, { icon: Receipt, label: t('cashier'), path: '/dashboard/commerce/cashier' }, { icon: BarChart3, label: t('reports'), path: '/dashboard/commerce/reports' }, { icon: DollarSign, label: t('sales'), path: '/dashboard/commerce/sales' } ] }, { icon: Wallet, label: t('wallet'), path: '/dashboard/wallet' }, { icon: MessageSquare, label: 'Message', path: '/dashboard/messages', badge: '2' }, ]; const listingItems = [ { icon: List, label: t('myListings'), path: '/dashboard/my-listings', hasSubmenu: true }, { icon: Star, label: 'Reviews', path: '/dashboard/reviews' }, { icon: BookOpen, label: 'Bookings', path: '/dashboard/bookings' }, { icon: Heart, label: 'Bookmark', path: '/dashboard/bookmarks' }, { icon: FileText, label: 'Invoice', path: '/dashboard/invoices' }, ]; const accountItems = [ { icon: User, label: t('profile'), path: '/dashboard/profile' }, { icon: CreditCard, label: t('wallet'), path: '/dashboard/wallet' }, { icon: Settings, label: t('settings'), path: '/dashboard/settings' }, ]; return ( <>
{/* Background decorations */}
{/* Sidebar */} {/* Main Content Area */}
{/* Top Navigation */} {/* Page Content */}
{children}
); }; export default DashboardLayout;