'use client'; import { useEffect, useState } from 'react'; import { useRouter } from 'next/navigation'; import Link from 'next/link'; import { Button } from '@/components/ui/button'; import { authApi, userApi } from '@/lib/api'; import { ThemeToggle } from '@/components/shared/ThemeToggle'; import { PageTransition } from '@/components/shared/PageTransition'; import { ChevronLeftIcon, ChevronRightIcon, LayoutDashboardIcon, CoinsIcon, TargetIcon, SettingsIcon, LogOutIcon, MenuIcon } from 'lucide-react'; import { usePathname } from 'next/navigation'; export default function MainLayout({ children, }: Readonly<{ children: React.ReactNode; }>) { const router = useRouter(); const pathname = usePathname(); const [userName, setUserName] = useState(''); const [isLoading, setIsLoading] = useState(true); const [isSidebarCollapsed, setIsSidebarCollapsed] = useState(false); const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); useEffect(() => { // Check if user is authenticated const token = localStorage.getItem('token'); if (!token) { router.push('/login'); return; } // Fetch user profile userApi.getProfile() .then(data => { setUserName(data.user.Name); setIsLoading(false); }) .catch(() => { // If error fetching profile, redirect to login router.push('/login'); }); // Load sidebar state from localStorage const savedSidebarState = localStorage.getItem('sidebarCollapsed'); if (savedSidebarState !== null) { setIsSidebarCollapsed(savedSidebarState === 'true'); } }, [router]); // Close mobile menu when changing routes useEffect(() => { setIsMobileMenuOpen(false); }, [pathname]); const handleLogout = () => { authApi.logout(); }; const toggleSidebar = () => { const newState = !isSidebarCollapsed; setIsSidebarCollapsed(newState); localStorage.setItem('sidebarCollapsed', newState.toString()); }; const toggleMobileMenu = () => { setIsMobileMenuOpen(!isMobileMenuOpen); }; if (isLoading) { return (

Loading...

); } return (
{/* Top Navigation */}
{/* Mobile menu button - only visible on small screens */}
Finance Management
{userName}
{/* Mobile Menu - outside the normal flow and only visible when toggled */}
{/* Main Content */}
{/* Sidebar - hidden on mobile */} {/* Page Content */}
{children}
); }