From 1549b209b3b90c8b395dec68a450d4c68259cf8c Mon Sep 17 00:00:00 2001 From: i701 Date: Tue, 1 Jul 2025 07:52:33 +0500 Subject: [PATCH] =?UTF-8?q?refactor:=20reorganize=20imports=20and=20enhanc?= =?UTF-8?q?e=20admin=20category=20filtering=20in=20AppSidebar=20?= =?UTF-8?q?=F0=9F=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/auth/application-layout.tsx | 14 +++--- components/ui/app-sidebar.tsx | 65 ++++++++++++++------------ 2 files changed, 40 insertions(+), 39 deletions(-) diff --git a/components/auth/application-layout.tsx b/components/auth/application-layout.tsx index 573ccfc..08a9bf4 100644 --- a/components/auth/application-layout.tsx +++ b/components/auth/application-layout.tsx @@ -1,21 +1,19 @@ -import { DeviceCartDrawer } from "@/components/device-cart"; -import { Wallet } from "@/components/wallet"; +import { redirect } from "next/navigation"; +import { getServerSession } from "next-auth"; import { NuqsAdapter } from 'nuqs/adapters/next/app' - -import { ModeToggle } from "@/components/theme-toggle"; -import { AppSidebar } from "@/components/ui/app-sidebar"; - import { getProfile } from "@/actions/payment"; import { authOptions } from "@/app/auth"; +import { DeviceCartDrawer } from "@/components/device-cart"; +import { ModeToggle } from "@/components/theme-toggle"; +import { AppSidebar } from "@/components/ui/app-sidebar"; import { Separator } from "@/components/ui/separator"; import { SidebarInset, SidebarProvider, SidebarTrigger, } from "@/components/ui/sidebar"; +import { Wallet } from "@/components/wallet"; import { tryCatch } from "@/utils/tryCatch"; -import { getServerSession } from "next-auth"; -import { redirect } from "next/navigation"; import { WelcomeBanner } from "../welcome-banner"; import { AccountPopover } from "./account-popver"; diff --git a/components/ui/app-sidebar.tsx b/components/ui/app-sidebar.tsx index c55d7a4..4332501 100644 --- a/components/ui/app-sidebar.tsx +++ b/components/ui/app-sidebar.tsx @@ -9,7 +9,8 @@ import { UsersRound, Wallet2Icon, } from "lucide-react"; - +import Link from "next/link"; +import { getServerSession } from "next-auth"; import { authOptions } from "@/app/auth"; import { Collapsible, @@ -28,8 +29,6 @@ import { SidebarMenuItem, SidebarRail, } from "@/components/ui/sidebar"; -import { getServerSession } from "next-auth"; -import Link from "next/link"; type Permission = { id: number; @@ -40,17 +39,17 @@ type Categories = { id: string; children: ( | { - title: string; - link: string; - perm_identifier: string; - icon: React.JSX.Element; - } + title: string; + link: string; + perm_identifier: string; + icon: React.JSX.Element; + } | { - title: string; - link: string; - icon: React.JSX.Element; - perm_identifier?: undefined; - } + title: string; + link: string; + icon: React.JSX.Element; + perm_identifier?: undefined; + } )[]; }[]; @@ -128,27 +127,31 @@ export async function AppSidebar({ 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) { + if (session?.user?.is_admin) { CATEGORIES = categories; } else { - CATEGORIES = filteredCategoriesWithChildren; + // Filter out ADMIN CONTROL category for non-admin users + const nonAdminCategories = categories.filter( + (category) => category.id !== "ADMIN CONTROL" + ); + + const filteredCategories = nonAdminCategories.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 }; + }); + + CATEGORIES = filteredCategories.filter( + (category) => category.children.length > 0, + ); } return (