'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)}
/>
)}
{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}
);
}