import { useState, useEffect } from "react"; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from "@/components/ui/alert-dialog"; import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetDescription, } from "@/components/ui/sheet"; import { Button } from "@/components/ui/button"; import ActivityIndicator from "@/components/indicators/activity-indicator"; import { baseUrl } from "@/api/baseUrl"; type RestartDialogProps = { isOpen: boolean; onClose: () => void; onRestart: () => void; }; export default function RestartDialog({ isOpen, onClose, onRestart, }: RestartDialogProps) { const [restartDialogOpen, setRestartDialogOpen] = useState(isOpen); const [restartingSheetOpen, setRestartingSheetOpen] = useState(false); const [countdown, setCountdown] = useState(60); useEffect(() => { setRestartDialogOpen(isOpen); }, [isOpen]); 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 = baseUrl; } }, [countdown]); const handleRestart = () => { setRestartingSheetOpen(true); onRestart(); }; const handleForceReload = () => { window.location.href = baseUrl; }; return ( <> { setRestartDialogOpen(false); onClose(); }} > Are you sure you want to restart Frigate? Cancel Restart setRestartingSheetOpen(false)} > e.preventDefault()}> Frigate is Restarting This page will reload in {countdown} seconds. Force Reload Now > ); }