Previous side menu auto open
unknown
typescript
a year ago
2.8 kB
6
Indexable
import { ArrowLeft, ArrowRight, File, Inbox, MessagesSquare, Send, ShoppingCart, Users2, } from "lucide-react"; import { useEffect, useState } from "react"; import { sideMenuObjType } from "../../../types/routes/RoutesTypes"; import { SidemenuLayout } from "./SidemenuLayout"; import { useRecoilValue } from "recoil"; import { userAtom } from "../../../store/atoms/user"; import { TRoles } from "../../../lib/constants"; const sideMenuLinks: sideMenuObjType[] = [ { title: "Dashboard", icon: Inbox, route: "/", access: ["SUPER_ADMIN", "ADMIN", "STAFF", "USER"], variant: "default", }, { title: "Athlete", icon: File, route: "/athlete/list", access: ["SUPER_ADMIN", "ADMIN", "STAFF", "USER"], variant: "ghost", }, { title: "Team", icon: Send, route: "/team/list", access: ["SUPER_ADMIN", "ADMIN", "STAFF", "USER"], variant: "ghost", }, { title: "Brand", icon: ShoppingCart, route: "/brand/list", access: ["SUPER_ADMIN", "ADMIN", "STAFF", "USER"], variant: "ghost", }, { title: "League", icon: MessagesSquare, route: "/task/list", access: ["SUPER_ADMIN", "ADMIN", "STAFF", "USER"], variant: "ghost", }, { title: "Mail", icon: Users2, route: "/mail/list", access: ["SUPER_ADMIN", "ADMIN", "STAFF", "USER"], variant: "ghost", }, ]; function SideMenu() { const [isCollapsed, setIsCollapsed] = useState<boolean>(false); const user = useRecoilValue(userAtom); const userRole: TRoles | undefined = user?.role; const [allowedMenus, setAllowedMenus] = useState<sideMenuObjType[]>([]); useEffect(() => { const menus = sideMenuLinks?.filter((link) => link?.access?.some((role) => role === userRole) ); setAllowedMenus(menus); }, [userRole]); return ( <div className=" relative flex-col md:flex p-2 border rounded-md"> <SidemenuLayout sidemenus={allowedMenus} isCollapsed={isCollapsed} /> <div onClick={() => setIsCollapsed((pv) => !pv)} className="absolute -right-4 top-20 w-7 h-7 border rounded-md flex items-center justify-center" > {isCollapsed ? ( <ArrowRight className="w-4 h-4" /> ) : ( <ArrowLeft className="w-4 h-4" /> )} </div> </div> ); } export default SideMenu;
Editor is loading...
Leave a Comment