import { useEffect, useState } from 'react'; import { NavLink, Navigate, Outlet, useNavigate } from 'react-router-dom'; import { LogOut, Menu, X } from 'lucide-react'; import { cn } from '../lib/cn'; import { useAuth } from '../auth/context'; import { onAuthErrorAll, orderBookingClient } from '../api/clients'; import { SCREENS } from './tabs'; import './screen.css'; /** Auth-guarded shell: slim navy top bar + fixed bottom tab nav + routed . */ export function ConsoleLayout() { const { authed, logout } = useAuth(); const navigate = useNavigate(); const user = orderBookingClient.currentUser(); const [isMenuOpen, setIsMenuOpen] = useState(false); // A 401 from any workflow client bounces back to login. useEffect(() => { onAuthErrorAll(() => { logout(); navigate('/login', { replace: true }); }); }, [logout, navigate]); if (!authed) return ; return (
Krishna Sales {/* Sandbox {APP_ID}{user?.name ? ` ยท ${user.name}` : ''} */}
{/* Sidebar Overlay */} {isMenuOpen && (
setIsMenuOpen(false)} /> )} {/* Sidebar */}
Krishna Field Sales
{SCREENS.map((t) => { const Icon = t.icon; return ( setIsMenuOpen(false)} className={({ isActive }) => cn( "flex items-center gap-3 px-4 py-3 mx-2 rounded-lg no-underline transition-colors duration-150 sidebar-item", isActive ? "active" : "" )} > {t.label} ); })}
{user && (
{user.name || 'User'} {user.email || 'user@email.com'}
)}
); }