import { LuActivity, LuGithub, LuLifeBuoy, LuList, LuLogOut, LuMoon, LuPenSquare, LuRotateCw, LuSettings, LuSun, LuSunMoon, } from "react-icons/lu"; import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, } from "../ui/dropdown-menu"; import { Link } from "react-router-dom"; import { CgDarkMode } from "react-icons/cg"; import { colorSchemes, friendlyColorSchemeName, useTheme, } from "@/context/theme-provider"; import { IoColorPalette } from "react-icons/io5"; import { useState } from "react"; import { useRestart } from "@/api/ws"; import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/tooltip"; import { isDesktop, isMobile } from "react-device-detect"; import { Drawer, DrawerContent, DrawerTrigger } from "../ui/drawer"; import { Dialog, DialogClose, DialogContent, DialogPortal, DialogTrigger, } from "../ui/dialog"; import { TooltipPortal } from "@radix-ui/react-tooltip"; import { cn } from "@/lib/utils"; import useSWR from "swr"; import RestartDialog from "../overlay/dialog/RestartDialog"; type GeneralSettingsProps = { className?: string; }; export default function GeneralSettings({ className }: GeneralSettingsProps) { const { data: profile } = useSWR("profile"); const { data: config } = useSWR("config"); const logoutUrl = config?.proxy?.logout_url || "/api/logout"; // settings const { theme, colorScheme, setTheme, setColorScheme } = useTheme(); const [restartDialogOpen, setRestartDialogOpen] = useState(false); const { send: sendRestart } = useRestart(); const Container = isDesktop ? DropdownMenu : Drawer; const Trigger = isDesktop ? DropdownMenuTrigger : DrawerTrigger; const Content = isDesktop ? DropdownMenuContent : DrawerContent; const MenuItem = isDesktop ? DropdownMenuItem : DialogClose; const SubItem = isDesktop ? DropdownMenuSub : Dialog; const SubItemTrigger = isDesktop ? DropdownMenuSubTrigger : DialogTrigger; const SubItemContent = isDesktop ? DropdownMenuSubContent : DialogContent; const Portal = isDesktop ? DropdownMenuPortal : DialogPortal; return ( <>

Settings

{isMobile && ( <> Current User: {profile?.username || "anonymous"} Logout )} System System metrics System logs Configuration Settings Configuration editor Appearance Dark Mode setTheme("light")} > {theme === "light" ? ( <> Light ) : ( Light )} setTheme("dark")} > {theme === "dark" ? ( <> Dark ) : ( Dark )} setTheme("system")} > {theme === "system" ? ( <> System ) : ( System )} Theme {colorSchemes.map((scheme) => ( setColorScheme(scheme)} > {scheme === colorScheme ? ( <> {friendlyColorSchemeName(scheme)} ) : ( {friendlyColorSchemeName(scheme)} )} ))} Help Documentation GitHub setRestartDialogOpen(true)} > Restart Frigate
setRestartDialogOpen(false)} onRestart={() => sendRestart("restart")} /> ); }