admin / Synapse-Cortex
publicSelf Hosted ITSM Tool with RBAC/Tenanting and MFA
Synapse-Cortex / Synapse-Cortexv2 / frontend / src / layout / Sidebar.tsx
3438 B · main
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | import { NavLink } from 'react-router-dom' import { useAuth } from '../auth/AuthContext' const navLinkClass = ({ isActive }: { isActive: boolean }) => `block px-3 py-2 rounded font-display text-xs tracking-wide hover:bg-cortex-panel2 hover:text-accent-blue transition ${ isActive ? 'bg-cortex-panel2 text-accent-blue border-l-2 border-accent-blue' : 'border-l-2 border-transparent' }` export function Sidebar() { const { user, isAdmin, isGlobalAdmin } = useAuth() return ( <aside className="w-60 shrink-0 bg-cortex-panel border-r border-cortex-border flex flex-col"> <div className="px-5 py-5 border-b border-cortex-border flex items-center gap-2"> <img src="/img/cortex-logo.webp" alt="Synapse-Cortex" className="h-9 w-9" /> <div> <div className="text-[9px] text-accent-blue tracking-widest font-display">SYNAPSE</div> <div className="text-sm font-display font-bold text-chrome">CORTEX</div> </div> </div> <nav className="flex-1 px-3 py-4 space-y-1 overflow-y-auto"> <NavLink to="/" end className={navLinkClass}> ▣ DASHBOARD </NavLink> <NavLink to="/tickets" className={navLinkClass}> ☰ TICKETS </NavLink> <NavLink to="/assets" className={navLinkClass}> ◹ ASSETS (CMDB) </NavLink> <div className="pt-4 mt-2 border-t border-cortex-border"> <div className="px-3 pb-1 text-[10px] text-cortex-muted uppercase tracking-widest">Settings</div> <NavLink to="/settings" className={navLinkClass}> ⚙ PROFILE & MFA </NavLink> </div> {isAdmin && ( <div className="pt-4 mt-2 border-t border-cortex-border"> <div className="px-3 pb-1 text-[10px] text-cortex-muted uppercase tracking-widest">Admin</div> <NavLink to="/admin/users" className={navLinkClass}> 👤 USERS </NavLink> <NavLink to="/admin/sla-policies" className={navLinkClass}> ⏲ SLA POLICIES </NavLink> <NavLink to="/admin/asset-types" className={navLinkClass}> 💻 ASSET TYPES </NavLink> <NavLink to="/admin/integrations" className={navLinkClass}> 🔗 INTEGRATIONS </NavLink> <NavLink to="/admin/audit" className={navLinkClass}> 📜 AUDIT TRAIL </NavLink> <NavLink to="/admin/playbooks" className={navLinkClass}> 🧠 PLAYBOOKS </NavLink> {isGlobalAdmin && ( <NavLink to="/admin/ai-settings" className={navLinkClass}> ⚡ AI SETTINGS </NavLink> )} {isGlobalAdmin && ( <NavLink to="/admin/vault" className={navLinkClass}> 🔒 VAULT </NavLink> )} </div> )} </nav> <div className="px-4 py-4 border-t border-cortex-border"> <div className="text-[9px] text-cortex-muted uppercase tracking-widest">Tenant</div> <div className="text-xs text-chrome-dim truncate">{user?.tenant_name}</div> </div> </aside> ) } |