import * as icon from '@mdi/js'; import { MenuAsideItem } from './interfaces'; import { getRoleLaneFromUser } from './helpers/roleLanes'; export const buildMenuAside = (currentUser?: any): MenuAsideItem[] => { const roleLane = getRoleLaneFromUser(currentUser); const isSuperAdmin = roleLane === 'super_admin'; const isAdmin = roleLane === 'admin'; const isConcierge = roleLane === 'concierge'; const isCustomer = roleLane === 'customer'; const operationsLabel = isCustomer ? 'My Stay' : isConcierge ? 'Stay Delivery' : 'Operations'; const operationsMenu: MenuAsideItem[] = [ { href: '/booking_requests/booking_requests-list', label: isCustomer ? 'My Requests' : isAdmin ? 'Incoming Requests' : 'Requests', icon: icon.mdiClipboardTextOutline, permissions: 'READ_BOOKING_REQUESTS', }, { href: '/approval_steps/approval_steps-list', label: isCustomer ? 'Approval Status' : 'Approvals', icon: icon.mdiCheckDecagram, permissions: 'READ_APPROVAL_STEPS', }, { href: '/reservations/reservations-list', label: isCustomer ? 'My Stays' : isConcierge ? 'Active Stays' : 'Stays', icon: icon.mdiCalendarCheck, permissions: 'READ_RESERVATIONS', }, { href: '/service_requests/service_requests-list', label: isCustomer ? 'Support' : 'Service Queue', icon: icon.mdiRoomService, permissions: 'READ_SERVICE_REQUESTS', }, { href: '/invoices/invoices-list', label: isCustomer ? 'Billing' : 'Invoices', icon: icon.mdiFileDocument, permissions: 'READ_INVOICES', }, { href: '/documents/documents-list', label: isCustomer ? 'My Documents' : isConcierge ? 'Guest Documents' : 'Documents', // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore icon: 'mdiPaperclip' in icon ? icon['mdiPaperclip' as keyof typeof icon] : icon.mdiFileDocument, permissions: 'READ_DOCUMENTS', }, ]; const menuAside: MenuAsideItem[] = [ { href: '/command-center', // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore icon: 'mdiShieldHomeOutline' in icon ? icon['mdiShieldHomeOutline' as keyof typeof icon] : icon.mdiViewDashboardOutline, label: 'Command Center', }, { label: operationsLabel, icon: icon.mdiClipboardTextOutline, permissions: [ 'READ_BOOKING_REQUESTS', 'READ_APPROVAL_STEPS', 'READ_RESERVATIONS', 'READ_SERVICE_REQUESTS', 'READ_INVOICES', 'READ_DOCUMENTS', ], menu: operationsMenu, }, ]; if (!isCustomer) { menuAside.push({ label: 'Portfolio', icon: icon.mdiHomeCity, permissions: [ 'READ_TENANTS', 'READ_ORGANIZATIONS', 'READ_PROPERTIES', 'READ_UNITS', 'READ_NEGOTIATED_RATES', 'READ_UNIT_TYPES', 'READ_AMENITIES', 'CREATE_TENANTS', 'CREATE_ORGANIZATIONS', 'CREATE_PROPERTIES', 'CREATE_UNIT_TYPES', 'CREATE_UNITS', ], menu: [ { href: '/portfolio-import', label: 'Import Center', icon: icon.mdiFileUploadOutline, permissions: [ 'CREATE_TENANTS', 'CREATE_ORGANIZATIONS', 'CREATE_PROPERTIES', 'CREATE_UNIT_TYPES', 'CREATE_UNITS', ], }, { href: '/tenants/tenants-list', label: 'Tenants', icon: icon.mdiDomain, permissions: 'READ_TENANTS', }, { href: '/organizations/organizations-list', label: 'Organizations', icon: icon.mdiOfficeBuildingOutline, permissions: 'READ_ORGANIZATIONS', }, { href: '/properties/properties-list', label: 'Properties', icon: icon.mdiHomeCity, permissions: 'READ_PROPERTIES', }, { href: '/units/units-list', label: 'Units', // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore icon: 'mdiDoor' in icon ? icon['mdiDoor' as keyof typeof icon] : icon.mdiHomeCity, permissions: 'READ_UNITS', }, { href: '/negotiated_rates/negotiated_rates-list', label: 'Negotiated Rates', // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore icon: 'mdiTag' in icon ? icon['mdiTag' as keyof typeof icon] : icon.mdiFileDocument, permissions: 'READ_NEGOTIATED_RATES', }, ], }); } if (isSuperAdmin || isAdmin) { const adminMenu: MenuAsideItem[] = [ { href: '/users/users-list', label: 'Users', icon: icon.mdiAccountGroup, permissions: 'READ_USERS', }, ]; if (isSuperAdmin) { adminMenu.push( { href: '/roles/roles-list', label: 'Roles', // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore icon: icon.mdiShieldAccountVariantOutline ?? icon.mdiAccountGroup, permissions: 'READ_ROLES', }, { href: '/permissions/permissions-list', label: 'Permissions', // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore icon: icon.mdiShieldAccountOutline ?? icon.mdiAccountGroup, permissions: 'READ_PERMISSIONS', }, { href: '/notifications/notifications-list', label: 'Notifications', // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore icon: 'mdiBell' in icon ? icon['mdiBell' as keyof typeof icon] : icon.mdiFileDocument, permissions: 'READ_NOTIFICATIONS', }, { href: '/audit_logs/audit_logs-list', label: 'Audit Logs', // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore icon: 'mdiClipboardPulse' in icon ? icon['mdiClipboardPulse' as keyof typeof icon] : icon.mdiClipboardTextOutline, permissions: 'READ_AUDIT_LOGS', }, { href: '/job_runs/job_runs-list', label: 'Job Runs', icon: icon.mdiClockOutline, permissions: 'READ_JOB_RUNS', }, ); } menuAside.push({ label: 'Administration', icon: icon.mdiAccountGroup, permissions: isSuperAdmin ? ['READ_USERS', 'READ_ROLES', 'READ_PERMISSIONS', 'READ_NOTIFICATIONS', 'READ_AUDIT_LOGS', 'READ_JOB_RUNS'] : ['READ_USERS'], menu: adminMenu, }); } menuAside.push( { href: '/profile', label: 'Profile', icon: icon.mdiAccountCircle, withDevider: true, }, { href: '/api-docs', target: '_blank', label: 'Swagger API', icon: icon.mdiFileCode, permissions: 'READ_API_DOCS', }, ); return menuAside; }; export default buildMenuAside;