import { useNavigate } from "react-router"; import { useCallback, useState } from "react"; import { useJsonRpc } from "@/hooks/useJsonRpc"; import { Button } from "@components/Button"; import LoadingSpinner from "../components/LoadingSpinner"; import { useDeviceUiNavigation } from "../hooks/useAppNavigation"; // Time to wait after initiating reboot before redirecting to home const REBOOT_REDIRECT_DELAY_MS = 5000; export default function SettingsGeneralRebootRoute() { const navigate = useNavigate(); const { send } = useJsonRpc(); const [isRebooting, setIsRebooting] = useState(false); const { navigateTo } = useDeviceUiNavigation(); const onConfirmUpdate = useCallback(async () => { setIsRebooting(true); // This is where we send the RPC to the golang binary send("reboot", { force: true }); await new Promise(resolve => setTimeout(resolve, REBOOT_REDIRECT_DELAY_MS)); navigateTo("/"); }, [navigateTo, send]); { /* TODO: Migrate to using URLs instead of the global state. To simplify the refactoring, we'll keep the global state for now. */ } return navigate("..")} onConfirmUpdate={onConfirmUpdate} />; } export function Dialog({ isRebooting, onClose, onConfirmUpdate, }: { isRebooting: boolean; onClose: () => void; onConfirmUpdate: () => void; }) { return (
); } function ConfirmationBox({ isRebooting, onYes, onNo, }: { isRebooting: boolean; onYes: () => void; onNo: () => void; }) { return (

Reboot JetKVM

Do you want to proceed with rebooting the system?

{isRebooting ? (
) : (
)}
); }