import { Calculator, ChevronRight, Coins, CreditCard, Handshake, MonitorSpeaker, Smartphone, UsersRound, Wallet2Icon, } from "lucide-react"; import { authOptions } from "@/app/auth"; import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from "@/components/ui/collapsible"; import { Sidebar, SidebarContent, SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarRail, } from "@/components/ui/sidebar"; import { getServerSession } from "next-auth"; import Link from "next/link"; type Permission = { id: number; name: string; }; type Categories = { id: string; children: ( | { title: string; link: string; perm_identifier: string; icon: React.JSX.Element; } | { title: string; link: string; icon: React.JSX.Element; perm_identifier?: undefined; } )[]; }[]; export async function AppSidebar({ ...props }: React.ComponentProps) { const categories = [ { id: "MENU", url: "#", children: [ { title: "Devices", link: "/devices?page=1", perm_identifier: "device", icon: , }, { title: "Payments", link: "/payments?page=1", icon: , perm_identifier: "payment", }, { title: "Parental Control", link: "/parental-control", icon: , perm_identifier: "device", }, { title: "Agreements", link: "/agreements", icon: , perm_identifier: "device", }, { title: "Wallet", link: "/wallet", icon: , perm_identifier: "wallet", }, ], }, { id: "ADMIN CONTROL", url: "#", children: [ { title: "Users", link: "/users", icon: , perm_identifier: "device", }, { title: "User Devices", link: "/user-devices", icon: , perm_identifier: "device", }, { title: "User Payments", link: "/user-payments", icon: , perm_identifier: "payment", }, { title: "Price Calculator", link: "/price-calculator", icon: , perm_identifier: "device", }, ], }, ]; const session = await getServerSession(authOptions); const filteredCategories = categories.map((category) => { const filteredChildren = category.children.filter((child) => { const permIdentifier = child.perm_identifier; return session?.user?.user_permissions?.some((permission: Permission) => { const permissionParts = permission.name.split(" "); const modelNameFromPermission = permissionParts.slice(2).join(" "); return modelNameFromPermission === permIdentifier; }); }); return { ...category, children: filteredChildren }; }); const filteredCategoriesWithChildren = filteredCategories.filter( (category) => category.children.length > 0, ); let CATEGORIES: Categories; if (session?.user?.is_superuser) { CATEGORIES = categories; } else { CATEGORIES = filteredCategoriesWithChildren; } return (

Sar Link Portal

{CATEGORIES.map((item) => { return ( {item.id}{" "} {item.children.map((item) => ( {item.icon} {item.title} ))} ); })}
); }