gitscope
← marzneshin / v0.6.2 / dashboard/src/components/header/menu.tsx
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/components/header/menu.tsx · TypeScript
Blame Raw
 1import {
 2    DropdownMenu,
 3    DropdownMenuContent,
 4    DropdownMenuItem,
 5    DropdownMenuLabel,
 6    DropdownMenuSeparator,
 7    DropdownMenuTrigger,
 8    DropdownMenuGroup,
 9    Button,
10} from "@marzneshin/components";
11import { Link } from "@tanstack/react-router";
12import { FC } from 'react';
13import { Settings, MenuIcon, ShieldCheck } from "lucide-react";
14import { LanguageSwitchMenu } from "@marzneshin/features/language-switch";
15import { ThemeToggle } from "@marzneshin/features/theme-switch";
16import { useAuth, Logout } from "@marzneshin/features/auth";
17import { useScreenBreakpoint } from "@marzneshin/hooks/use-screen-breakpoint";
18import { useTranslation } from "react-i18next";
19
20export const HeaderMenu: FC = () => {
21
22    const isDesktop = useScreenBreakpoint("md");
23    const { isSudo } = useAuth();
24    const { t } = useTranslation();
25
26    return (
27        <DropdownMenu>
28            <DropdownMenuTrigger asChild>
29                <Button
30                    variant="secondary"
31                    className="bg-gray-800 text-secondary dark:hover:bg-secondary-foreground dark:hover:text-secondary dark:text-secondary-foreground"
32                    size="icon"
33                >
34                    <MenuIcon />
35                </Button>
36            </DropdownMenuTrigger>
37            <DropdownMenuContent>
38                <DropdownMenuLabel>Menu</DropdownMenuLabel>
39                <DropdownMenuSeparator />
40                {(!isDesktop && isSudo()) && (
41                    <>
42                        <DropdownMenuItem className="w-full">
43                            <Link to="/settings" className="hstack gap-1 items-center justify-between w-full h-fit p-0">
44                                {t("settings")}
45                                <Settings className="size-4" />
46                            </Link>
47                        </DropdownMenuItem>
48                        <DropdownMenuSeparator />
49                        <DropdownMenuItem className="w-full">
50                            <Link to="/admins" className="hstack gap-1 items-center justify-between w-full h-fit p-0" >
51                                {t("admins")}
52                                <ShieldCheck className="size-4" />
53                            </Link>
54                        </DropdownMenuItem>
55                        <DropdownMenuSeparator />
56                    </>
57                )}
58                <DropdownMenuItem className="w-full">
59                    <Logout />
60                </DropdownMenuItem>
61                <DropdownMenuSeparator />
62                <DropdownMenuGroup>
63                    <LanguageSwitchMenu />
64                </DropdownMenuGroup>
65                <DropdownMenuSeparator />
66                <DropdownMenuGroup>
67                    <ThemeToggle />
68                </DropdownMenuGroup>
69            </DropdownMenuContent>
70        </DropdownMenu >
71    )
72};