import React, { useState, useEffect, useRef } from 'react'; import { Link, Outlet, useLocation } from '@tanstack/react-router'; import { cn } from '@/lib/utils'; import { StatusBar } from '@/components/StatusBar'; import { LayoutDashboard, Settings, Network, ChevronLeft, ChevronRight, RefreshCw, BarChart3, } from 'lucide-react'; import { useTranslation } from 'react-i18next'; import { Button } from '@/components/ui/button'; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'; import { ErrorBoundary } from 'react-error-boundary'; import { useToast } from '@/components/ui/use-toast'; import { getLocalizedErrorMessage } from '@/utils/errorMessages'; import iconPng from '@/assets/icon.png'; export const MainLayout: React.FC = () => { const location = useLocation(); const { t } = useTranslation(); const { toast } = useToast(); const hasShownRouteErrorToastRef = useRef(false); // Initialize state from localStorage if available, default to false (expanded) const [isCollapsed, setIsCollapsed] = useState(() => { const saved = localStorage.getItem('sidebar-collapsed'); return saved ? JSON.parse(saved) : false; }); // Persist state changes useEffect(() => { localStorage.setItem('sidebar-collapsed', JSON.stringify(isCollapsed)); }, [isCollapsed]); const navItems = [ { to: '/', icon: LayoutDashboard, label: t('nav.accounts'), }, { to: '/usage', icon: BarChart3, label: t('nav.usage'), }, { to: '/proxy', icon: Network, label: t('nav.proxy'), }, { to: '/settings', icon: Settings, label: t('nav.settings'), }, ]; return (