import { NavLink } from "react-router-dom"; import { Archive, BarChart, Building2, ChartAreaIcon, ClipboardList, FileText, Globe, Settings, ShieldAlert, Users2, UsersRound, } from "lucide-react"; import { useAuth } from "@/shared/context/AuthContext"; import { usePermissions } from "@/shared/context/PermissionContext"; import { useTranslation } from "react-i18next"; export interface MenuItem { label: string; href: string; icon: React.ReactNode; roles?: string[]; permissions?: string[]; isPrimary?: boolean; displayLabel?: string; children?: MenuItem[]; } export const AppMenuTabs = () => { const { user } = useAuth(); const userRoles = user?.roles.map((role) => role.key) || []; const menuItems: MenuItem[] = [ { label: "dashboard", href: "/user-management/dashboard", icon: , roles: ["super_admin"], isPrimary: true, }, { label: "organizations", href: "/user-management/organizations", icon: , roles: ["super_admin"], isPrimary: true, }, { label: "organizationAdmins", // Shortened for mobile displayLabel: "organizationAdmins", // Full label for desktop href: "/user-management/organization_admins", icon: , roles: ["super_admin"], isPrimary: true, }, { label: "externalUsers", // Shortened for mobile displayLabel: "externalUsers", // Full label for desktop href: "/user-management/external_users", icon: , roles: ["super_admin"], isPrimary: true, }, { label: "dashboard", href: "/user-management/user_management-dashboard", icon: , roles: ["admin", "organization_admin", "unit_admin"], isPrimary: true, }, { label: "userManagement", href: "/user-management/user_management", icon: , roles: ["admin", "organization_admin", "unit_admin"], isPrimary: true, }, // { // label: "userPositionApproval", // href: "/user-management/user-position-approval", // icon: , // roles: ["admin", "organization_admin", "unit_admin"], // permissions: ["can:activateEmployee"], // isPrimary: true, // }, // { // label: "All Records", // displayLabel: "All Records", // href: "/user-management/all-records", // icon: , // roles: ["admin", "organization_admin", "unit_admin"], // permissions: ["can:canViewAllRecords"], // isPrimary: true, // }, { label: "contentManagement", // Shortened for mobile displayLabel: "contentManagement", // Full label for desktop href: "/user-management/content-management", icon: , roles: ["admin", "organization_admin", "unit_admin"], isPrimary: true, }, { label: "webManagement", displayLabel: "webManagement", href: "/user-management/web-management", icon: , roles: ["admin", "organization_admin", "unit_admin"], isPrimary: true, }, { label: "Position", displayLabel: "positionTypes", href: "/user-management/position-management", icon: , roles: ["admin", "organization_admin", "unit_admin", "super_admin"], isPrimary: true, }, { label: "migratedRecords", displayLabel: "migratedRecords", href: "/user-management/migrated-records-management", icon: , roles: ["super_admin"], isPrimary: true, }, { label: "settings", displayLabel: "settings", href: "/user-management/organization-settings", icon: , roles: ["admin", "organization_admin", "unit_admin"], isPrimary: true, }, { label: "Bulk", displayLabel: "bulkUpload", href: "/user-management/bulk-upload", icon: , roles: ["admin", "organization_admin", "unit_admin"], isPrimary: true, }, { label: "Archive Users", displayLabel: "Archive Users", href: "/user-management/archive-users", icon: , roles: ["super_admin"], isPrimary: true, }, { label: "Archived Organizations", displayLabel: "Archived Organizations", href: "/user-management/archived-organizations", icon: , roles: ["super_admin"], isPrimary: true, }, { label: "Archive Users", displayLabel: "Archive Users", href: "/user-management/archives", icon: , roles: ["admin", "organization_admin", "unit_admin"], isPrimary: true, }, { label: "Archived Units & Positions", displayLabel: "Archived Units & Positions", href: "/user-management/archived", icon: , roles: ["admin", "organization_admin", "unit_admin"], isPrimary: true, }, { label: "Sector Reports", displayLabel: "Sector Reports", href: "/user-management/sector-reports", icon: , roles: ["unit_admin", "admin", "organization_admin"], isPrimary: true, }, { label: "activityLog", href: "/user-management/activity_log", icon: , roles: ["super_admin"], isPrimary: false, }, { label: "setting", href: "/user-management/settings", icon: , roles: ["super_admin"], isPrimary: false, }, { label: "Letter Template", href: "/user-management/templates", icon: , roles: ["super_admin"], isPrimary: false, }, { label: "Add Site", href: "/user-management/add-site", icon: , roles: ["super_admin"], isPrimary: true, }, // { // label: "branding.title", // href: "/user-management/web-management/Branding/Branding", // icon: , // roles: ["super_admin"], // isPrimary: true, // }, ]; const { permissions } = usePermissions(); const { t } = useTranslation(); const filteredMenu = menuItems.filter((item) => item?.roles?.some((r) => userRoles.includes(r)), ); const primaryMenuItems = filteredMenu.filter( (item) => item.isPrimary !== false, ); const secondaryMenuItems = filteredMenu.filter( (item) => item.isPrimary === false, ); return (
{/* Mobile View - Two separate rows */}
{/* Primary items row */}
{primaryMenuItems.map((item) => ( `flex items-center gap-1 px-3 py-2.5 mr-2 text-xs font-medium transition-colors whitespace-nowrap ${ isActive ? "text-primary dark:text-primary-400 border-b-2 border-primary dark:border-primary-400" : "text-slate-700 dark:text-gray-300 hover:text-primary dark:hover:text-primary-400" }` } > {item.icon} {t(`organization.${item.label}`, item.label)} ))}
{/* Secondary items row (if any) */} {secondaryMenuItems.length > 0 && (
{secondaryMenuItems.map((item) => ( `flex items-center gap-1 px-3 py-2.5 mr-2 text-xs font-medium transition-colors whitespace-nowrap ${ isActive ? "text-primary dark:text-primary-400 border-b-2 border-primary dark:border-primary-400" : "text-slate-700 dark:text-gray-300 hover:text-primary dark:hover:text-primary-400" }` } > {item.icon} {t(`organization.${item.label}`, item.label)} ))}
)}
{/* Desktop View - Single row with all items */}
{filteredMenu.map((item) => ( `flex items-center gap-2 px-4 py-3 text-sm font-medium transition-colors whitespace-nowrap ${ isActive ? "text-primary dark:text-primary-400 border-b-2 border-primary dark:border-primary-400" : "text-slate-700 dark:text-gray-300 hover:text-primary dark:hover:text-primary-400" }` } > {item.icon} {t(`organization.${item.label}`, item.label)} ))}
); };