import { useEffect, useState } from 'react'; import { NavLink, Navigate, Outlet, useNavigate, useLocation } from 'react-router-dom'; import { LogOut, ChevronDown, Database, Users, KeyRound } from 'lucide-react'; import { cn } from '../lib/cn'; import { useAuth } from '../auth/context'; import { onAuthErrorAll, orderBookingClient } from '../api/clients'; import { APP_VERSION } from '../api/config'; import { NoticeStrips } from '../components/common/NoticeBanner'; import { ChangePasswordModal } from '../components/auth/ChangePasswordModal'; import { REPORT_MAP } from './ReportPage'; import { routeConfig } from '../routesConfig'; import logo from '../assets/logo.png'; const PATH_LABELS: Record = { "/my-orders": "My Orders", "/my-calls": "My Calls", "/my-daily": "My Daily Logs", "/orders": "Orders", "/calls": "Calls", "/daily": "Daily Logs", "/stores": "Stores", "/sales-report": "DSR", }; /** Auth-guarded shell: navy top bar + tab nav + routed . */ export function ConsoleLayout() { const { authed, logout, isAdmin, roles: userRoles, userEmail } = useAuth(); const navigate = useNavigate(); const location = useLocation(); const user = orderBookingClient.currentUser(); const [isChangePasswordOpen, setIsChangePasswordOpen] = useState(false); const isReportsActive = location.pathname.startsWith('/reports'); // A 401 from any workflow client bounces back to login. useEffect(() => { onAuthErrorAll(() => { logout(); navigate('/login', { replace: true }); }); }, [logout, navigate]); if (!authed) return ; const reportRoute = routeConfig.find(r => r.path === '/reports/:reportType'); const canSeeReports = reportRoute && ( (reportRoute.adminOnly && isAdmin) || (reportRoute.roles && reportRoute.roles.some(r => userRoles.includes(r))) || (!reportRoute.adminOnly && !reportRoute.roles) // open to all ); return (
Logo Krishna Sales

{user?.name || 'User'}

{user?.email || 'user@example.com'}

{userRoles && userRoles.length > 0 && (
{userRoles.map(role => ( {role} ))}
)}
{(isAdmin || userRoles?.includes('Admin') || userRoles?.includes('Manager')) && (
{isAdmin && ( cn("w-full text-left px-3 py-2 text-sm font-medium hover:bg-indigo-50 hover:text-indigo-700 rounded-md transition-colors flex items-center gap-2 cursor-pointer", isActive ? "text-indigo-700 bg-indigo-50" : "text-gray-700")} > Manage Datasets )} cn("w-full text-left px-3 py-2 text-sm font-medium hover:bg-indigo-50 hover:text-indigo-700 rounded-md transition-colors flex items-center gap-2 cursor-pointer", isActive ? "text-indigo-700 bg-indigo-50" : "text-gray-700")} > Manage Users
)}
Version {APP_VERSION}
setIsChangePasswordOpen(false)} userEmail={userEmail || user?.email} userName={user?.name} onSuccessLogout={() => { setIsChangePasswordOpen(false); logout(); navigate('/login', { replace: true }); }} />
); }