ai-helpdesk-api / Frontend /src /admin /layout /AdminLayout.jsx
ritesh19180's picture
Upload folder using huggingface_hub
d96d2a2 verified
Raw
History Blame Contribute Delete
2.88 kB
import React, { useState } from 'react';
import { Outlet } from 'react-router-dom';
import AdminSidebar from '../components/AdminSidebar';
import AdminHeader from '../components/AdminHeader';
import NotificationToast from '../../user/components/NotificationToast';
/**
* AdminLayout Component
* Master framework for the administrative zone.
* Enforces a fixed-sidebar architecture with a centered, high-density content terminal.
*/
const AdminLayout = () => {
const [isMobileNavOpen, setIsMobileNavOpen] = useState(false);
const [isSidebarCollapsed, setIsSidebarCollapsed] = useState(false);
return (
<div className="flex h-screen bg-[#f8faf9] overflow-hidden font-sans">
{/* Master Navigation Column (Responsive) */}
<div
className={`hidden md:block flex-shrink-0 relative z-40 transition-all duration-300`}
style={{ width: isSidebarCollapsed ? '80px' : '260px' }}
>
<AdminSidebar isCollapsed={isSidebarCollapsed} onToggleCollapse={() => setIsSidebarCollapsed(!isSidebarCollapsed)} />
</div>
{/* Viewport Execution Layer */}
<div className="flex-1 flex flex-col min-w-0 relative h-full">
{/* Global Command Header */}
<AdminHeader
onMobileNavToggle={() => setIsMobileNavOpen(!isMobileNavOpen)}
isSidebarCollapsed={isSidebarCollapsed}
onToggleSidebar={() => setIsSidebarCollapsed(!isSidebarCollapsed)}
/>
{/* Operational Workspace */}
<main className="flex-1 overflow-x-hidden overflow-y-auto custom-scrollbar relative">
{/* Centered Payload Container */}
<div className="max-w-[1280px] w-full mx-auto px-6 md:px-10 py-8 md:py-12 animate-in fade-in slide-in-from-bottom-6 duration-1000">
<Outlet />
</div>
</main>
</div>
{/* Real-time System Notifications */}
<NotificationToast />
{/* Mobile Nav Overlay (Emergency protocols) */}
{isMobileNavOpen && (
<div
className="fixed inset-0 bg-slate-900/80 backdrop-blur-md z-50 lg:hidden flex transition-opacity duration-300"
onClick={() => setIsMobileNavOpen(false)}
>
<div
className="w-[85%] max-w-[280px] h-full shadow-2xl animate-in slide-in-from-left duration-300"
onClick={(e) => e.stopPropagation()}
>
<AdminSidebar isMobile={true} onClose={() => setIsMobileNavOpen(false)} />
</div>
</div>
)}
</div>
);
};
export default AdminLayout;