import { LuActivity, LuGithub, LuLifeBuoy, LuList, 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 { Button } from "../ui/button"; 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 { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from "../ui/alert-dialog"; import { useEffect, useState } from "react"; import { useRestart } from "@/api/ws"; import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle, } from "../ui/sheet"; import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/tooltip"; import ActivityIndicator from "../indicators/activity-indicator"; import { isDesktop } from "react-device-detect"; import { Drawer, DrawerContent, DrawerTrigger } from "../ui/drawer"; import { Dialog, DialogClose, DialogContent, DialogPortal, DialogTrigger, } from "../ui/dialog"; type GeneralSettings = { className?: string; }; export default function GeneralSettings({ className }: GeneralSettings) { const { theme, colorScheme, setTheme, setColorScheme } = useTheme(); const [restartDialogOpen, setRestartDialogOpen] = useState(false); const [restartingSheetOpen, setRestartingSheetOpen] = useState(false); const [countdown, setCountdown] = useState(60); const { send: sendRestart } = useRestart(); useEffect(() => { let countdownInterval: NodeJS.Timeout; if (restartingSheetOpen) { countdownInterval = setInterval(() => { setCountdown((prevCountdown) => prevCountdown - 1); }, 1000); } return () => { clearInterval(countdownInterval); }; }, [restartingSheetOpen]); useEffect(() => { if (countdown === 0) { window.location.href = "/"; } }, [countdown]); const handleForceReload = () => { window.location.href = "/"; }; 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 ( <>
{restartDialogOpen && (This page will reload in {countdown} seconds.