gitscope
← marzneshin / v0.3.0-alpha8 / dashboard/src/features/sidebar/sidebar.tsx
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/features/sidebar/sidebar.tsx · TypeScript
Blame Raw
 1import { Sidebar, SidebarItem, Tooltip, TooltipContent, TooltipTrigger } from "@marzneshin/components";
 2import { useRouterState } from "@tanstack/react-router";
 3import { FC, useEffect } from "react";
 4import { sidebarItems } from ".";
 5import { cn } from "@marzneshin/utils";
 6
 7
 8interface DashboardSidebarProps {
 9    collapsed: boolean;
10    setCollapsed: (state: boolean) => void;
11}
12
13export const DashboardSidebar: FC<DashboardSidebarProps> = ({ collapsed, setCollapsed }) => {
14    const router = useRouterState();
15    const currentActivePath = router.location.pathname;
16
17    useEffect(() => { }, [collapsed]);
18
19    return (
20        <aside>
21            <nav className="w-full">
22                <Sidebar
23                    sidebar={sidebarItems}
24                    collapsed={collapsed}
25                    setCollapsed={setCollapsed}
26                >
27                    <div className="flex flex-col px-4 w-full h-full">
28                        <Sidebar.Body className="my-3">
29                            {Object.keys(sidebarItems).map((key) =>
30                            (
31                                <div className="w-full" key={key}>
32                                    <Sidebar.Group>{key}</Sidebar.Group>
33                                    {sidebarItems[key].map((item: SidebarItem, i) => (
34                                        <Tooltip>
35                                            <TooltipTrigger className="w-full">
36                                                <Sidebar.Item
37                                                    variant={currentActivePath === item.to ? "active" : "default"}
38                                                    className={cn("my-2 border-transparent", { "w-10 h-10": collapsed })}
39                                                    item={item}
40                                                    key={i}
41                                                />
42                                            </TooltipTrigger>
43                                            <TooltipContent>
44                                                {collapsed && item.title}
45                                            </TooltipContent>
46                                        </Tooltip>
47                                    )
48                                    )}
49                                </div>
50                            )
51                            )}
52                        </Sidebar.Body>
53                    </div>
54                </Sidebar>
55            </nav>
56        </aside>
57    )
58}