// sidebar.jsx — hibank Design System tokens function Sidebar({ activeNav, setActiveNav, sidebarOpen, setSidebarOpen, onLogout, pendingApproval = 0, primary, secondary, sidebarBg, role = 'super', user }) { const TEAL = primary || '#0056D2'; const DARK_BG = sidebarBg || '#001F5B'; const [expandedNavs, setExpandedNavs] = React.useState({ '4eyes': true, 'fds': false, 'refund_management': false }); const toggleExpand = (e, id) => { e.stopPropagation(); if (!sidebarOpen) setSidebarOpen(true); setExpandedNavs(prev => ({ ...prev, [id]: !prev[id] })); }; // ── Menu item registry ── const ITEM = { dashboard: { id: 'dashboard', label: 'Dashboard', icon: 'bx-home-alt-2' }, onboarding_monitor: { id: 'onboarding_monitor', label: 'Onboarding Monitor', icon: 'bx-desktop' }, merchant_management: { id: 'merchant_management', label: 'Merchant Management', icon: 'bx-store' }, merchant_business: { id: 'merchant_business', label: 'Merchant Business', icon: 'bx-briefcase' }, transaction_monitor: { id: 'transaction_monitor', label: 'Transaction Monitor', icon: 'bx-transfer' }, recon_settlement: { id: 'recon_settlement', label: 'Recon & Settlement', icon: 'bx-receipt' }, disbursement: { id: 'disbursement', label: 'Disbursement', icon: 'bx-money-withdraw' }, refund: { id: 'refund', label: 'Refund', icon: 'bx-undo' }, report_generator: { id: 'report_generator', label: 'Report Generator', icon: 'bx-file' }, fourEyes: { id: '4eyes', label: '4 Eyes', icon: 'bx-group', subItems: [ { id: '4eyes_checker', label: 'Checker', icon: 'bx-check-double' }, { id: 'approval', label: 'Approver', icon: 'bx-check-shield' } ] }, fds: { id: 'fds', label: 'FDS', icon: 'bx-shield-quarter', subItems: [ { id: 'fds_dashboard', label: 'Dashboard', icon: 'bx-tachometer' }, { id: 'fds_monitoring', label: 'Monitoring FDS', icon: 'bx-search-alt' }, { id: 'fds_parameter', label: 'Parameters', icon: 'bx-slider-alt' }, { id: 'fds_suspect', label: 'Suspect Management', icon: 'bx-user-x' } ] }, refund_management_admin: { id: 'refund_management', label: 'Refund Management', icon: 'bx-history', subItems: [ { id: 'refund_monitor', label: 'Refund Monitor', icon: 'bx-desktop' } ] }, refund_management_full: { id: 'refund_management', label: 'Refund Management', icon: 'bx-history', subItems: [ { id: 'refund_request', label: 'Refund Request', icon: 'bx-git-pull-request' }, { id: 'refund_monitor', label: 'Refund Monitor', icon: 'bx-desktop' } ] } }; // ── Menus per role ── const NAV_BY_ROLE = { // Hibank Admin admin: [ ITEM.dashboard, ITEM.onboarding_monitor, ITEM.merchant_management, ITEM.transaction_monitor, ITEM.fourEyes, ITEM.recon_settlement, ITEM.disbursement, ITEM.fds, ITEM.refund_management_admin, ITEM.report_generator ], // Super Admin — all menus super: [ ITEM.dashboard, ITEM.onboarding_monitor, ITEM.merchant_management, ITEM.merchant_business, ITEM.transaction_monitor, ITEM.fourEyes, ITEM.recon_settlement, ITEM.disbursement, ITEM.refund, ITEM.fds, ITEM.refund_management_full, ITEM.report_generator ], // Merchant merchant: [ ITEM.dashboard, ITEM.merchant_business, ITEM.transaction_monitor, ITEM.recon_settlement, ITEM.disbursement, ITEM.refund, ITEM.report_generator ] }; const navItems = NAV_BY_ROLE[role] || NAV_BY_ROLE.super; return (
{/* Logo */}
hibank setSidebarOpen(!sidebarOpen)} /> {sidebarOpen &&
hibank
Back Office
}
{/* Nav */} {/* User footer */}
{sidebarOpen ?
{(user && user.initials) || 'AB'}
{(user && user.name) || 'Arief Budiman'}
{(user && user.roleLabel) || 'Super Admin'}
:
{(user && user.initials) || 'AB'}
}
); } Object.assign(window, { Sidebar });