'use client'; import { useAuth } from '@/lib/context/auth-context'; import { Link, usePathname, useRouter } from '@/i18n/navigation'; import { useState, useEffect } from 'react'; import { useTranslations } from 'next-intl'; import NotificationDropdown from '@/components/NotificationDropdown'; import LanguageSwitcher from '@/components/LanguageSwitcher'; import AdminPanelDropdown from '@/components/admin/AdminPanelDropdown'; import Image from 'next/image'; import { BarChart3, Package, FileText, Search, BookOpen, Building2, Users, LogOut, Lock, Key, Home, User, } from 'lucide-react'; import { useSubscription } from '@/lib/context/subscription-context'; import StatusBadge from '@/components/ui/StatusBadge'; import type { PlanFeature } from '@/lib/api/subscriptions'; export default function DashboardLayout({ children }: { children: React.ReactNode }) { const { user, logout, loading, isAuthenticated } = useAuth(); const { hasFeature, subscription } = useSubscription(); const pathname = usePathname(); const router = useRouter(); const t = useTranslations('dashboard'); const [sidebarOpen, setSidebarOpen] = useState(false); useEffect(() => { if (!loading && !isAuthenticated) { router.replace(`/login?redirect=${encodeURIComponent(pathname)}`); } }, [loading, isAuthenticated, router, pathname]); if (loading) { return (
); } if (!isAuthenticated) { return null; } const navigation: Array<{ name: string; href: string; icon: any; requiredFeature?: PlanFeature }> = [ { name: t('nav.dashboard'), href: '/dashboard', icon: BarChart3, requiredFeature: 'dashboard' }, { name: t('nav.bookings'), href: '/dashboard/bookings', icon: Package }, { name: t('nav.documents'), href: '/dashboard/documents', icon: FileText }, { name: t('nav.tracking'), href: '/dashboard/track-trace', icon: Search, requiredFeature: 'dashboard' }, { name: t('nav.wiki'), href: '/dashboard/wiki', icon: BookOpen, requiredFeature: 'wiki' }, { name: t('nav.organization'), href: '/dashboard/settings/organization', icon: Building2 }, { name: t('nav.apiKeys'), href: '/dashboard/settings/api-keys', icon: Key, requiredFeature: 'api_access' as PlanFeature }, ...(user?.role === 'ADMIN' || user?.role === 'MANAGER' ? [ { name: t('nav.users'), href: '/dashboard/settings/users', icon: Users, requiredFeature: 'user_management' as PlanFeature }, ] : []), ]; const isActive = (href: string) => { if (href === '/dashboard') { return pathname === href; } return pathname.startsWith(href); }; return (
{sidebarOpen && (
setSidebarOpen(false)} /> )}
Xpeditis
{user?.firstName?.[0]} {user?.lastName?.[0]}

{user?.firstName} {user?.lastName}

{subscription?.planDetails?.statusBadge && subscription.planDetails.statusBadge !== 'none' && ( )}

{user?.email}

{navigation.find(item => isActive(item.href))?.name || t('topbar.defaultTitle')}

{user?.firstName?.[0]}{user?.lastName?.[0]}
{children}
); }