import 'package:flutter/material.dart'; import '../../core/constants/enums.dart'; import '../../core/constants/route_constants.dart'; import '../../core/utils/permission_utils.dart'; class MenuItem { const MenuItem({ required this.label, required this.icon, required this.route, required this.module, this.children = const [], this.requiredRole, }); final String label; final IconData icon; final String route; final String module; final List children; final UserRole? requiredRole; } const List appMenuItems = [ MenuItem( label: 'Dashboard', icon: Icons.dashboard_outlined, route: RouteConstants.dashboard, module: 'dashboard', ), // MenuItem( // label: 'Companies', // icon: Icons.business_outlined, // route: RouteConstants.companies, // module: 'companies', // requiredRole: UserRole.superAdmin, // ), // MenuItem( // label: 'Branches', // icon: Icons.account_tree_outlined, // route: RouteConstants.branches, // module: 'branches', // ), MenuItem( label: 'Assets', icon: Icons.inventory_2_outlined, route: RouteConstants.assets, module: 'assets', children: [ MenuItem( label: 'Asset Master', icon: Icons.devices_outlined, route: RouteConstants.assets, module: 'assets', ), MenuItem( label: 'Alerts', icon: Icons.notifications_outlined, route: RouteConstants.assetAlerts, module: 'assets', ), ], ), MenuItem( label: 'Vendors', icon: Icons.store_outlined, route: RouteConstants.vendors, module: 'vendors', ), MenuItem( label: 'Purchase Orders', icon: Icons.receipt_long_outlined, route: RouteConstants.purchaseOrders, module: 'purchase_orders', ), MenuItem( label: 'GRN', icon: Icons.inventory_2_outlined, route: RouteConstants.grn, module: 'grn', ), MenuItem( label: 'Reports', icon: Icons.assessment_outlined, route: RouteConstants.reports, module: 'reports', ), MenuItem( label: 'Users & Roles', icon: Icons.admin_panel_settings_outlined, route: RouteConstants.usersRoleManagement, module: 'users', ), MenuItem( label: 'Master Data', icon: Icons.dataset_outlined, route: RouteConstants.masterData, module: 'master_data', ), MenuItem( label: 'Audit Logs', icon: Icons.history_outlined, route: RouteConstants.auditLogs, module: 'audit_logs', ), MenuItem( label: 'Settings', icon: Icons.settings_outlined, route: RouteConstants.settings, module: 'settings', ), ]; /// Routes rendered under the Support section (after primary ops menus). const Set supportMenuRoutes = { RouteConstants.usersRoleManagement, RouteConstants.masterData, RouteConstants.auditLogs, RouteConstants.settings, }; List getVisibleMenuItems({ required List permissions, required UserRole role, }) { // Only '*' grants every menu. Do not unlock all items by role alone — // otherwise items like Reports appear without REPORTS:view. if (permissions.contains('*')) { return appMenuItems; } final visible = []; for (final item in appMenuItems) { if (item.requiredRole != null && !isSuperAdmin(role) && role != item.requiredRole) { continue; } if (item.children.isNotEmpty) { final visibleChildren = item.children .where( (child) => canSeeMenuModule( permissions: permissions, module: child.module, role: role, ), ) .toList(); if (visibleChildren.isEmpty) continue; visible.add( MenuItem( label: item.label, icon: item.icon, route: visibleChildren.first.route, module: item.module, children: visibleChildren, requiredRole: item.requiredRole, ), ); continue; } if (!canSeeMenuModule( permissions: permissions, module: item.module, role: role, )) { continue; } visible.add(item); } return visible; }